添加新 PE 部分后的“未知发布者”

逆向工程 聚乙烯 部分
2021-07-11 14:31:53

我开始学习逆向工程,目前我正在尝试修补游戏时遇到问题。我需要更多空间在我的程序中插入指令,所以我遵循了这里描述的方法:https : //stackoverflow.com/questions/35685589/how-do-i-make-space-for-my-code-cave-in- a-windows-pe-32bit-executable并添加了一个新部分,我可以在其中放置我的新指令。然后当我运行程序时,指令被正确执行,没有发生崩溃。

我的问题是,当我启动游戏时,我收到一个弹出窗口,询问我是否要“允许来自未知发行商的此应用程序对您的设备进行更改”,这很烦人。如果我在文件的属性中显示“详细信息”选项卡,则大多数信息(例如文件描述、文件版本...)在补丁之前存在时都丢失了。在可执行文件的末尾添加新部分是预期的结果吗?看起来这些信息在 .rsrc 部分中。有什么我可以做的来修复它,这样我就没有弹出窗口吗?

2个回答

通过添加额外的部分,您已经破坏了Authenticode 签名

这个博客上有一篇关于签名如何工作和验证的很好的入门,它说:

完整性:每个 Authenticode 签名都包含已签名二进制文件的加密散列。在加载时将此哈希与二进制文件的内存表示进行比较,以防止恶意修改。

从技术上讲,它可以防止所有修改,而不仅仅是恶意修改。至关重要的是,Authenticode 签名涵盖了所有数据,除了(另见注 1):

  • PE 校验和。
  • 证书数据目录条目。
  • 证书表(和签名)。

本文讨论了可能破坏 Authenticode 模型的各种方法(但没有一种方法可能有助于您尝试执行的操作)。

Authenticode 旨在阻止您的尝试:修改可执行文件而不提供警告。不会阻止其他运行时代码注入技术(可能在设备驱动程序中除外),因此您可能会以不同的方式修改代码。


注 1 - PE“覆盖”历来未涵盖,但请参阅 Microsoft有关 MS13-098安全公告 2915720详细信息

如果更改签名不会影响游戏(即游戏的任何部分都不会检查发行商,这种情况很少见),您可以简单地创建自己的证书,安装它并在更改后使用它来重新签署应用程序。或者,您可以将其删除。

Authenticode 签名是证明二进制文件在发布后未被篡改的加密方式。如果您再次签署该应用程序,您将成为发布者。

您可以从MSDN开始