前言
动态二进制插桩(dynamic binary instrumentation ,DBI)技术是一种通过注入插桩代码,来分析二进制应用程序在运行时的行为的方法。
动态二进制插桩技术,可以在不影响程序动态执行结果的前提下,按照用户的分析需求,在程序执行过程中插入特定分析代码,实现对程序动态执行过程的监控与分析。目前,应用广泛的动态二进制分析平台有Pin,DynamoRIO和Frida等。
最常用动态二进制插桩框架的平台
这篇文章的目的是对动态二进制插桩的原理和基本实现过程进行全面的介绍,其中,我会选择一些最知名和最常用的动态二进制插桩框架进行具体说明,其中包括Pin,DynamoRIO和Frida。而这三个里面,我会主要关注Intel公司的Pin平台,该平台提供了丰富的编程接口,开发者可以通过调用编程接口方便的获取程序动态执行期间的指令、内存和寄存器等信息,实现细粒度的动态监控,因此本文选取Pin平台进行动态分析。
Pin提供了指令、基本块和系统调用等多个层次插桩分析,其中,RTN是函数级的插桩机制,能够自动识别API函数;Trace是轨迹层次的插桩机制,能够自动识别单一入口、多出口的指令轨迹块。
不过使用动态二进制插桩框架的可不止Pin,DynamoRIO和Frida,还有比如Valgrind,Triton(使用Pin),Q动态二进制插桩,BAP,Dyninst以及许多其他框架。其中有些更成熟,有些则不太成熟。有些功能更多,有些功能更少。尽管Valgrind是最广为人知且较为成熟的动态二进制插桩框架