繁体   English   中英

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

[英]Windows PE - Where and how are strings stored if not in resources?

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

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

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

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

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

如果您未运行Linux,建议您仅出于大量简单有效的命令行实用程序就启动Ubuntu Live CD。

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

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

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

PE文件格式DLL

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM