Windows PE - 如果不在资源中,字符串存储在何处以及如何存储?

时间:2010-03-16 15:00:28

标签: windows disassembly portable-executable

.exe文件中的字符串(如对话框的内容/标题)通常存储在某种资源中。

但是在最近的一些exes中,我进行了反汇编/资源检查,我找不到任何包含该字符串的资源,但它在某种程度上用db硬编码到程序源代码中。

  • 如何直接提取和修改程序中的字符串?我假设这些只相当于C ++中的const char*

  • 为什么有人不会“外包”对话框,菜单等内容?

3 个答案:

答案 0 :(得分:3)

到目前为止,从PE中获取字符串的最简单方法是strings实用程序,它是我遇到的每个Linux发行版(甚至是uCLinux)的标准配置。它几乎遍历整个二进制文件,寻找一系列以null结尾的可打印ascii字符......这是你的规范字符串。 strings --help显示可用参数,例如要查找的最小长度字符串,编码,架构助手以及您可能不需要的其他内容。

如果您没有运行Linux,我建议只为大量简单但有效的命令行实用程序启动Ubuntu Live CD。

答案 1 :(得分:1)

字符串位于PE文件的资源或只读数据部分中。当字符串不是控件的标题/标题时,第二种更常见。拆卸时它们只是一块记忆而没有特别标记。像IDA这样的智能反汇编程序可以注意到代码中对地址的引用并突出显示字符串定义。

  • 提取和修改。如果你知道字符串的地址,很容易提取和修改它。取字符串的地址,然后减去图像库,然后减去部分的RVA,然后添加部分的物理偏移量。这将为您提供文件中字符串的位置。在那里你可以用十六进制编辑器修改它。查找地址很难 - 您需要分析反汇编的代码。
  • 为什么有人不会“外包”对话框,菜单等的内容?不知道。有人可能会声明const char *然后将其设置为title而不注意它实际存储的位置。

答案 2 :(得分:1)

如果您想访问PE文件中的数据,请尝试使用此实用程序(附带源代码和友好(非GPL)许可证,以便您可以在自己的应用程序中使用该代码。)

PE File Format DLL

您应该能够轻松找到相应部分的地址,然后逐步完成数据。还有一个使用DLL的PE文件资源管理器项目(带有源代码),因此您可以看到如何为您的应用程序调用DLL。