最近,我正在使用有关PE和COFF规范的Microsoft文档。

第5章展示了一些或多或少的“软”指示器和特性,以识别节包含的内容。但是,对于几个不同的节,节特征标志通常是相同的,而且正如我所阅读的,节名称可以是任意值,因此它也不是什么大帮助。只能通过查看是否设置了IMAGE_SCN_MEM_EXECUTE标志来肯定地识别代码段,因为其他部分不应设置该标志。

但是,例如,我怎么能识别资源目录?它仅设置了IMAGE_SCN_CNT_INITIALIZED_DATAIMAGE_SCN_MEM_READ,并且其他许多部分具有相同的标志。这意味着我可能会被自定义部分的名称欺骗。我是否还需要对节数据进行试错分析才能更清楚地了解节中包含的内容?在这种情况下?

#1 楼


我只能通过查看是否设置了
IMAGE_SCN_MEM_EXECUTE标志来肯定地识别代码段,因为其他段不应该设置
该标志。此标志的存在并不“绝对”意味着该部分包含代码,而该标志的缺失并不“绝对”意味着该部分不包含代码:


PE文件可以在非代码(数据)部分上具有该标志,并且仍然可以正常运行(尽管从安全角度考虑,这是不可取的)。部分,假设操作系统未启用DEP和/或其他代码在运行时更改了该部分的内存保护以使其可执行。


但是,例如,我怎么可能,识别资源目录吗?


查找资源目录的唯一可靠方法是通过PE文件IMAGE_DIRECTORY_ENTRY_RESOURCE中的IMAGE_DATA_DIRECTORY条目。

评论


是的,被“错误”或故意设置错误的标志误导也会欺骗我,但至少我可以说我依靠特征标志。我看到也有用于导入和导出表的数据目录。这可以帮助我进一步分析这些部分的内容。如果结果仍然错误,我将不分析该部分。

–雷
2015年2月28日在19:59