壳的概念
壳最早出现是一种专用加密软件技术,用于保护程序不被静态分析。
某些病毒木马程序也利用加壳技术来躲避杀毒软件的查杀。
壳是一段专门保护软件不被非法修改或反汇编的程序。它们一般都是先于程序运行,拿到控制权。
加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。
常见的壳主要分两类
-
压缩壳:压缩壳的特点是减少软件体积大小,加密保护不是重点。
常见的压缩壳有:UPX、ASPack、PECompact -
加密壳:最主要的目的是保护程序,一些加密壳除了提供加密功能外,还提供注册机保护功能。
常见的加密壳有:ASProtect、Armadillo(穿山甲)、EXECryptor、Themida
脱壳
脱壳就是找到程序的入口点OEP,然后dump内存中数据到文件,并修复成一个可运行文件。也就是将加壳后的程序恢复原来状态。脱壳成功的标志是文件能正常运行。
- 手动脱壳主要分四步:
1、查壳:PEiD等查壳工具
2、寻找OEP:通过OD动态调试跟踪到入口处
3、Dump文件:OD、LoadPE等工具读取内存数据并写入文件
4、修复:利用ImportREC等工具修复输入表或手动修复
脱壳方法
一、ESP定律法
ESP定律的原理是堆栈平衡,ESP定律适用于几乎全部的压缩壳,部分加密壳。但是在何时下断点避开校验,何时下断OD才能断下来,这还需要多多总结和多多积累。
- 使用ESP定律追踪OEP的常见步骤:
1、基于ESP原理,我们可以通过F8步进,注意右面寄存器FPU的显示,当有且只有ESP和EIP为红色时,我们可以用ESP定律了。
2、右键ESP后面那个地址,然后选择在数据窗口中跟随。<