【问题标题】:How can I edit the resources in an executable using C++?如何使用 C++ 编辑可执行文件中的资源?
【发布时间】:2012-10-25 20:34:04
【问题描述】:

我需要一种方法来编辑已编译可执行文件的资源(确切地说是字符串表),并且我需要在 C++ 中进行。

任何人都可以提供任何指导/示例代码来说明我该如何去做吗?

【问题讨论】:

  • 嗯。如果你在问我认为你在问什么,那么这是不可能的。
  • Resource hacker ...虽然不确定它是否支持修改字符串表。
  • Resource Hacker 可以完成这项工作,但我需要在自己的应用程序中完成。
  • @user1661022 那么你现在只需要一个工具来反编译Resource Hacker :)
  • 在 Authenticode 签名验证过程中是否跳过了资源表?我不认为它是。我只问,因为如果他打算在已经由其他人签名的库上执行此操作并且他无法访问签名证书 并且 Authenticode 检查资源表作为其摘要计算的一部分,然后,总之,你弯了,伙计。

标签: c++ resources executable portable-executable


【解决方案1】:

LoadLibrary() 开始并加载一个可执行文件(您要编辑的那个) 然后根据需要FindResource()UpdateResource()

在这里阅读所有相关信息:

PE format Resource Functions

【讨论】:

    【解决方案2】:

    如果您使用的是 Linux 或 OS X,总有“strings”命令会打印出可执行文件中的所有静态字符串。将其与“objdump”之类的内容和一些知识与十六进制编辑器相结合,您也许可以拼凑出一些东西。

    【讨论】:

    • 兄弟,他说的是 PE = windows :P
    • 最初的问题没有指定操作系统,但无论如何都是很好的信息:-)
    【解决方案3】:

    我不知道这是否可能,一旦你有一个编译的可执行文件并且它只是机器代码,没有真正的具体方法来理解如何解释它(因此找到/编辑你的资源'正在寻找)...即一旦你有了可执行文件,你就不能确定一个词是汇编中的指令还是只是表示汇编中的数字、标签等的词......

    据我所知。

    【讨论】:

    • 您在这里所说的与现实相去甚远。当然,编译后的可执行文件(以及嵌入其中的资源)也具有明确定义的格式,只要您知道其结构,就可以对其进行调查和操作。
    • 是的,你完全正确 - 只要你知道结构。但是是否有可能只获取任意可执行文件并正确解析它?我的印象是解析任意可执行文件会非常困难,因为它取决于编译器/编译器的使用方式/编译的架构。
    • 它需要大量的结构和解析,但这是一个绝对可以解决的问题。例如,pev 是一个跨平台的 PE 文件分析工具包,它可以解析几乎所有的 PE 格式。虽然它不允许编辑,但对于任何具有高级 C 技能的人来说,它已经完成了一半(假设 Windows API 并不总是可供您使用,就像 pev 的情况一样)。
    【解决方案4】:

    您可以查看 Matt Pietrek 的 PeDump 的良好旧参考和源代码。他确实在 C++ 中处理(只读)PE 文件的资源。也许它会激励你解决你的问题......

    【讨论】:

    • 当我开始实施 PeStudio (winitor.com) 时,我从 Matt Pietrek 那里学到了很多东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多