假设我对在大型二进制文件中对特定进程进行逆向工程感兴趣,比如说谷歌浏览器如何解析 XML,有哪些通用方法可以识别程序用于执行此操作的指令?
抱歉,我意识到这是一个广泛的问题,所以具体来说,当您对程序的结构方式或它具有哪些依赖项知之甚少时,您将如何确定相关指令?
假设我对在大型二进制文件中对特定进程进行逆向工程感兴趣,比如说谷歌浏览器如何解析 XML,有哪些通用方法可以识别程序用于执行此操作的指令?
抱歉,我意识到这是一个广泛的问题,所以具体来说,当您对程序的结构方式或它具有哪些依赖项知之甚少时,您将如何确定相关指令?
我将介绍在这种情况下我将执行的步骤。请注意,它们不一定是最有效和最可靠的,尽管它们应该在许多情况下工作。我假设您要检查的二进制文件没有打包和混淆。
如果所有先前的方法都失败(最有可能),则是进行动态分析的时候了。由于您不知道在哪里设置断点,您可以在程序中的所有函数调用处设置它们(可能不包括您不感兴趣的库函数)。我编写了radare2脚本来执行这个任务。
假设我们想了解Google Chrome如何解析 xml 文件。我会修改这个脚本来记录每个不同的函数调用,然后简单地继续。然后我会在调试器中打开谷歌浏览器(可能是radare2,但可以是任何其他你可以编写脚本的),然后在空页面上等待几秒钟来收集它在做“没什么特别的”时调用的所有函数。
然后我会重新运行它,但这次打开一些 xml 文件(例如通过拖放到空页面上)。现在,您可以比较包含所有调用过程的文件,并查看第二个文件中存在哪些额外的过程。这些(或至少其中一些)应该负责解析 xml 文件。