什么是 PE 部分肯定包含特定类型内容的指示符?

逆向工程 视窗 聚乙烯 文件格式 可执行
2021-07-03 03:14:38

我最近在处理有关 PE 和 COFF 规范Microsoft 文档

第 5 章显示了几个或多或少的“软”指标和特征,以识别一个部分包含什么样的内容。然而,对于几个不同的部分,部分特征标志通常是相同的,正如我所读到的,部分名称可以是任意值,所以它也没有太大帮助。

实际上,我只能通过查看是否IMAGE_SCN_MEM_EXECUTE设置标志来确定代码部分,因为其他部分不应该设置此标志。

但是,例如,我如何识别资源目录?它只有IMAGE_SCN_CNT_INITIALIZED_DATAIMAGE_SCN_MEM_READ设置,并且许多其他部分具有相同的标志。

我是否必须使用一些虚构的和典型的部分名称(RSRC.rsrc对于此示例)进行评估这意味着我可能会被自定义部分名称欺骗。我什至必须对截面数据进行试错分析才能获得更明确的截面包含的结果吗?

或者在我跳过的 PE 标头中的某处是否有一个标志,在这种情况下帮助我?

1个回答

我只能通过查看是否IMAGE_SCN_MEM_EXECUTE设置标志来确定代码部分 ,因为其他部分不应该设置此标志。

此标志的存在并不“绝对”意味着该部分包含代码,并且不存在此标志并不“绝对”意味着该部分不包含代码:

  • PE 文件可以在非代码(数据)部分具有该标志并且仍然可以正常运行(尽管从安全角度来看这是不可取的)。
  • 假设操作系统没有启用DEP和/或其他代码在运行时更改该部分的内存保护以使其可执行,则 PE 文件可能会在实际代码部分中缺少该标志

但是,例如,我如何识别资源目录?

找到资源目录的唯一可靠方法是通过IMAGE_DIRECTORY_ENTRY_RESOURCEPE 文件的IMAGE_DATA_DIRECTORY.