如何从二进制文件中识别/提取相关程序集?

逆向工程 拆卸 部件 二元分析
2021-06-30 11:22:56

假设我对在大型二进制文件中对特定进程进行逆向工程感兴趣,比如说谷歌浏览器如何解析 XML,有哪些通用方法可以识别程序用于执行此操作的指令?

抱歉,我意识到这是一个广泛的问题,所以具体来说,当您对程序的结构方式或它具有哪些依赖项知之甚少时,您将如何确定相关指令?

1个回答

我将介绍在这种情况下我将执行的步骤请注意,它们不一定是最有效和最可靠的,尽管它们应该在许多情况下工作。我假设您要检查的二进制文件没有打包和混淆。

  1. 寻找进口有时您正在寻找的代码只是从外部库中获取的。在这种情况下,只需查找其文档就足够了。对于 PE 文件,您可以对 ELF 文件使用Dependency WalkerELF Library Viewer
  2. 在反汇编程序(例如radare2IDA)中打开文件,如果附加了调试符号,您可以搜索带有名称的函数,表明它执行您想要查找的活动。
  3. 搜索字符串如果您注意到在启动某些功能时使用了某些字符串,您可以在反汇编程序中搜索此字符串并搜索对它的引用。然后,您可以环顾此区域,您可能会找到您正在寻找的代码。

如果所有先前的方法都失败(最有可能),则是进行动态分析的时候了由于您不知道在哪里设置断点,您可以在程序中的所有函数调用处设置它们(可能不包括您不感兴趣的库函数)。我编写了radare2脚本来执行这个任务。

假设我们想了解Google Chrome如何解析 xml 文件。我会修改这个脚本来记录每个不同的函数调用,然后简单地继续。然后我会在调试器中打开谷歌浏览器(可能是radare2,但可以是任何其他你可以编写脚本的),然后在空页面上等待几秒钟来收集它在做“没什么特别的”时调用的所有函数。

然后我会重新运行它,但这次打开一些 xml 文件(例如通过拖放到空页面上)。现在,您可以比较包含所有调用过程的文件,并查看第二个文件中存在哪些额外的过程。这些(或至少其中一些)应该负责解析 xml 文件。