欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

PinDemonium通用动态脱壳工具

来源:本站整理 作者:佚名 时间:2017-05-23 TAG: 我要投稿

本文是对16年的blackhat大会上PinDemonium通用动态脱壳工具介绍。
通用脱壳工具简介
通用脱壳工具可以通过以下方法实现:
-debuggers
-kernel modules
-hypervisor modules
-Dynamic Binary Instrumentation (DBI) frameworks
其中PinDemonium采用的就是DB的方法。
采用DBI主要原因是:
1. DBI 提供了对待分析二进制文件非常细粒度的控制,可以全面控制程序执行的代码,深入分析程序做了什么
2. 对反调试和反汇编技术免疫
3. 有丰富且文档完备的API集合用于从运行的程序中提取出信息,能改变程序运行时的行为
PinDemonium原理
通常,程序的一个内存地址要么可写,要么可执行,满足Write xor Execution (WxorX)规则。但是加了壳的软件会违反这条规则。
通用脱壳工具原理:加壳的可执行文件必需在运行时脱壳。脱壳过程中会向内存中写入新的代码,然后执行写入的代码。利用上述特性来构建通用脱壳工具。
通用脱壳工具必须解决的两个问题:
1. 找到Original Entry Point(OEP);
2. 修复Import Directory来重构可执行的版本。
第一个问题只能通过启发式的方法解决,因为脱壳过程什么时候结束是不可判定的。PinDemonium 综合多个文献中提出的启发式方法来增加找到OEP的可能性,并且重新构建一个可执行的版本。
第二个问题要找到Import Address Table(IAT),从而找到相关的API。
PinDemonium 也是利用通用脱壳工具的原理。记录被写过的地址来发现写后执行的内存区域,当被写过的内存区域要被执行时触发转储和分析功能,然后尝试找到程序所有的导入函数来重构一个可执行的程序。
PinDemonium特点
PinDemonium 先进性:
1. 考虑了堆上的代码;
2. 解决一些IAT混淆技术;
3. 综合多种OEP检测启发式方法来找到最好的可执行的去混淆后的程序。
PinDemonium 主要特点:
1. PinDemonium 的核心模块记录写过的地址(包括对远程进程的写),当发现写后执行的情况,就用 Scylla 对程序进行dump。
2. 对 Scylla 进行了改进:
PE重构模块:增加了对动态内存区域(例如堆)的考虑
IAT搜索和重构模块:允许分析人员编写自己的去混淆代码并集成到 PinDemonium 中
3. 为了保持性能和简化识别写后执行代码的过程,忽略和脱壳无关的指令,如写栈和写Process Environment Block(PEB)
4. 通过设置 PinDemonium 的一些标志可以开启 PinDemonium 相应的功能来对付某些壳所使用的技巧
构成
PinDemonium 使用了两个第三方工具:插桩工具Intel PIN和Scylla。
Intel PIN
PinDemonium 选择插桩来实现通用脱壳工具, 因为:
1. 插桩提供了对待分析二进制文件非常细粒度的控制,可以全面控制程序执行的代码,深入分析程序做了什么;
2. 插桩对反调试和反汇编技术免疫;
3. 插桩有丰富且文档完备的API集合用于从运行的程序中提取出信息,能改变程序运行时的行为。
选择Intel PIN,因为PIN功能全面,文档丰富。
PIN 插桩的粒度可以是:
 Instruction:一条汇编指令;
 Basic blocks:以条件跳转结尾的指令序列;
 Trace:以无条件跳转结尾的基本块序列。
PIN插桩粒度如图1所示

图1
利用插桩可以实现多种功能,如图2所示,一个利用插桩计算程序指令数的例子。

图2
pintool是用户开发的dll来实现想要的功能。pintool 必须包含两个部分:
1. Instrumentation routines:代码收集完毕后执行的回调函数,可以用于分析代码属性和在适当位置插入Analysis routines。
2. Analysis routines:可以在当前指令执行前或执行后执行的函数。
如图3所示,显示了PIN的流程。

图3
 Scylla
Scylla的两个主要功能是IAT搜索和Import Directory重构。其中,IAT搜索部分,Scylla使用两种技术搜索IAT:基本IAT搜索和高级IAT搜索。
1. 基本IAT搜索
(a)Scylla 接受一个开始地址作为输入,从开始地址开始搜索IAT;
(b)扫描包含开始地址的可执行页面中的call和jump指令,这些指令的每个目标地址作为可能的IAT入口指针;
(c)目标地址中的值和所有导入函数地址进行比较,如果没有一致的,目标地址就被淘汰;
(d)从上述步骤找到的IAT入口地址开始扫描内存,直到遇到4个0字节,这样就找到 IAT 的结束地址。同样,反向扫描就可以找到开始地址。
2. 高级IAT搜索
对所有可执行页面而不是仅仅对包含开始地址的可执行页面来搜索IAT。
系统结构
PinDemonium系统结构如图4所示:

 图4
从图中可以看出,PinDemonium主要包括5个模块:
1. WxorX handler module
2. Hooking Module
3. Dumping module
4. IAT search and reconstruction Module
5. IAT Fixing and Import Directory Reconstruction
WxorX handler module
WxorX handler module是PinDemonium的核心模块。WxorX handler module记录写过的地址(包括对远程进程的写),当发现写后执行的情况,就用Scylla对程序进行转储。
为了检测写后执行,实现的两个重要功能:
1. Written addresses tracking:记录被写过的每个内存地址来创建 Write Interval(WI)。WI 是一个结构体,记录一片被写过的连续内存,包含以下信息:开始地址,结束地址,是否已分析的布尔标志,对 WI 所有启发式方法的结果。图5显示了对2个WI进行合并的三种情况。为了保持性能和简化识别写后执行代码的过程,忽略和脱壳无关的指令,如写栈和写Process Environment Block(PEB)。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载