ღ Miranda

脱壳常用方法

加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行,为了便于软件逆向分析,必须先对软件脱壳。

软件加壳的概念

加壳其实是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。


壳的种类

壳分为压缩壳和加密壳,压缩壳的特点是减小软件体积大小,加密保护不是重点,加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。

常见的压缩壳

  1. UPX(官方主页:http://upx.sourceforge.net):UPX是开源的,它的开发近乎完美,它不包含任何反调试或保护策略。
  2. ASPack(官方主页:http://www.aspack.com):ASPack可压缩Win32位可执行文件EXE、DLL、OCX,具有很好的兼容性和稳定性。
  3. PECompact(官方主页:http://www.bitsum.com)等。

常见的加密壳

  1. ASProtect(官方主页:http://www.aspack.com):ASProtect很注重兼容性和稳定性,采用的反调试策略较少。此壳使用广泛,研究较多,有些版本有脱壳机。
  2. EXECrptor(官方主页:http://www.strongbit.com):EXECrptor的Anti-Debug比较强大,做的比较隐蔽,并有虚拟机功能。
  3. Armadillo(官方主页:http://www.siliconrealms.com):Armadillo是一款应用较广的加密壳。
  4. Themida(官方主页:http://www.oreans.com): Themida 是Oreans的一款商业保护软件,加密强度很高。最大的特点就是其虚拟机保护技术,因此应在程序中擅用SDK,将关键的代码用虚拟机保护起来, Themida还有一个系列产品WinLicense主要多一个协议,可以设定使用时间、运行次数等功能,两者核心保护是一样的。
  5. EncryptPE(官方主页:http://www.encryptpe.com):EncryptPE能防静态分析修改,反动态跟踪调试,有效地保护软件,防止盗版。EncryptPE采用众多加密保护手段:随机加密算法、CRC 校验、变形、代码替换、进程注入、APIHOOK、多线程、调试运行、全程监控等。
  6. TTProtect(官方主页:http://www.ttprotect.com):TTProtect是后起之秀,加密强度非常高,吸收众多保护工具的优点,并加入了独有的特色功能;使用了特别的反跟踪方法,使得对保护对象的非法调试非常困难,并且对保护代码进行全局优化、乱序和混淆,使得非法分析相当困难。

常用脱壳办法

单步跟踪法

  1. OllyDBG载入。
  2. 按F8单步向下跟踪,红线会指向跳转方向,向下跳的继续,向上跳的语句就断到后一句,总之只向下跳不向上跳。
  3. 一般会遇到大段跳转如jmp xxx.004012D4就能跳到OEP。
  4. 如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑 飞,这样很快就能到程序的OEP,比如:

ESP定律

  1. 开始F8单步,注意观察OD右上角的寄存器中ESP寄存器颜色突变为红色(一般是pushad后一句)。
  2. 拷贝此时ESP寄存器的地址命令执行dd 地址,在左下角得到的行中加入硬件WORD断点。
  3. 按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

内存镜像法

  1. 按ALT+M,打开内存镜像,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运 行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也 就是00401000处),按F2下断点。然后按SHIFT+F9(或者是在没异常情况下按F9), 直接到达程序OEP。

一步到达法

  1. 开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处。
  2. 来到大跳转处,点下F8,到达OEP。

模拟跟踪法

  1. ALT+M打开内存镜像,找到(包含那一列中出现SFX,imports,relocations或者SFX,输入表,重定位)。
  2. 若地址为00xxxxxx在命令行下输入tc eip < 00xxxxxx,回车,提示正在跟踪。

SFX法

  1. 设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
  2. 切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,重新载入。

有时候到达了OEP会显示一堆空代码,这时候要右键点分析即可。

发表评论

电子邮件地址不会被公开。