作为 RE 概念的新手,我想尝试看看我知道导出一些函数的一个 DLL 中的汇编代码。
首先,我使用这个工具 - http://www.nirsoft.net/utils/dll_export_viewer.html - 获取所述 DLL 中的导出列表。这些是一些功能:
GI_Call 0x100590a7 0x000590a7 2 (0x2) mydll.dll I:\test\mydll.dll Exported Function
GI_CleanReturnStack 0x10058eae 0x00058eae 3 (0x3) mydll.dll I:\test\mydll.dll Exported Function
GI_Cmd_Argc 0x10058bd4 0x00058bd4 4 (0x4) mydll.dll I:\test\mydll.dll Exported Function
GI_Cmd_Argc_sv 0x10059593 0x00059593 5 (0x5) mydll.dll I:\test\mydll.dll Exported Function
然而,当我在 OllyDbg 中加载 DLL 并浏览到这些地址中的任何一个时,我得到的指令并不像函数的开头,例如 GI_Call:
100590A7 10E9 ADC CL,CH
100590A9 CE INTO
100590AA FC CLD
100590AB FFFF ??? ; Unknown command
100590AD FF75 10 PUSH DWORD PTR SS:[EBP+10]
100590B0 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
100590B3 50 PUSH EAX
100590B4 57 PUSH EDI
更令人费解的是,一旦我向上/向下滚动,代码实际上发生了变化——没有
100590A7 10E9 ADC CL,CH
再一次,它变成了一个完全不同的指令,那个地址也不见了。
难道我做错了什么?或者DLL可能被加密了?尽管如果是这样,DLL 导出查看器怎么能如此轻松地转储导出呢?