从二进制文件 (.exe) 中提取字符串

逆向工程 视窗 C++ C 登录
2021-06-18 22:45:26

这个问题已经被问到了很多,尤其是在 stackoverflow 上,但解决方案/回复并不明确或广泛。

我正在寻找的是从 Sysinternals构建Strings所做的事情我的目标是读取任何 Windows 二进制文件并以快速有效的方式提取所有字符串 ASCII/UNICODE。

目前我正在从磁盘打开文件,读入缓冲区,然后将该缓冲区分配到一个向量中并使用 booyer_moore 搜索。此操作非常消耗 CPU,尤其是当文件很大(几 mb)并且代码搜索“所有内容”时。

我找到了这个https://github.com/glmcdona/strings2但由于采用的方法它不支持 x64,而且我似乎找不到 Sysinternals 工具的任何源代码。

是否可以向我展示(甚至是一些伪代码)如何处理这个问题?

1个回答

如果您要做的只是复制 SysInternals 项目所做的事情,那么您链接的 strings2 项目就是这样做的,并且应该适合您的目的。x86/x64 的东西只是为了他们添加的特殊提取模式,它与 SysInternals Strings 的功能是分开的。

另一方面,如果您确实需要提取更隐蔽地存储的字符串(堆栈、混淆等),请查看FLOSS