1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| #include<iostream> #include<Windows.h>
using namespace std;
void PrintDosHeader(const IMAGE_DOS_HEADER* dosHeader) { printf("e_magic: 0x%X\n", dosHeader->e_magic); printf("e_cblp: %x\n", dosHeader->e_cblp); printf("e_cp: %x\n", dosHeader->e_cp); printf("e_crlc: %x\n", dosHeader->e_crlc); printf("e_cparhdr: %x\n", dosHeader->e_cparhdr); printf("e_minalloc: %x\n", dosHeader->e_minalloc); printf("e_maxalloc: %x\n", dosHeader->e_maxalloc); printf("e_ss: 0x%X\n", dosHeader->e_ss); printf("e_sp: 0x%X\n", dosHeader->e_sp); printf("e_csum: 0x%X\n", dosHeader->e_csum); printf("e_ip: 0x%X\n", dosHeader->e_ip); printf("e_cs: 0x%X\n", dosHeader->e_cs); printf("e_lfarlc: 0x%X\n", dosHeader->e_lfarlc); printf("e_ovno: 0x%X\n", dosHeader->e_ovno); printf("e_res[4]: {%x, %x, %x, %x}\n", dosHeader->e_res[0], dosHeader->e_res[1], dosHeader->e_res[2], dosHeader->e_res[3]); printf("e_oemid: 0x%X\n", dosHeader->e_oemid); printf("e_oeminfo: 0x%X\n", dosHeader->e_oeminfo); printf("e_res2[10]: {...}%x:\n",dosHeader->e_res2[0]); printf("e_lfanew: 0x%X\n", dosHeader->e_lfanew); }
void PrintfFileHeader(const PIMAGE_FILE_HEADER FileHeader) { printf("FILE_HEADER:\n"); printf("Machine: 0x%X\n", FileHeader->Machine); printf("NumberOfSections: %x\n", FileHeader->NumberOfSections); printf("TimeDateStamp: 0x%X\n", FileHeader->TimeDateStamp); printf("PointerToSymbolTable: 0x%X\n", FileHeader->PointerToSymbolTable); printf("NumberOfSymbols: %d\n", FileHeader->NumberOfSymbols); printf("SizeOfOptionalHeader: %x\n", FileHeader->SizeOfOptionalHeader); printf("Characteristics: 0x%X\n", FileHeader->Characteristics); }
void PrintfOptionHeader(const PIMAGE_OPTIONAL_HEADER OptionalHeader) { printf("OPTIONAL_HEADER:\n"); printf("Magic: %X\n", OptionalHeader->Magic); printf("MajorLinkerVersion: %d\n", OptionalHeader->MajorLinkerVersion); printf("MinorLinkerVersion: %d\n", OptionalHeader->MinorLinkerVersion); printf("SizeOfCode: %X\n", OptionalHeader->SizeOfCode); printf("SizeOfInitializedData: %X\n", OptionalHeader->SizeOfInitializedData); printf("SizeOfUninitializedData: %X\n", OptionalHeader->SizeOfUninitializedData); printf("AddressOfEntryPoint: %X\n", OptionalHeader->AddressOfEntryPoint); printf("BaseOfCode: %X\n", OptionalHeader->BaseOfCode); printf("ImageBase: %X\n", OptionalHeader->ImageBase); printf("SectionAlignment: %X\n", OptionalHeader->SectionAlignment); printf("FileAlignment: %X\n", OptionalHeader->FileAlignment); printf("MajorOperatingSystemVersion: %d\n", OptionalHeader->MajorOperatingSystemVersion); printf("MinorOperatingSystemVersion: %d\n", OptionalHeader->MinorOperatingSystemVersion); printf("MajorImageVersion: %d\n", OptionalHeader->MajorImageVersion); printf("MinorImageVersion: %d\n", OptionalHeader->MinorImageVersion); printf("MajorSubsystemVersion: %d\n", OptionalHeader->MajorSubsystemVersion); printf("MinorSubsystemVersion: %d\n", OptionalHeader->MinorSubsystemVersion); printf("Win32VersionValue: %X\n", OptionalHeader->Win32VersionValue); printf("SizeOfImage: %X\n", OptionalHeader->SizeOfImage); printf("SizeOfHeaders: %X\n", OptionalHeader->SizeOfHeaders); printf("CheckSum: %X\n", OptionalHeader->CheckSum); printf("Subsystem: %X\n", OptionalHeader->Subsystem); printf("DllCharacteristics: %x\n", OptionalHeader->DllCharacteristics); printf("SizeOfStackReserve: %x\n", OptionalHeader->SizeOfStackReserve); printf("SizeOfStackCommit: %X\n", OptionalHeader->SizeOfStackCommit); printf("SizeOfHeapReserve: %X\n", OptionalHeader->SizeOfHeapReserve); printf("SizeOfHeapCommit: %X\n", OptionalHeader->SizeOfHeapCommit); printf("LoaderFlags: %X\n", OptionalHeader->LoaderFlags); printf("NumberOfRvaAndSizes: %d\n", OptionalHeader->NumberOfRvaAndSizes); }
int main(int argc, char* argv[]) { FILE* p_file; errno_t fopen_result = fopen_s(&p_file, "D:\\source\\repos\\PE_Tools\\Release\\PE_Tools.exe", "rb"); if (fopen_result || p_file == nullptr) { return ERROR; }
fseek(p_file, 0, SEEK_END); long fileSize = ftell(p_file); fseek(p_file, 0, SEEK_SET);
DWORD* fileBuffer = (DWORD*)malloc(fileSize); if (fileBuffer == NULL) { return ERROR; } memset(fileBuffer, 0, fileSize); size_t fread_result = fread_s(fileBuffer, fileSize, 1, fileSize, p_file); printf("******************DOS-HEADERS******************\n"); PIMAGE_DOS_HEADER dos_headers = (PIMAGE_DOS_HEADER)fileBuffer; PrintDosHeader(dos_headers);
printf("******************FILE-HEADERS******************\n");
PIMAGE_NT_HEADERS nt_headers = (PIMAGE_NT_HEADERS)(DWORD*)((BYTE*)fileBuffer + dos_headers->e_lfanew); PIMAGE_FILE_HEADER file_headers = (PIMAGE_FILE_HEADER)(DWORD*)((BYTE*)fileBuffer + dos_headers->e_lfanew + sizeof(DWORD)); PrintfFileHeader(file_headers);
printf("******************OPTION-HEADERS******************\n");
PIMAGE_OPTIONAL_HEADER option_headers_two = (PIMAGE_OPTIONAL_HEADER)&nt_headers->OptionalHeader; PrintfOptionHeader(option_headers_two);
return 0; }
|