共享库的动态分析?

逆向工程 动态分析 dll
2021-06-29 06:18:20

是否有动态分析共享库的技术?例如,我知道 DLL 有一个入口点,但是如何调用其他导出的函数呢?我是否需要编写一个自定义可执行文件来为我要分析的每个 DLL 调用导出?

4个回答

动态链接库与标准可执行文件具有相同的可执行文件头和结构。因此,可以像调试普通可执行文件一样调试它们。它可能比平时更棘手,因为为了调试它,它必须被加载到某个进程中,而实现这一点可能是微不足道的(即,如果它是作为其他程序的一部分加载的),或者可能需要做一些事情.

一种常见的技术是使用类似OllyDbg 的 LoadDll 之的东西链接页面描述了一些直接在 DLL 中调用导出的示例。尽管 OllyDbg 有一些智能来确定函数参数的数量,但您可能需要进行一些逆向工程来弄清楚这些参数的类型应该是什么。有关如何去做的一些建议,请参阅最近的问题

或者,您可以编写一个小程序来加载 DLL 并手动调用有趣的导出。这仍然受到需要知道如何与 DLL 接口的限制,但与此同时,为了彻底对您的目标进行逆向工程,这种编程路线可能被证明是必要的。即,也许您需要调用一些导出以创建程序期望作为另一个导出的输入的某个对象。LoadDll 很快就会被证明很麻烦,编写这个程序真的不应该那么困难。

另一种方法可能是使用 IDA 的 AppCall 功能:在 IDA 中为相关导出函数定义原型后,您可以在当前运行的进程上下文中从 IDA 控制台菜单触发函数的执行。

您可以在 hexblog 相关帖子中详细了解此功能的工作原理以及如何使用它:http : //www.hexblog.com/ ? p=113

DynamoRIO 非常适合进行更深入的动态库分析。DynamoRIO 是一个动态二进制转换器,适用于 Linux 和 Windows,适用于 x86 和 x86-64。

要使用 DynamoRIO 分析 DLL,您将分别使用dr_register_module_load_eventdr_register_module_unload_event函数注册模块加载和卸载事件

您还可以注册允许您在执行指令之前对其进行操作的事件。这些事件将使您能够隔离从特定 DLL 执行的代码,并将自定义检测应用于该 DLL。

第一个天真的想法是列出函数的符号并将其用作二进制文件的入口点来反汇编每个函数。

然后,如果您正在寻找更高级的技术,您应该查看IDA FLIRT 签名这里有个问题,建议大家看一下答案:什么是FLIRT签名?