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