脱壳基础教程

相关概念

1.加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。

2.OEPOEP:(Original Entry Point),程序的入口点。软件加壳一般隐藏了程序真实的OEP(或者用了假的OEP), 我们需要寻找程序真正的OEP,才可以完成脱壳。
一般加壳程序在使用OllyDbg等动态调试工具时,会停在壳的预处理块。即处在对于程序原始代码块的解压或解密操作之前,在运行完程序自脱壳模块后,会停留在程序加壳之前的OEP位置,此时是dump程序的最佳时期。脱壳时在真实OEP处下int3断点,就可以捕捉到程序代码段完全恢复的状态。因此,寻找加壳程序的正确OEP,也成了手动脱壳时的第一要务。

3. IATIAT:(Import Address Table),导入地址表。由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL中。当PE文件被装入内存的时候,Windows装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成。其中导入地址表就指示函数实际地址。 多数加壳软件在运行时会重建导入地址表,因此获取加壳程序正确的导入地址表也是手动脱壳操作中的一个关键问题。

4.从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。

5.软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉。在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为"壳"了。软件加壳是作者写完软件后,为了保护自己的代码或维护软件产权等利益所常用到的手段。有很多加壳工具,既然有盾,自然就有矛,脱壳即去掉软件所加的壳,软件脱壳有手动脱和自动脱壳之分。

脱壳的基本步骤

查壳(PEID、FI、PE-SCAN)

寻找OEP(OD)

脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)

修复(Import REConstructor)

脱壳方法

单步跟踪法

       单步跟踪法就是利用OD的单条指令执行功能,从壳的入口一直执行到OEP,最终通过这个OEP将原程序dump出来。然当,在单步跟踪的时候需要跳过一些不能执行到的指令。
  使用单步跟踪法追踪OEP的常见步骤:
  1、用OD载入待脱壳文件,如果出现压缩提示,选择“不分析代码”;
  2、向下单步跟踪,实现向下的跳转;
  3、遇到程序往上跳转的时候(包括循环),在回跳的下一句代码上单击并按键盘上的“F4”键跳过回跳指令;
  4、OD中的绿色线条表示跳转没有实理,不必理会,红色线条表示跳转已经实现;
  5、如果刚载入程序的时候,在附近有一个CALL指令,那么就要按键盘上的“F7”键跟进这个CALL内,不然程序很容易运行起来;
  6、在跟踪的时候,如果执行某个CALL指令后就运行,一定要按键盘上的“F7”键进入这个CALL之内再单步跟踪;
  7、遇到在popad指令下的远转移指令时,要格处注意,因为这个远转移指令的目的地很可能就是OEP。

ESP定律法

       使用ESP定律追踪OEP的常见步骤:
  1、将待脱壳程序载入到OD中,开始就按键盘上的“F8”键单步跟踪一步,这时如果看到OD右边的寄存器窗口中的ESP寄存器的值有没有变为红色,如果发现ESP寄存器的值变为红色,执行第2步;
  2、在OD的命令行窗口中执行命令hrXXXXXXXX,xxxxxxxx就是变为红色的ESP寄存器的值,在输入命令之后,一定不要忘记按键盘上的回车键;
  3、按键盘上的“F9”键让程序运行起来;
  4、使用单步跟踪的方法跟踪到OEP即可。

二次断点法(内存镜像法)

       二次断点是有技巧的下两个断点,在两个断点之后就可以很轻松的找到OEP。
  使用二次断点法追踪OEP的常见步骤:
  1、将待脱壳程序载入到OD中,单击OD的“选项”菜单下的“调试设置”命令,在弹出的“调试选项”对话框中切换到“异常”选项卡,勾选该选项卡下的所有复选框,也就是忽略所有异常;
  2、按键盘上的“ALT+M”组合键打开OD的内存窗口;
  3、在OD的内存窗口中找到“.rsrc”区段,单击该区段后按键盘上的“F2”键在该区段上下一断点;
  4、按“Shift+F9”让程序运行到断点心处,而后再次打开OD的内存窗口,这次在“.rsrc”区段上面的“.code”区段(有的时候就是“.text”)上下一个断点;
  5、按“shift+F9”让程序运行到第二次下的断点处,然后单步跟踪既可以来到OEP。

末次异常法

       在脱壳方法中,末次异常法又被称为最后一次异常法,这是最基础的脱壳技术之一。
  使用末次异常法追踪OEP的常见步骤:
  1、将待脱壳程序载入到OD中,单击OD的“选项”菜单,在弹出的菜单中单击“调试设置”命令,在随后弹出的“调试选项”对话框中切换到“异常”选项卡,清除该选项卡下所有复选框,也就是不忽略任何异常;
  2、连续按键盘上的“Shift+F9”组合键让程序运行起来,记录按键的次数X;
  3、回到OD中,按键盘上的“Ctrl+F2”组合键重新载入程序,按X-1次“Shift+F9”组合键;
  4、在OD右下角窗口中找到“SE句柄”或是“SE处理程序”,记录此处的内存地址;
  5、在OD的反汇编窗口中跟随到上一步记录下的内存地址,并在此内存地址处下一个断点;
  6、按键盘上的“Shift+F9”组合键让程序运行到上一步下的断点处,按键盘上的“F2”键取消此处的断点;
  7、使用单步跟踪法追踪到OEP。

