2017-06-08 23 views

答えて

-1

IMAGE_NT_HEADERSの助けを借りて、任意の実行ファイルのポイントのエントリにアクセスできます。エントリ・ポイントのアドレスにアクセスするAddressOfEntryPointメンバ変数を持つ構造IMAGE_OPTIONAL_HEADER上記から

typedef struct _IMAGE_NT_HEADERS { 
    DWORD     Signature; 
    IMAGE_FILE_HEADER  FileHeader; 
    IMAGE_OPTIONAL_HEADER OptionalHeader; 
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; 

。小さなコードに続いて

は、より多くのお手伝いを致します。

FILE *executable; 
executable= fopen("YourExe.exe","rb"); 

IMAGE_NT_HEADERS executableInformation; 
fread(&executableInformation,sizeof(executableInformation),1,executable); 

注:コードがテストされていないと誤差がある場合がございます。

+2

エラーがある場合は、スタブをスキップする必要があります。 –

+0

@サントスダナウォード:ありがとう。それは間違いなく私を助けるだろう。 – Sultan23

+0

@HansPassantすべきこと.. –

0

エントリポイントのアドレスを検索したり、さまざまなヘッダーパラメータを読み取るには、以下の方法を見つけてください。

LPCSTR fileName; //exe file to parse 
HANDLE hFile; 
HANDLE hFileMapping; 
LPVOID lpFileBase; 
PIMAGE_DOS_HEADER dosHeader; 
PIMAGE_NT_HEADERS peHeader; 

hFile = CreateFileA(fileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); 

if(hFile==INVALID_HANDLE_VALUE) 
{ 
    printf("\n CreateFile failed in read mode \n"); 
    return 1; 
} 

hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL); 

if(hFileMapping==0) 
{ 
    printf("\n CreateFileMapping failed \n"); 
    CloseHandle(hFile); 
    return 1; 
} 

lpFileBase = MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0); 

if(lpFileBase==0) 
{ 
    printf("\n MapViewOfFile failed \n"); 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile); 
    return 1; 
} 

dosHeader = (PIMAGE_DOS_HEADER) lpFileBase; //pointer to dos headers 

if(dosHeader->e_magic==IMAGE_DOS_SIGNATURE) 
{ 
    //if it is executable file print different fileds of structure 
    //dosHeader->e_lfanew : RVA for PE Header 
    printf("\n DOS Signature (MZ) Matched"); 

    //pointer to PE/NT header 
    peHeader = (PIMAGE_NT_HEADERS) ((u_char*)dosHeader+dosHeader->e_lfanew); 

    if(peHeader->Signature==IMAGE_NT_SIGNATURE) 
    { 
     printf("\n PE Signature (PE) Matched \n"); 

     //address of entry point 
     //peHeader->OptionalHeader.AddressOfEntryPoint 

    } 
    UnmapViewOfFile(lpFileBase); 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile); 
    return 0; 
} 
else 
{ 
    printf("\n DOS Signature (MZ) Not Matched \n"); 
    UnmapViewOfFile(lpFileBase); 
    CloseHandle(hFileMapping); 
    CloseHandle(hFile); 
    return 1; 
} 
関連する問題