使用序数解析 DLL 函数名称

逆向工程 视窗 聚乙烯 静态分析 Python
2021-07-02 00:01:06

我想弄清楚如何使用 PEfile python 项目(https://github.com/erocarrera/pefile获取 PE 的导入

该库的特别之处ordlookup文件夹。看起来它正在将序数映射到已知 dll 的特定函数名称。

我在我拥有的 .exe 上运行 PEfile 并进入了导入:

"wsock32.dll": {
    "listen": "0x44a560",
    "accept": "0x44a564",
    "htons": "0x44a568",
    "getsockname": "0x44a56c",
    "gethostbyname": "0x44a570",
    "gethostname": "0x44a574",
    "ntohl": "0x44a578",
    "inet_addr": "0x44a57c",
    "ntohs": "0x44a580",
    "ioctlsocket": "0x44a584",
    "recv": "0x44a588",
    "send": "0x44a58c",
    "recvfrom": "0x44a590",
    "sendto": "0x44a594",
    "select": "0x44a598",
    "connect": "0x44a59c",
    "WSACleanup": "0x44a5a0",
    "WSAStartup": "0x44a5a4",
    "inet_ntoa": "0x44a5a8",
    "bind": "0x44a5ac",
    "getpeername": "0x44a5b0",
    "setsockopt": "0x44a5b4",
    "socket": "0x44a5b8",
    "WSAGetLastError": "0x44a5bc",
    "closesocket": "0x44a5c0"
  },

然后我删除了允许 ordlookup 模块工作重新运行的 PEfile 的行:

"wsock32.dll": {
    "null": "0x44a5c0"
},

为什么我得到两个不同的答案?什么是序数/序数有什么作用?

1个回答

您可以通过以下方式获取 DLL:

for entry in pe.DIRECTORY_ENTRY_IMPORT:
    if entry.dll != None:
        print(entry.dll.decode())

简单地说,序数是给定 DLL 中函数的位置。但是对于给定的函数,并非每个序数都是相同的。根据操作系统版本,甚至系统的架构(32 位 / 64 位),函数 Sleep sor example 具有不同的序号。研究并检查您可以通过序数安全地获得哪些功能。我不是大专家,但我希望这会有所帮助。