模拟跟踪法

       模拟脱壳法就是模拟单步跟踪来进行查找OEP。
  模拟跟踪法的常见步骤:
  1、将待脱壳程序载入OD中,先简单的跟踪一下程序,看看有没有SEH暗桩;
  2、按键盘上的“ALT+F9”打开OD的内存窗口,找到“SFX,输入表,资源”的行,并记录此行的内存地址;
  3、在OD的命令行窗口执行命令“tc   eip<上一步中记录下的地址”,命令执行后就会跟踪到OEP。

SFX自动脱壳法

       在OD中,不但可以利用模拟跟踪来代替单步跟踪进行脱壳,还有一种SFX自动脱壳的方法也可以节省劳动力,并能快速有效的将程序的壳脱掉。
  使用SFX自动脱壳法脱壳的常见步骤:
  1、将OD设置为忽略所有异常;
  2、在OD的“调试选项”对话框的“SFX”选项卡中选择“字节模式跟踪实际入口”选项并确定;
  3、将待脱壳程序载入OD,待程序载入完成后,会直接停在OEP处。

出口标志法

       前面几个脱壳方法中有一个共同点,就是在单步跟踪到popad指令后面不远处的jmp指令的时候,就可以大胆的判断这个jmp指令的目的地址就是OEP。原因很简单,popad指令用于将壳运行之前保存的环境恢复,使原程序能正常运行。有些壳的popad指令很少,我们就可以查看被这种壳加壳的程序的所有popad指令,找到后面存在jmp指令的popad指令,然后来到其后的jmp指令的目的地址,这很可能就是OEP,然后就可以进行dump脱壳了。
  使用出口标志法脱壳的常见步骤:
  1、将待脱壳程序载入OD中,在OD的反汇编客人口中单击鼠标右键,在弹出的右键菜单中单击“查找”→“所有命令”,在弹出的输入框中输入“popad”并按“查找”按钮;
  2、逐一尝试跟踪查找到的所有“popad”指令,最终达到程序的OEP。

使用脱壳脚本辅助脱壳

       在脱壳的时候,使用模拟跟踪法可以让OD代替我们单步跟踪程序直到OEP,这样大大提高了脱壳的效率。但是模拟跟踪法并不能跟踪到一些较强的壳的OEP,这时我们可以使用高手们写的脱壳脚本来帮助我们完成脱壳工作,使用脱壳脚本来脱壳要比手动跟踪方便得多。脱壳脚本就是高手们为了方便自己或他人脱壳,把自己手动脱壳的步骤记录下来,保存的一个文本文档。虽然脱壳脚本是一个文本文档,可以使用记事本将其打开,但是轻易不要用这种方式修改脱壳脚本,因为直接修改脱壳脚本,很可能造成脱壳脚本不能正确完成对应的脱壳工作。

使用脱壳工具脱壳        

       超级巡警脱壳工具的工作方法:
  超级巡警脱壳工具会自动侦测待脱壳程序所加的壳头,从而判断出带脱壳程序是用哪种壳程序加壳的。如果超级巡警脱壳工具支持对该壳的脱壳,就可以很方便的将程序的壳脱掉;如果不支持对该壳的脱壳,则会给我们一个简单明了的提示。
如恒大所说新手尽量使用脱壳机脱壳。

常用的脱壳工具:

1、文件分析工具(侦测壳的类型):Fi,GetTyp,peid,pe-scan,

2、OEP入口查找工具:SoftICE,TRW,ollydbg,loader,peid

3、dump工具:IceDump,TRW,PEditor,ProcDump32,LordPE

4、PE文件编辑工具PEditor,ProcDump32,LordPE

5、重建Import Table工具:ImportREC,ReVirgin

6、ASProtect脱壳专用工具:Caspr(ASPr V1.1-V1.2有效),Rad(只对ASPr V1.1有效),loader,peid(1)Aspack:用的最多,但只要用UNASPACK或PEDUMP32脱壳就行了

(2)ASProtect+aspack:次之,国外的软件多用它加壳,脱壳时需要用到SOFTICE+ICEDUMP,需要一定的专业知识。

(3)Upx:可以用UPX本身来脱壳,但要注意版本是否一致,用-D参数

(4)Armadill:可以用SOFTICE+ICEDUMP脱壳,比较烦

(5)Dbpe:国内比较好的加密软件,新版本暂时不能脱,但可以破解

(6)NeoLite:可以用自己来脱壳

(7)Pcguard:可以用SOFTICE+ICEDUMP+FROGICE来脱壳

(8)Pecompat:用SOFTICE配合PEDUMP32来脱壳,但不要专业知识

(9)Petite:有一部分的老版本可以用PEDUMP32直接脱壳,新版本脱壳时需要用到SOFTICE+ICEDUMP,需要一定的专业知识

(10)WWpack32:和PECOMPACT一样其实有一部分的老版本可以用PEDUMP32直接脱壳,不过有时候资源无法修改,也就无法汉化,所以最好还是用SOFTICE配合 PEDUMP32脱壳 我们通常都会使用Procdump32这个通用脱壳软件,它是一个强大的脱壳软件,他可以解开绝大部分的加密外壳,还有脚本功能可以使用脚本轻松解开特定外壳的加密文件。另外很多时候我们要用到exe可执行文件编辑软件ultraedit。我们可以下载它的汉化注册版本,它的注册机可从网上搜到。ultraedit打开一个中文软件,若加壳,许多汉字不能被认出ultraedit打开一个中文软件,若未加壳或已经脱壳,许多汉字能被认出ultraedit可用来检验壳是否脱掉,以后它的用处还很多,请熟练掌握例如,可用它的替换功能替换作者的姓名为你的姓名注意字节必须相等,两个汉字替两个,三个替三个,不足处在ultraedit编辑器左边用00补。


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值