將任何.exe加載到我的命令行程序中。我得到這個輸出: http://www.privatepaste.com/22dc18e88d/outputExe導入dll序號到DLL導出函數名稱的比較?
正如你可以從輸出中看到的。我得到21個導入的dll。
它導入wsock32.dll,因爲我繼續解析pe文件格式的命令行參數.exe中的信息。我看到:
wsock32.dll導入都是序號。由80000000標誌看出。將所有這些消除,你會得到:
[Import_By_Ordinal]: 00000016
[Import_By_Ordinal]: 00000003
[Import_By_Ordinal]: 00000073
[Import_By_Ordinal]: 00000017
[Import_By_Ordinal]: 00000015
[Import_By_Ordinal]: 0000000B
[Import_By_Ordinal]: 00000014
[Import_By_Ordinal]: 0000000E
[Import_By_Ordinal]: 0000000A
[Import_By_Ordinal]: 00000034
[Import_By_Ordinal]: 00000011
[Import_By_Ordinal]: 00000013
[Import_By_Ordinal]: 00000010
[Import_By_Ordinal]: 00000009
[Import_By_Ordinal]: 00000002
[Import_By_Ordinal]: 00000008
[Import_By_Ordinal]: 0000006F
[Import_By_Ordinal]: 00000097
[Import_By_Ordinal]: 00000012
[Import_By_Ordinal]: 00000004
[Import_By_Ordinal]: 0000000F
[Import_By_Ordinal]: 0000000C
現在通過解析EXE的pe文件格式來看到這些信息。顯然,我們將無法獲得這些功能的名稱。
如果我想看看00000016序我將不得不使用DUMPBIN或CFF Explorer,然後加載的wsock32.dll,並期待在其出口找出函數與00000016.
我不不想這樣做。我想要一個c或C++的方法來獲取00000016,並以某種方式打開wsock32.dll並將其導出表與我從exe中獲得的序號進行比較。
目前,這是我應得的序:
// Start Iterating Tables
nFunctions = 0 ;
nOrdinalFunctions = 0 ;
while((*thunkINT).u1.AddressOfData != 0) /* AddressOfData holds RVA
to INT with the imported API name */
{
/* Each IMAGE_THUNK_DATA structures are indicated by zero values when
you reach the end */
// If the high bit isn't set, the IMAGE_THUNK_ DATA value is an RVA to the IMAGE_IMPORT_BY_NAME.
if(!(thunkINT->u1.AddressOfData & IMAGE_ORDINAL_FLAG))
{
nameData = (PIMAGE_IMPORT_BY_NAME)((*thunkINT).u1.AddressOfData);
nameData = (PIMAGE_IMPORT_BY_NAME)rvaToPtr((DWORD)nameData,
peHeader,
(DWORD)baseAddress);
printf("\t%s", (*nameData).Name);
printf("\n");
}
// Check OriginalFirstThunk ordinal and see if flag is set
// if flag is set, function is called by ordinal number. (import by ordinal)
if(((*thunkINT).u1.Ordinal & IMAGE_ORDINAL_FLAG))
{
printf(" [Import_By_Ordinal]:\t");
printf("\taddress: %08X", thunkINT->u1.Ordinal);
printf("\n");
nOrdinalFunctions++ ;
}
thunkINT++;
thunkIAT++;
nFunctions++;
} // End of while loop
因此,林想知道,在分析EXE進口...有沒有辦法來匹配IMPORT序數,對DLL出口ORDINAL?並找到正式的功能名稱?
我想要一個c或C++的方式來做到這一點。
謝謝,如果有人在那裏與我正在尋找的知識。由於這些東西非常複雜,我試圖做的事情並沒有被很多人所知。
我希望有人能幫助...
謝謝...
所以你需要做的是找到一個函數的名稱給它的序號。不是很難。取決於,dumpbin等全部管理它。由於PE格式被廣泛記錄,因此不知道你爲什麼標記了這種逆向工程。 –