通常在软件的破解过程中,会遇到代码经过混淆器混淆的程序,此类混淆器可以称之为壳,壳又可分为压缩壳(常见的有UPX、北斗、ASDPack、Npack、PECompact等)和保护壳(如强壳Safengine、VMprotect、winlicense、Themida等),压缩壳作用是把程序进行体积缩小化处理,保护壳主要作用是混淆或加密代码防止他人进行逆向程序、破解程序。我们可以通过一些侦壳程序进行识别,但有些壳会采用伪装技术来混淆侦壳程序。
下面还是使用原来的课件,本次我们通过查看堆栈进行脱壳,先来下载以下这个课件把。
DIE查壳工具:https://files.cnblogs.com/files/LyShark/DiE_0.64.zip
课件内容:https://files.cnblogs.com/files/LyShark/ASPack.zip
1.直接开搞,将课件拖入OD,直接诶运行OD让程序跑起来。
2.观察堆栈窗口,找到下面的部分,SE处理程序。
3.堆栈窗口,向上找,到达这个段的断首位置。我们会看到几个标红的位置,全部记录下来。
4.逐个排除,这里有个小技巧,我们不要选择kernel32.xxx,user32.xxx 这种的,然后尽量选择地址靠后的。
0012FF14 |0047400A 返回到 ASPack.0047400A
0012FF24 |0046BBD1 返回到 ASPack.0046BBD1 来自 ASPack.00473FC3
0012FF38 |0045DCC5 返回到 ASPack.0045DCC5 来自 ASPack.0046BBBC
0012FF78 |76309B35 返回到 IMM32.76309B35 来自 kernel32.InterlockedDecrement
0012FF88 |76302B56 返回到 IMM32.76302B56 来自 IMM32.ImmUnlockClientImc
5.先看第一个,右键-> 反汇编窗口跟随。
6.然后在反汇编窗口中向上托,到断首,看是不是OEP,很明显这个不是。
7.这里直接看第三个把,节约篇幅跳过第二个了,第二个不是。
8.反汇编窗口,向上推,推到断首,看到了SE处理程序字样,没错,就是OEP。
9.下一步是,让其下次运行程序后,停在这个入口地指处,直接点击右键,数据窗口中跟随。
10.直接在数据窗口的开头出,下一个硬件执行断点。
11.重新载入程序,直接点击运行按钮,让程序跑起来,默认程序会断下,断在OEP的位置。
12.直接脱掉就好。