为什么在 $tool 中打开可执行文件时会出错?

逆向工程 工具 恶意软件 文件格式 聚乙烯
2021-07-06 00:52:07

我有一个在操作系统中运行的可执行文件,但是当我在其中打开它时$tool出现错误。到底是怎么回事?

2个回答

这是由操作系统的加载程序和您使用的工具中的文件格式解析代码的差异引起的。恶意程序作者经常利用可执行文件格式的规范与加载程序在实践中实际使用文件格式之间的差异。如果文件格式规范和操作系统加载程序之间存在差异,则存在可以运行但根据规范不合法的可执行文件!例如,在 Windows Vista 之前,PE 可执行文件可能会缺少几个标头字段,而 Window 的加载程序仍会加载它. 您的工具很可能是通过查看文件格式规范而不是加载器的实现来编写的,因此不一定能处理操作系统成功加载的所有可执行文件。

实际上,可执行文件格式在三类地方指定:

  1. 正式的文件格式规范
  2. 操作系统加载器的实现
  3. 第三方工具的实施

这三件事通常以非常微妙的方式不同,恶意程序作者利用了这一事实。请记住,确定某些内容是否为有效可执行文件的最终仲裁者是加载程序。如果可执行文件运行但您的工具失败,则您的工具不会考虑操作系统加载程序的实际行为。

我所知道的记录这种现象的最佳作品是 Ange Albertini 为 PE 可执行文件格式编写的

尝试使用Rohitab 的 API Monitor使用加载程序打开程序并观察失败的调用。可能会为您指明正确的方向。