通常 .exe 文件中的字符串(如对话框的内容/标题)存储在某种资源中。
但是在最近的一些我反汇编/资源检查的exe中,我找不到任何包含该字符串的资源,但它以某种方式用db
's 硬编码到程序源代码中。
如何提取和修改直接位于程序中的字符串?我假设那些只是相当于
const char*
C++ 中的 s ?为什么有人不“外包”对话框、菜单等的内容?
通常 .exe 文件中的字符串(如对话框的内容/标题)存储在某种资源中。
但是在最近的一些我反汇编/资源检查的exe中,我找不到任何包含该字符串的资源,但它以某种方式用db
's 硬编码到程序源代码中。
如何提取和修改直接位于程序中的字符串?我假设那些只是相当于const char*
C++ 中的 s ?
为什么有人不“外包”对话框、菜单等的内容?
到目前为止,从 PE 中获取字符串的最简单方法是strings
我遇到的每个 Linux 发行版(甚至 uCLinux)都标配的实用程序。它几乎只是遍历整个二进制文件,寻找一系列以空字符结尾、可打印的 ascii 字符……这是您的规范字符串。 strings --help
向您显示可用的参数,例如要查找的最小长度字符串、编码、架构助手以及您可能不需要的其他内容。
如果您没有运行 Linux,我建议您启动 Ubuntu Live CD 以获取大量简单而有效的命令行实用程序。
字符串位于资源或 PE 文件的只读数据部分中。当字符串不是控件的标题/标题时,第二种更为常见。拆卸时它们只是一段记忆,没有特别标记。像 IDA 这样的智能反汇编器可以注意到代码中对地址的引用并突出显示字符串定义。
如果您想访问 PE 文件中的数据,请尝试使用此实用程序(附带源代码和友好(非 GPL)许可证,以便您可以在自己的应用程序中使用该代码)。
您应该能够轻松找到相应部分的地址,然后通过数据进行操作。还有一个使用 DLL 的 PE 文件资源管理器项目(带有源代码),因此您可以了解如何为您的应用调用 DLL。