.壳(Pack)也称为“保护器”或“打包器”,是一种可以将目标应用程序加密,并且在使用时无需手动解密的一种版权保护工具
.壳的诞生得益于感染型病毒的出现,事实上,壳与感染型病毒的工作原理几近相同,都是一种可以将自己的“寄生体”“感染”到“宿主”身上的一种技术。
.在软件安全领域中,壳是技术密集度最高的安全技术之一。
.总体而言,比较通用的脱壳技巧有以下几种:
1. 利用SFX自解压脱壳
2. popad出口标记脱壳
3. 单步跟踪脱【万能脱壳】
4.利用堆栈平衡脱壳
.通用的脱壳机很难应对比较强悍的“猛壳”,想脱“猛壳”还是需要扎实的编程功底、调试功底与逆向功底。
具体步骤:
-----1. 利用SFX脱壳
.
SFX是Self-extracting的简写,译为自动解压缩,这是OllyDBG提供的一个比较智能的功能。
.
SFX的原理是检测目标程序是否存在压缩特征,是的话OllyDBG就会尝试使用自己的SFX功能将调试员带到程序的真正入口点(OEP)处。
.
利用SFX脱壳的步骤如下:
A.设置OllyDBG忽略所有异常
B.在OllyDBG中的SFX选项卡中设置相应选项
C.清除UDD文件后重载程序,OllyDBG的SFX机制会检测到被调试文件存在自解压模块并提示,选择“否”后OllyDBG会尝试跟踪到被调试文件的OEP。
-----2. 出口标记脱壳
.绝大多数的壳为了保持加壳后的程序堆栈平衡,都会在壳运行前使用pushad或pushfd保存当前所有寄存器的状态,并在壳的Stub代码运行完毕后再使用popad或popfd恢复左右寄存器的状态。
.因为所有的壳在运行完毕后都会开始运行正真的宿主程序,因此找到popad的可能意味着到了软件的壳的结尾处(也就是宿主程序的起始OEP)
.利用出口标记的脱壳步骤如下:
A.
单击鼠标右键依次选择[查找]>[所有命令]
B. 然后输入我们要查找的指令popad/popfd
C. 依次查找可能的跨段跳转,找到OEP
-----3. 单步跟踪脱壳
.单步跟踪脱壳本质上是一种万能脱壳方式,使用这种方法能脱什么壳取决于操作者的技术水平
,所谓的单步跟踪就是动态调试。
----4. 利用堆栈平衡脱壳
.壳如果想正常运行在宿主程序上就必须要保证堆栈平衡,因此堆栈在壳开始运行时是什么状态,在其运行完毕后,必须要将堆栈还原到这种初始状态,以便继续执行宿主程序。
.由于利用这个特征进行脱壳的主要参考系统就是ESP寄存器,因此这种脱壳方法又叫“ESP定律脱壳”。
.利用堆栈平衡脱壳的操作步骤:
A 先按快捷键[F8]单步一次
B
在ESP所指的位置下硬件访问断点
C 运行程序后触发断点,经过简单分析即可找到OEP
脱壳总结:
. 认识各种程序的OEP,是基础中的基础
. 会使用调试器及各种技巧,是必要的基础
. 所有的脱壳方法都可以交叉、交替使用