2012-05-10 2 views
0

다음 코드를 사용하여 가져온 PE 파일 가져 오기 DLL을 나열하려고했지만 작동하지 않았으며 실행시 exe가 작동을 멈췄다 고합니다. 코드에서, 나는 단순히 주어진 exe 파일을 CreateFileMapping 함수를 사용하여 메모리에 매핑 한 다음 Win32 API에 주어진 적절한 구조를 사용하여 각 섹션을 탐색합니다. 어떻게 해결할 수 있습니까?불러 온 PE 파일 가져 오기 DLL

#include <stdio.h> 
#include <windows.h> 

//add Pointer Values 
#define MakePtr(cast, ptr, addValue) (cast)((unsigned long)(ptr)+(unsigned long)(addValue)) 


int main(int argc , char ** argv) //main method 
{ 
HANDLE hMapObject, hFile;//File Mapping Object 
LPVOID lpBase;//Pointer to the base memory of mapped 

PIMAGE_DOS_HEADER dosHeader;//Pointer to DOS Header 
PIMAGE_NT_HEADERS ntHeader;//Pointer to NT Header 
PIMAGE_IMPORT_DESCRIPTOR importDesc;//Pointer to import descriptor 

hFile = CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//Open the Exe File 
if(hFile == INVALID_HANDLE_VALUE){ 
     printf("\nERROR : Could not open the file specified\n"); 
} 
hMapObject = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); 
lpBase = MapViewOfFile(hMapObject,FILE_MAP_READ,0,0,0);//Mapping Given EXE file to Memory 

dosHeader = (PIMAGE_DOS_HEADER)lpBase;//Get the DOS Header Base 
//verify dos header 
if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) 
{ 

    ntHeader = MakePtr(PIMAGE_NT_HEADERS, dosHeader, dosHeader->e_lfanew);//Get the NT Header 
      //verify NT header 
    if (ntHeader->Signature == IMAGE_NT_SIGNATURE){ 
     importDesc = MakePtr(PIMAGE_IMPORT_DESCRIPTOR, dosHeader,ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); 

     while (importDesc->Name) 
     { 
      printf("%s\n",MakePtr(char*, dosHeader,importDesc->Name)); 
      importDesc++;    
     } 

    } 
} 

getchar(); 

} 
+0

이렇게하는 것이 어려운 방법입니다. MS는이를 위해 dbghelp DLL을 제공합니다. –

답변

3

찾고있는 목록의 내용은 섹션에 포함되어 있습니다 (PE 이미지의 거의 모든 것과 같습니다). 디렉토리가 가리키는 섹션에 액세스해야합니다. 어떻게 작동하는지 보려면 Matt Pietrek (PeDump)의 코드를 살펴보십시오.

+0

Matt의 코드는 오래되었지만 일부 PE 이미지를 처리 ​​할 준비가되지 않았지만 실제로 PeStudio를 만드는 데 도움이되었습니다. – mox

+0

downvoting의 이유와 실수를 시정하는 제안을하십시오! 감사. – mox

+1

필자는 지금 내 자신의 파서를 작성하고 있으며, PE 형식은 다소 혼란 스럽다. 내가 추출한 핵심 가치를 검증하기 위해 PeStudio를 사용하고 있습니다! 그것을 만들어 주셔서 감사합니다! – Dio

관련 문제