先介绍一下脱壳的基本知识吧!
常见脱壳知识:
1.PUSHAD
(压栈)
代表程序的入口点
2.POPAD
(出栈)
��
一般找到这个
OEP
就在附近拉!
3.OEP
:程序的入口点,软件加壳就是隐藏了
OEP
(或者用了假的
OEP
),
只要我们找到程序真正的
OEP
,就可以立刻脱壳。
开始正式介绍方法啦!!
方法一:
1.
用
OD
载入,不分析代码!
2.
单步向下跟踪
F8
,是向下跳的让它实现
3.
遇到程序往回跳的(包括循环),我们在下一句代码处按
F4
(或者右健单击代码,选择断点
――
运行到所选)
4.
绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.
如果刚载入程序,在附近就有一个
CALL
的,我们就
F7
跟进去,这样很快就能到程序的
OEP
6.
在跟踪的时候,如果运行到某个
CALL
程序就运行的,就在这个
CALL
中
F7
进入
7.
一般有很大的跳转,比如
jmp XXXXXX
或者
JE XXXXXX
或者有
RETE
的一般很快就会到程序的
OEP
。
方法二:
ESP
定理脱壳(
ESP
在
OD
的寄存器中,我们只要在命令行下
ESP
的硬件访问断点,就会一下来到程序的
OEP
了!)
1.
开始就点
F8
,注意观察
OD
右上角的寄存器中
ESP
有没出现。
2.
在命令行下:
dd 0012FFA4(
指在当前代码中的
ESP
地址
)
,按回车!
3.
选种下断的地址,下硬件访问
WORD
断点。
4.
按一下
F9
运行程序,直接来到了跳转处,按下
F8
,到达程序
OEP
,脱壳
方法三:
内存跟踪:
1
:用
OD
打开软件!
2
:点击选项
――
调试选项
――
异常,把里面的忽略全部
√
上!
CTRL+F2
重载下程序!
3
:按
ALT+M,DA
打开内存镜象,找到第一个
.rsrc.
按
F2
下断点,
然后按
SHIFT+F9
运行到断点,接着再按
ALT+M,DA
打开内存镜象,找到
.RSRC
上面的
CODE
,按
F2
下断点!然后按
SHIFT+F9
,直接到达程序
OEP
,脱壳!
方法四:
一步到达
OEP
(前辈们总结的经验)
1.
开始按
Ctrl+F,
输入:
popad
(只适合少数壳,包括
ASPACK
壳),然后按下
F2
,
F9
运行到此处
2.
来到大跳转处,点下
F8
,脱壳之!
方法五:
1
:用
OD
打开软件!
2
:点击选项
――
调试选项
――
异常,把里面的
√
全部去掉!
CTRL+F2
重载下程序!
3
:一开是程序就是一个跳转,在这里我们按
SHIFT+F9
,直到程序运行,记下从开始按
F9
到程序
运行的次数!
4
:
CTRL+F2
重载程序,按
SHIFT+F9
(次数为程序运行的次数
-1
次
5
:在
OD
的右下角我们看见有一个
SE
句柄,这时我们按
CTRL+G
,输入
SE
句柄前的地址!
6
:按
F2
下断点!然后按
SHIFT+F9
来到断点处!
7
:去掉断点,按
F8
慢慢向下走!
8
:到达程序的
OEP
,脱壳!