2010-03-16 95 views
1

.exe文件中的字符串(如对话框的内容/标题)存储在某种资源中。Windows PE - 如果不在资源中,字符串存储在哪里以及如何存储?

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

  • 如何提取和修改直接位于程序中的字符串?我认为这些与C++中的const char*等价吗?

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

回答

1

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

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

得到串出一个PE的最简单的方法,到目前为止,是strings工具自带的每一个Linux发行版的标准,我曾经遇到过(甚至uCLinux操作系统)。它几乎只是贯穿整个二进制文件,寻找一系列以null结尾的,可打印的ascii字符......这是您的规范字符串。 strings --help显示可用参数,如要查找的最小长度字符串,编码,体系结构助手以及其他您可能不需要的内容。

如果您没有运行Linux,我建议您启动一个Ubuntu Live CD,只是为了提供一些简单而有效的命令行工具。

+0

我差点忘了补充一下:你也可以选择以十进制,八进制,十六进制等形式将每个字符串输出的偏移前缀加到二进制文件中 而且,一个模拟工具可用于WinNT/2K: http: //technet.microsoft.com/en-us/sysinternals/bb897439.aspx – Eric 2010-03-23 02:29:17

1

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

PE File Format DLL

你应该能够很容易地找到相应的部分(S)的地址,然后方式工作,你通过数据。还有一个使用DLL的PE文件资源管理器项目(带有源代码),因此您可以看到如何为您的应用程序调用DLL。

相关问题