Просматриваем заголовок исполняемого файла
|
В Интернете можно найти достаточное количество информации о формате исполняемых файлов. В данном примере мне хотелось бы показать Вам как можно получить данные из заголовка. Для примера нужно создать консольное приложение, вот собственно код:
#include <iostream> #include <windows.h> #include <conio.h> using namespace std;
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
int main() { HANDLE hStd = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTitle("[ViewHeader] Code by Lazy_elf"); HMODULE hMod = GetModuleHandle(NULL); if(hMod) { SetConsoleTextAttribute( hStd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); //_IMAGE_DOS_HEADER cout<<"---------------------------\n"<<"_IMAGE_DOS_HEADER:"<<endl<<"---------------------------"<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); PIMAGE_DOS_HEADER pDH = (PIMAGE_DOS_HEADER)hMod; cout<<"Magic number "<<hex<<pDH->e_magic; if(pDH->e_magic == IMAGE_DOS_SIGNATURE){cout<<"(MZ)"<<endl;}else{cout<<"(not MZ)"<<endl;} cout<<"Bytes on last page of file "<<pDH->e_cblp<<endl; cout<<"Pages in file "<<pDH->e_cp<<endl; cout<<"Relocations "<<pDH->e_crlc<<endl; cout<<"Size of header in paragraphs "<<pDH->e_cparhdr<<endl; cout<<"Minimum extra paragraphs needed "<<pDH->e_minalloc<<endl; cout<<"Maximum extra paragraphs needed "<<pDH->e_maxalloc<<endl; cout<<"Initial (relative) SS value "<<pDH->e_ss<<endl; cout<<"Initial SP value "<<pDH->e_sp<<endl; cout<<"Checksum "<<pDH->e_csum<<endl; cout<<"Initial IP value "<<pDH->e_ip<<endl; cout<<"Initial (relative) CS value "<<pDH->e_cs<<endl; cout<<"File address of relocation table "<<pDH->e_lfarlc<<endl; cout<<"Overlay number "<<pDH->e_ovno<<endl; cout<<"Reserved words "<<pDH->e_res<<endl; cout<<"OEM identifier (for e_oeminfo) "<<pDH->e_oemid<<endl; cout<<"OEM information "<<pDH->e_oeminfo<<endl; cout<<"Reserved words "<<pDH->e_res2<<endl; cout<<"File address of new exe header "<<pDH->e_lfanew<<endl; //_IMAGE_NT_HEADERS SetConsoleTextAttribute(hStd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN| FOREGROUND_BLUE); cout<<"---------------------------\n"<<"_IMAGE_NT_HEADERS:"<<endl<<"---------------------------"<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); PIMAGE_NT_HEADERS pPEH = (PIMAGE_NT_HEADERS)NTSIGNATURE(pDH); cout<<"Signature "<<pPEH->Signature; if(pPEH->Signature == IMAGE_NT_SIGNATURE){cout<<"(PE)"<<endl;}else{cout<<"(not PE)"<<endl;} IMAGE_FILE_HEADER iFH =(IMAGE_FILE_HEADER)pPEH->FileHeader; cout<<"Machine "<<hex<<iFH.Machine<<endl; cout<<"NumberOfSections "<<iFH.NumberOfSections<<endl; cout<<"TimeDateStamp "<<iFH.TimeDateStamp<<endl; cout<<"PointerToSymbolTable "<<iFH.PointerToSymbolTable<<endl; cout<<"NumberOfSymbols "<<iFH.NumberOfSymbols<<endl; cout<<"SizeOfOptionalHeader "<<iFH.SizeOfOptionalHeader<<endl; cout<<"Characteristics "<<iFH.Characteristics<<endl; //_IMAGE_OPTIONAL_HEADER SetConsoleTextAttribute(hStd,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN| FOREGROUND_BLUE); IMAGE_OPTIONAL_HEADER32 iOH = (IMAGE_OPTIONAL_HEADER32)pPEH->OptionalHeader; cout<<"---------------------------\n"<<"_IMAGE_OPTIONAL_HEADER:"<<endl<<"---------------------------"<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_INTENSITY|FOREGROUND_GREEN); cout<<"// Standard fields."<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<<"Magic "<<iOH.Magic<<endl; cout<<"Major.Minor(LinkerVersion) "<<dec<<(int)iOH.MajorLinkerVersion<<"."<< (int)iOH.MinorLinkerVersion<<endl; cout<<"SizeOfCode "<<hex<<iOH.SizeOfCode<<endl; cout<<"SizeOfInitializedData "<<iOH.SizeOfInitializedData<<endl; cout<<"SizeOfUninitializedData "<<iOH.SizeOfUninitializedData<<endl; cout<<"AddressOfEntryPoint "<<iOH.AddressOfEntryPoint<<endl; cout<<"BaseOfCode "<<iOH.BaseOfCode<<endl; cout<<"BaseOfData "<<iOH.BaseOfData<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_INTENSITY|FOREGROUND_GREEN); cout<<"// NT additional fields."<<endl; SetConsoleTextAttribute(hStd,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<<"ImageBase "<<iOH.ImageBase<<endl; cout<<"SectionAlignment "<<iOH.SectionAlignment<<endl; cout<<"FileAlignment "<<iOH.FileAlignment<<endl; cout<<"Major.Minor(OS Version) "<<iOH.MajorOperatingSystemVersion<<"."<< iOH.MinorOperatingSystemVersion<<endl; cout<<"Major.Minor(ImageVersion) "<<iOH.MajorImageVersion<<"."<<iOH.MinorImageVersion<<endl; cout<<"Major.Minor(SubsystemVersion) "<<iOH.MajorSubsystemVersion<<"."<< iOH.MinorSubsystemVersion<<endl; cout<<"Win32VersionValue "<<iOH.Win32VersionValue<<endl; cout<<"SizeOfImage "<<iOH.SizeOfImage<<endl; cout<<"SizeOfHeaders "<<iOH.SizeOfHeaders<<endl; cout<<"CheckSum "<<iOH.CheckSum<<endl; cout<<"Subsystem "<<iOH.Subsystem<<endl; cout<<"DllCharacteristics "<<iOH.DllCharacteristics<<endl; cout<<"SizeOfStackReserve "<<iOH.SizeOfStackReserve<<endl; cout<<"SizeOfStackCommit "<<iOH.SizeOfStackCommit<<endl; cout<<"SizeOfHeapReserve "<<iOH.SizeOfHeapReserve<<endl; cout<<"SizeOfHeapCommit "<<iOH.SizeOfHeapCommit<<endl; cout<<"LoaderFlags "<<iOH.LoaderFlags<<endl; cout<<"NumberOfRvaAndSizes "<<iOH.NumberOfRvaAndSizes<<endl; //_IMAGE_DATA_DIRECTORY for(int i=0;i<=14;i++){ SetConsoleTextAttribute(hStd,FOREGROUND_INTENSITY|FOREGROUND_GREEN); if(i==0){cout<<"[IMAGE_DIRECTORY_ENTRY_EXPORT] ";} if(i==1){cout<<"[IMAGE_DIRECTORY_ENTRY_IMPORT] ";} if(i==2){cout<<"[IMAGE_DIRECTORY_ENTRY_RESOURCE] ";} if(i==3){cout<<"[IMAGE_DIRECTORY_ENTRY_EXCEPTION] ";} if(i==4){cout<<"[IMAGE_DIRECTORY_ENTRY_SECURITY] ";} if(i==5){cout<<"[IMAGE_DIRECTORY_ENTRY_BASERELOC] ";} if(i==6){cout<<"[IMAGE_DIRECTORY_ENTRY_DEBUG] ";} if(i==7){cout<<"[IMAGE_DIRECTORY_ENTRY_ARCHITECTURE] ";} if(i==8){cout<<"[IMAGE_DIRECTORY_ENTRY_GLOBALPTR] ";} if(i==9){cout<<"[IMAGE_DIRECTORY_ENTRY_TLS] ";} if(i==10){cout<<"[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG] ";} if(i==11){cout<<"[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT] ";} if(i==12){cout<<"[IMAGE_DIRECTORY_ENTRY_IAT] ";} if(i==13){cout<<"[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT] ";} if(i==14){cout<<"[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR]";} SetConsoleTextAttribute(hStd,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<<"[VirtualAddress|Size] "<<"["<<iOH.DataDirectory[i].VirtualAddress<<"|"<< iOH.DataDirectory[i].Size<<"]"<<endl;} }else{cout<<"Error load module..."<<endl;} FreeLibrary(hMod);
cout<<"\nPress any key to continue"<<endl; while (!getch()); return 0; } |