使用CFF explorer和msdn doc解析PE文件以查找导出表地址

问题描述 投票:0回答:2

我处理一个 PE 文件,并尝试在 IDA 中解释这一行:

v4 = *(_DWORD *)((char *)库A + *((_DWORD *)库A + 15) + 120);

LibraryA是PE文件的基址

*((_DWORD *)LibraryA + 15) 相当于 *(LibraryA + 60) = *(LibraryA + 0x3C) = *(LibraryA + e_lfanew) = 0x100 = PE 偏移量

因此 *((_DWORD *)LibraryA + 15) + 120 点根据 CFF Explorer 导出目录

当我使用 CFF explorer > Nt header > 可选 header > 数据目录 > 导出表地址 = 0x178 = 0x100(PE 偏移量)+ 0x78(导出表地址)

但是当我使用msdn文档时https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#optical-header-data-directories-image-only 我看到导出表的 PE 偏移量是 96 (0x60),而不是 CFF Explorer 中找到的值:120 (0x78)

当我使用 msdn 文档时,我认为我错了,但我不知道在哪里?

c parsing msdn portable-executable malware
2个回答
1
投票

(感谢Kz2023的建议;我不知道这个网站,godbolt.org。)

我的问题的答案非常简单:在msdn中,导出表地址给出的偏移量与OptionalHeader相关,而在代码中,偏移量与PE COFF header相关

提醒:PE COFF 标头的大小是 0x18 字节,这是我注意到 msdn 的 96 字节(0x60)和代码中的 120 字节(0x78)之间的差异


0
投票

我在查找调试目录时出错了(有关更多信息,请参阅读取调试目录时奇怪的条目类型 4194304),这将适用于另一个目录条目,例如导入目录、导出目录等。

这是数据目录条目的偏移量,而不是节条目的偏移量。要获取导出部分的内容,请使用该问题中的答案。

© www.soinside.com 2019 - 2024. All rights reserved.