我有一个在操作系统中运行的可执行文件,但是当我在$tool中打开它时,出现错误。发生了什么事?

评论

错误的示例(例如屏幕截图)将使这种情况更为现实。

邓诺(Dunno)为什么被投票否决。这是一个值得探讨的话题。也许这个问题不清楚。

@ 90h:这个问题相对明确,但是伊戈尔的批评一点都没有得到解决,但是解决这个问题很有意义。
@VehmStark让社区决定。我认为这样很好。这是一个具有通用答案的通用问题,不需要具体说明即可实用。

RE.SE中的一个相关问题,包括几个特定的​​示例,在这里:如何防止使用资源编辑器

#1 楼

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

实际上,可执行文件格式在以下三类位置中指定:


正式文件格式规范
操作系统加载程序的实现
第三方工具的实现

这三件事常常以非常微妙的方式有所不同,恶意程序作者利用了这一事实。只需记住,某个东西是否有效的最终仲裁者是加载程序。如果可执行文件可以运行,但是您的工具出现故障,则您的工具不会考虑操作系统加载程序的实际行为。 PE可执行文件格式的Albertini。

评论


在Windows Vista之后,将无法再在Subsystem处剪切OptionalHeader:pefile中的注释仅在Windows XP之前有效。

–天使
13年4月18日在20:20

#2 楼

尝试使用Rohitab的API Monitor使用加载程序打开程序并查看失败的调用。可以将您指向正确的方向。

评论


实际上这无济于事,因为处理PE文件的第三方程序将不会使用操作系统提供的默认库功能,例如作为ntdll.dll的一部分。

– 0xC0000022L♦
13年4月22日在12:50