如何防止使用资源编辑器

逆向工程 视窗 资源
2021-06-15 03:37:26

有多种工具可以编辑 Windows 可执行文件的资源。这些工具提供了一个非常简单的界面来更改程序的外观和感觉。无需任何倒车知识即可轻松替换图标、文本、菜单。

我的问题是,我有什么选择可以防止资源被如此轻松地编辑?

3个回答

一个优雅而简单的解决方案是签署您的可执行文件在启动时验证签名(任何更改都会使签名无效)。即使有人修补了您的签名检查,签名仍然无效,这表明该 exe 与您交付的 exe 不同。

我的其他想法是使用 exe 打包程序或对资源进行校验和(两者都已在 @angealbertine 答案中提出)。

此外,我们可以利用编辑器本身的错误来防止篡改我们的资源。这里有趣的部分是大多数资源编辑器不知道如何解析非典型(不是非常非典型)的 PE 文件。例如,某些编辑器假定资源部分名称必须始终为.rsrc. 例子:

  1. 资源黑客

    • 插入特殊资源导致Resource Hacker进入无限循环。演示在这里:http : //code.google.com/p/ollytlscatch/downloads/detail?name=antiResHacker.exe

    • 插入特殊RT_STRING资源导致资源黑客崩溃。

    • 它假设IMAGE_OPTIONAL_HEADER结构的大小假定为sizeof(IMAGE_OPTIONAL_HEADER),当前0xE0为十六进制,而它甚至可以更大。将大小设置为更大的值会导致 Resource Hacker 丢弃整个 PE 文件。

  2. 修复器

    • 与 1c 相同。
    • 使用NumberOfRvaAndSizes可以轻易伪造领域0xFFFFFFFF这会导致 Restorator 丢弃整个 PE 文件。
    • 假设资源部分名称必须是.rsrc. 换别的吧。这会导致 Restorator 丢弃整个 PE。
    • Restorator 将丢弃Characteristics字段设置为IMAGE_SCN_CNT_UNINITIALIZED_DATA其他特性的任何资源部分

    演示在这里:http : //pastebin.com/ezsDCaud

资源只是具有定义常量的标准结构,但最终,它只是缓冲区的递归结构,无论它包含什么(这里是标准布局)。

理论上它可以包含任何内容——任何深度、循环、无效类型等……但标准 API 将无法与它们一起使用。

因此,您需要确保,如果您加密或压缩资源,则需要在使用任何这些 API 之前恢复它们(资源目录结构及其内容),这可能并不明显。

特别是,某些资源甚至在文件执行之前就被操作系统使用,例如第一个图标、清单和版本信息 - 因此您可能希望保持这些完整。

防止微不足道的资源编辑的一种简单方法是在选定的资源上运行流密码,在最终的二进制文件上(在链接器将它们放置到位并在 DataDirectory 中生成资源条目之后),并根据需要或在程序初始化。

如果您正在寻找现成的解决方案,许多优秀的打包程序如PECompact 都支持资源压缩,从而防止外部资源编辑。