静态检测损坏的导入段 (IAT)

逆向工程 艾达 聚乙烯 我在
2021-06-28 12:55:55

我正在编写一个工具,它分析 PE-Malformations,我想构建一个函数来检测 PE 文件中被破坏的导入部分。如果能够以某种方式从 PE 的可选标头中找出它,那就太好了。

如果我使用 IDA Pro 打开 PE,我会收到以下通知:

但我对它的幕后工作方式很感兴趣。IDA Pro 是不是说 Imports 被销毁只是因为有一些进口?或者它是否试图找到一些功能并且无法做到这一点?

如果这是一个简单的问题,我很抱歉,但我找不到相关的详细信息。有很多关于如何从转储文件重建/修复导入地址表的信息,但没有如何自己实际检测它。提前致谢!

-------小补-------------

我想通过在PEView Tool 中查看 PE 来展示一个导入部分损坏的示例

下面你会看到一个 PE,它声称它在 RVA 0xA21C 有导入表。

但是这个文件以 RVA 0x5BF0 结尾。

由于 0xA21C > 0x5BF0 我们可以断定这个 PE 中的导入被损坏了,因为 0xA21C 是一个无效的指针,对吧?

还有其他方法可以识别损坏的导入部分吗?

2个回答

你需要熟悉PE导入表

简而言之(我不会提到按序导入)

IMAGE_IMPORT_DESCRIPTOR.FirstThunk points to IMAGE_IMPORT_BY_NAME table. 

IMAGE_IMPORT_DESCRIPTOR.FirstThunk --------------------------
                                                            |
                                                            |
IMAGE_IMPORT_BY_NAME <---------------------------------------
IMAGE_IMPORT_BY_NAME
IMAGE_IMPORT_BY_NAME
IMAGE_IMPORT_BY_NAME

当您解析表并且它的指针 (RVA) 未解析为有效IMAGE_IMPORT_BY_NAME结构时,您可以假设导入表已损坏。

但我对它的幕后工作方式很感兴趣。

如果包含导入表的 PE 部分不包含重定位并且导入表的部分的名称不是以下之一,IDA 会显示该消息:.idata, .rdata, .text