Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<windows.h>
- int main(int argc, char* argv[]) {
- DWORD bytesRead = NULL;
- HANDLE hFile = CreateFileA(argv[1], GENERIC_ALL, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- DWORD fileSize = GetFileSize(hFile, NULL);
- LPVOID lpFile = HeapAlloc(GetProcessHeap(), 0, fileSize);
- ReadFile(hFile, lpFile, fileSize, &bytesRead, NULL);
- printf("\n\n[*] PE PATH : \"%s\" \n",argv[1]);
- printf("\n ----------------------------------------------------------\n");
- printf("| DOS HEADER |\n");
- printf(" ----------------------------------------------------------\n");
- IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)lpFile;
- printf("e_magic:\t%x\t\tSIZE : WORD\n", dosHeader->e_magic);
- printf("e_cblp:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_cblp);
- printf("e_cp:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_cp);
- printf("e_crlc:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_crlc);
- printf("e_minalloc:\t%x\t\tSIZE : WORD\n", dosHeader->e_minalloc);
- printf("e_maxalloc:\t%x\t\tSIZE : WORD\n", dosHeader->e_maxalloc);
- printf("e_ss:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_ss);
- printf("e_sp:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_sp);
- printf("e_csum:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_csum);
- printf("e_ip:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_ip);
- printf("e_cs:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_cs);
- printf("e_lfarlc:\t%x\t\tSIZE : WORD\n", dosHeader->e_lfarlc);
- printf("e_ovno:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_ovno);
- printf("e_res1: \t%x\t\tSIZE : WORD\n", dosHeader->e_res[0]);
- printf(" \t%x\t\tSIZE : WORD\n", dosHeader->e_res[1]);
- printf(" \t%x\t\tSIZE : WORD\n", dosHeader->e_res[2]);
- printf(" \t%x\t\tSIZE : WORD\n", dosHeader->e_res[3]);
- printf("e_oemid:\t%x\t\tSIZE : WORD\n", dosHeader->e_oemid);
- printf("e_oeminfo:\t%x\t\tSIZE : WORD\n", dosHeader->e_oeminfo);
- printf("e_res2:\t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[0]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[1]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[2]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[3]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[4]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[5]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[6]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[7]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[8]);
- printf(" \t\t%x\t\tSIZE : WORD\n", dosHeader->e_res2[9]);
- printf("e_lfanew:\t%x\t\tSIZE : LONG\n", dosHeader->e_lfanew);
- IMAGE_NT_HEADERS* ntHeaders = (IMAGE_NT_HEADERS*)((DWORD_PTR)lpFile + (DWORD)dosHeader->e_lfanew);
- printf("\n ----------------------------------------------------------\n");
- printf("| NT HEADER |\n");
- printf(" ----------------------------------------------------------\n");
- printf("Signature:\t%x\t\t\tSIZE : DWORD\n", ntHeaders->Signature);
- printf("FileHeader:\n");
- printf("\tMachine:\t\t%x\t\tSIZE: WORD\n", ntHeaders->FileHeader.Machine);
- printf("\tNumberOfSections:\t%d\t\tSIZE: WORD\n", ntHeaders->FileHeader.NumberOfSections);
- printf("\tTimeDateStamp:\t\t%x\tSIZE: DWORD\n", ntHeaders->FileHeader.TimeDateStamp);
- printf("\tPointerToSymbolTable:\t%x\t\tSIZE: DWORD\n", ntHeaders->FileHeader.PointerToSymbolTable);
- printf("\tNumberOfSymbols:\t%x\t\tSIZE: DWORD\n", ntHeaders->FileHeader.NumberOfSymbols);
- printf("\tSizeOfOptionalHeader:\t%x\t\tSIZE: WORD\n", ntHeaders->FileHeader.SizeOfOptionalHeader);
- printf("\tCharacteristics:\t%x\t\tSIZE: WORD\n", ntHeaders->FileHeader.Characteristics);
- IMAGE_OPTIONAL_HEADER* imgOptHeader = &ntHeaders->OptionalHeader;
- printf("OptionalHeader:\n");
- printf("\tMagic:\t\t\t%x\t\tSIZE: WORD\n", imgOptHeader->Magic);
- printf("\tMajorLinkerVersion:\t%x\t\tSIZE: BYTE\n", imgOptHeader->MajorLinkerVersion);
- printf("\tMinorLinkerVersion:\t%x\t\tSIZE: BYTE\n", imgOptHeader->MinorLinkerVersion);
- printf("\tSizeOfCode:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfCode);
- printf("\tSizeOfInitializedData:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfInitializedData);
- printf("\tSizeOfUninitializedData:%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfUninitializedData);
- printf("\tAddressOfEntryPoint:\t%x\t\tSIZE: DWORD\n", imgOptHeader->AddressOfEntryPoint);
- printf("\tBaseOfCode:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->BaseOfCode);
- printf("\tImageBase:\t\t%x\tSIZE: DWORD\n", imgOptHeader->ImageBase);
- printf("\tSectionAlignment:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SectionAlignment);
- printf("\tFileAlignment:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->FileAlignment);
- printf("\tMajorOperatingSystemVersion:\t%x\tSIZE: WORD\n", imgOptHeader->MajorOperatingSystemVersion);
- printf("\tMinorOperatingSystemVersion:\t%x\tSIZE: WORD\n", imgOptHeader->MinorOperatingSystemVersion);
- printf("\tMajorImageVersion:\t%x\t\tSIZE: WORD\n", imgOptHeader->MajorImageVersion);
- printf("\tMinorImageVersion:\t%x\t\tSIZE: WORD\n", imgOptHeader->MinorImageVersion);
- printf("\tMajorSubsystemVersion:\t%x\t\tSIZE: WORD\n", imgOptHeader->MajorSubsystemVersion);
- printf("\tMinorSubsystemVersion:\t%x\t\tSIZE: WORD\n", imgOptHeader->MinorSubsystemVersion);
- printf("\tWin32VersionValue:\t%x\t\tSIZE: DWORD\n", imgOptHeader->Win32VersionValue);
- printf("\tSizeOfImage:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfImage);
- printf("\tSizeOfHeaders:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfHeaders);
- printf("\tCheckSum:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->CheckSum);
- printf("\tSubsystem:\t\t%x\t\tSIZE: WORD\n", imgOptHeader->Subsystem);
- printf("\tDllCharacteristics:\t%x\t\tSIZE: WORD\n", imgOptHeader->DllCharacteristics);
- printf("\tSizeOfStackReserve:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfStackReserve);
- printf("\tSizeOfStackCommit:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfStackCommit);
- printf("\tSizeOfHeapReserve:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfHeapReserve);
- printf("\tSizeOfHeapCommit:\t%x\t\tSIZE: DWORD\n", imgOptHeader->SizeOfHeapCommit);
- printf("\tLoaderFlags:\t\t%x\t\tSIZE: DWORD\n", imgOptHeader->LoaderFlags);
- printf("\tNumberOfRvaAndSizes:\t%x\t\tSIZE: DWORD\n", imgOptHeader->NumberOfRvaAndSizes);
- IMAGE_SECTION_HEADER* sectionHeader = IMAGE_FIRST_SECTION(ntHeaders);
- printf("\n --------------------------------------------------------------\n");
- printf("| SECTION HEADER |\n");
- printf(" --------------------------------------------------------------\n\n");
- printf("Name\t\tVirtualAddress\tRawSize\t\tRawAddress\tRelocAddress\tLinenumbers\tRelocationsNumbers\tLinenumbersNumbers\tCharacteristics\n\n");
- for (int i = 0; i < ntHeaders->FileHeader.NumberOfSections; i++) {
- printf("%s\t\t%x\t\t%x\t\t%x\t\t%x\t\t%x\t\t%x\t\t\t%x\t\t\t%x\n", sectionHeader->Name, sectionHeader->VirtualAddress,sectionHeader->SizeOfRawData,sectionHeader->PointerToRawData,sectionHeader->PointerToRelocations,sectionHeader->PointerToLinenumbers,sectionHeader->NumberOfRelocations,sectionHeader->NumberOfLinenumbers,sectionHeader->Characteristics);
- sectionHeader++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment