intel pin学习
pin 工具的功能:
1. 替换原有程序函数
2. 探测程序任意指令,在自己设定的插入位置插入自己的代码并执行
3. 记录程序调用,包括syscall(检测改变参数)
4. 记录程序线程活动情况
5. 监测进程树
6. 模拟api调用(这里可以思维宽广点。。。)
Pin相当于一个JIT("just in time“)编译器。
Pin大体上有三种插装代码模式(指令级,rtn级,bbl级),
Pin的三种插入(代码)模式:
1.Instruction level (Ins )
即在每一条原始程序指令前,后插入自己的代码,即调用这个函数
这个级别执行可想而知,会执行的很慢,很耗时间。开销比较大,(虽然检测精度高)
(因为在每天指令上加入代码,即使自己的代码只包含一行(ps: nop),代码就至少膨胀5倍以上)
- Function level(RTN)
Pin通过符号表信息来找到这些需要插入的位置,要使用这种模式的代码插入,首先得调用pin内置的初始化符号表函数,即PIN_InitSymbols()
- Basic block level(BBL)
即基本调用块级别,插入模式,只在trace时候可用。
下面为pin的执行过程: - 启动自己(pin.exe),以debugger的模式,附加要分析程序的进程
- 注入pinvm.dll到宿主程序中
- 注入自己的工具代码(即pintool.dll)
- 激活主程序进程
获取分析结果
有了这些log日志记录,所以很容易处理批量已知恶意代码。对于未知的文件,则可以制定提取一些特征规则,然后去匹配运行后的记录文件与内存dump文件特征,则能较快筛选出恶意与非恶意文件,还有可以更进一步给出样本分类。进行数据竞争预测。
对于特殊的样本则可以先用此工具运行,找到感兴趣的api或位置,根据前面的api返回地址跟踪过去,则会很容易进行逆向分析过程。对于加壳或者混淆过的恶意代码分析能够提供参考分析与帮助。