二进制插桩~
说点什么
虽然不是主要做这个的,但是安全工程师的知识面太大咯,
学习其它科目的知识有助于锻炼思维,所以记一下学习过程
插桩是啥
动态二进制插桩(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)
在选定的位置要执行的代码