如何检测可执行文件中使用的内部和共享库?

逆向工程 静态分析 动态分析 可执行 二进制 图书馆
2021-06-26 09:13:06

问题:我们希望能够确定某个程序正在使用特定版本的内部库。例如,如果软件在内部使用旧的、已弃用的库。此外,我们希望能够知道它在主机系统上使用了哪些共享库。

到目前为止我们所做的:我们过去常常strings2查看可执行文件中的 UNICODE 和 ASCII 字符串。这些字符串的手动分析可能会提供有时在内部使用的库版本。可以想象,这是一种低效的方法,而且不是很可靠。我们还查看了“Dependency Walker”以构建所有依赖项的树。但是,这不允许我们知道内部是否正在使用过时的库。我们还阅读了两篇围绕该主题的研究论文:

问题:是否有更好的方法或方法来确定可执行文件是否在内部使用过时的库?例如,查看字符串是一种可能的方法,但有没有办法自动执行此操作?因为否则,查看 1000 行 ASCII 和 UNICODE 字符串可能会很耗时。

1个回答

我可以看到两条前进的道路。

首先,按照您当前的方法,您可能可以在找到的字符串中自动检测版本信息和库。这不是防弹解决方案,但可以节省您手动读取数千个字符串的时间。

完成创建 FLIRT 的任务,或使用不同版本的各种库的众多函数级二进制差异工具之一。