动态二进制检测框架Pin简介及API Log Tool

2015-10-15 +25 475033人围观 ,发现 31 个不明物体 工具

本文原创作者:比尔.盖茨

Pin工具的介绍

Pin 是一种动态二进制检测框架,适用于x86,x64架构,一般用于程序动态分析用,是多个平台都支持,windows 、linux以及OSX。该工具原本适用于计算机架构分析用的,但是由于丰富的api,与强大的功能现在运用的地方很多。比如计算机安全,环境模拟器,并行计算。

Pin相当于一个JIT("just in time“)编译器,并且有相当数量的实例代码(这一点真不错),对于新手来说上手是很快的。但是貌似在国内安全界很少被公开提及,但我知道还是用的。对于这样的一个好工具,我觉得再不介绍给大家真不好意了。

Pin大体上有三种插装代码模式(指令级,rtn级,bbl级),

指令级的执行过程大体上如下图:

下面讲讲pin 工具的功能:

1. 替换原有程序函数
2. 探测程序任意指令,在自己设定的插入位置插入自己的代码并执行
3. 记录程序调用,包括syscall(检测改变参数)
4. 记录程序线程活动情况
5. 监测进程树
6. 模拟api调用(这里可以思维宽广点。。。)

Pin的三种插入(代码)模式:

1.Instruction  level (Ins )

即在每一条原始程序指令前,后插入自己的代码,即调用这个函数,这里我不详细讲,因为pin的文档很全面,自己去就行。但是有一点这个级别执行可想而知,会执行的很慢,很耗时间。(因为在每天指令上加入代码,即使自己的代码只包含一行(ps: nop),代码就至少膨胀5倍以上)

2. Function level(RTN)

Pin通过符号表信息来找到这些需要插入的位置,要使用这种模式的代码插入,首先得调用pin内置的初始化符号表函数,即PIN_InitSymbols()   

3. Basic  block level(BBL)  

即基本调用块级别,插入模式,只在trace时候可用。

下图为pin的执行过程:

0. 启动自己(pin.exe),以debugger的模式,附加要分析程序的进程
1. 注入pinvm.dll到宿主程序中
2. 注入自己的工具代码(即pintool.dll)
3. 激活主程序进程

然后的过程就是程序执行与pin代码执行的过程了。

下图为其各个部分的具体功能:

Api  log  Record工具:

就是记录出pe文件执行时候调用的api序列,为了效率,我并没有记录所有的api,这样执行效率与序列优化都能保证,输出api序列文件名为apisequence.log。如果有注入或者写内存,则会有dump,dump的文件名为 .dump结尾的文件。

本工具中包含 :

1. 返回地址,api名称,调用参数,返回值,动态库加载顺序。
2.dump注入代码或写内存数据。

工具运行命令行


Zbot运行后的log输出情况:

Md5: 776f4947d88943479094fb9a9cf8c96e

大灰狼:

Zbot dump出来的文件

其中1.dump为一个pe文件

有了这些api log,所以很容易处理批量已知恶意代码。对于未知的文件,则可以制定一些特征规则,然后去匹配运行后的api log与内存dump文件特征,则能较快筛选出恶意与非恶意文件,还有可以更进一步给出样本分类。

对于特殊的样本则可以先用此工具运行,找到感兴趣的api或位置,根据前面的api返回地址跟踪过去,则会很容易进行逆向分析过程。对于加壳或者混淆过的恶意代码分析能够提供参考分析与帮助。

工具还有不完善的地方和可以优化和怎加功能的地方,如果有时间我会再完善的,如果大家有好的想法,可以给我提建议。

工具下载地址

链接:http://pan.baidu.com/s/1ntKmzKd

密码:x6kn

1.该工具只能运行在win7 x86,x64以上环境,且目标程序只支持x86(如果有需要我可以搞一个x64版本的)
2.该工具在执行目标程序的时候是真实跑起来的,所以如果运行病毒请在虚拟机中运行,如果目标文件不是恶意代码则无所谓

压缩包md5:
f30fcb9fad3f509a8cb1bd9614c24720 
压缩包sha1:
78cf69cc4119589e808a5247020540853cf18c55

* 作者:比尔.盖茨(微博),转载需注明来自FreeBuf黑客与极客(FreeBuf.COM)

更多精彩

这些评论亮了

发表评论

已有 31 条评论

取消
Loading...

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php