动态二进制插桩原理与实战

说点什么

虽然不是主要做这个的,但是安全工程师的知识面太大咯,
学习其它科目的知识有助于锻炼思维,所以记一下学习过程在这里插入图片描述

插桩是啥

动态二进制插桩(dynamic binary instrumentation ,DBI)技术是一种通过注入插桩代码,来分析二进制应用程序在运行时的行为的方法。

动态二进制插桩技术,可以在不影响程序动态执行结果的前提下,按照用户的分析需求,在程序执行过程中插入特定分析代码,实现对程序动态执行过程的监控与分析。

为啥要插桩

源代码插桩

大家调试程序一定试过这样的方法:

。。。。。
printf("牛奶颜色:%s\n", milk_color);
。。。。

这就是源代码插桩,方便快捷,如果牛奶颜色是黑色,程序就出错了

二进制插桩

将插桩代码注入正在运行的进程,也就能调试程序了…

mov esp, ebp
我插,我看~
pop ebp

例如这样能看到ebp了,不过过程比源代码插桩更繁琐,需要拆解。

如何插桩

两种主要方式和三种执行模式

方式1:

在动态二进制系统的控制下从头到尾执行程序。

系统
控制
程序

方式2:

动态二进制系统可以被附加到一个已经运行的程序中

系统
附加到
程序

第一种模式:

JIT模式是最常见的实现方式,也是最常用的模式:
复制一个文件,进行修改,再执行

复制文件
修改
执行

第二种模式:

解释模式

第三种模式:

探测模式,通过使用新指令来覆盖旧的指令,文件不复制

插桩实例

Pin 动态二进制插桩

Pin 是 Intel 公司研发的一个动态二进制插桩框架,可以在二进制程序运行过程中插入各种函数,以监控程序每一步的执行。
链接: 下载官网.
Pin 是一个闭源的框架,由 Pin 和 Pintool 组成。Pin 内部提供 API,用户使用 API 编写可以由 Pin 调用的动态链接库形式的插件,称为 Pintool。
在这里插入图片描述

通常插桩需要的两个组件都在 Pintool 中:

插桩代码(Instrumentation code)
    在什么位置插入插桩代码
分析代码(Analysis code)
    在选定的位置要执行的代码

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42882717/article/details/115140519