[英]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这样的智能反汇编程序可以注意到对代码中地址的引用,并突出显示字符串定义。
如果要访问PE文件中的数据,请尝试使用此实用程序(附带源代码和友好的(非GPL)许可证),您可以在自己的应用中使用该代码)。
您应该能够轻松找到相应部分的地址,然后逐步处理数据。 还有一个使用DLL的PE File Explorer项目(带有源代码),因此您可以看到如何为您的应用程序调用DLL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.