不是有效的 win32 应用程序。为什么?

逆向工程 视窗 可执行
2021-06-25 21:50:52

现在我正在开发一个拆包器并进入测试阶段。有时我收到一条消息,说解压后的文件是无效的 Win32 可执行文件,但它没有提供信息。

我想问一下是否有一个工具可以识别原因,为什么Windows exe的加载程序“不喜欢”文件。因此,我将能够轻松检测解包脚本中的错误。

1个回答

有很多 PE/header dumpers,但据我所知,没有一个适合审查图像;他们的目标通常是提取和显示信息,而不是验证。

最好的方法是用您最喜欢的 Swiss Army Knife 语言编写一个小程序或脚本来验证输出图像的完整性,并在定义规则的部分重点关注灵活性和清晰度。在许多语言中,都有可以调用的库,例如python 中的pefile

网络上没有任何地方可以全面收集有关 PE 图像的所有规则。许多规则不是由 Windows 加载程序的当前版本强制执行的,或者至少不是一致的,即使它们在 MSDN 或PE COFF 规范中的某处被提及因此,许多包装者和保护者违反某些现有规则而逍遥法外。暂时。

出于同样的原因,如果您的输出映像恰好在您当前的 Windows 版本上运行,则不能保证它会在具有不同版本、补丁级别或位数的另一个 Windows 副本上运行。更不用说 WINE 或 ReactOS 了。

除了 Google 之外,极好的信息来源是ReactOS 项目OS dev wiki

需要特别注意的两件事 - 除了标题信息、数据目录和节表的正确性之外 - 是图像校验和和文件/节对齐。此外,对于某些任务(例如计算校验和),您可以调用 Microsoft 的imagehlp.dll 中的函数

要快速查看您的 PE,您始终可以使用 Microsoft 的 dumpbin 实用程序,该实用程序包含在 Windows SDK(至少那些带有编译器的 SDK,即当前 8.1 之前的那些)和 Visual Studio 的许多版本中,包括免费社区版。我还发现 Daniel Pistelli 的免费PE Insider非常方便,而且CFF Explorer套件也是免费的。

PS:记录 PE 结构的现实(相对于理论)的最佳资源可能是corkami 的 PE wiki这无疑是我见过的最全面的 PE 文档... ReversingLabs 编译了一个名为Undocumented PECOFF的文档,它对实际需求与理论进行了很好的概述。虽然他们的重点是安全影响,但 pdf 也是使 PE 工作的极好资源。