脱壳的5个基本方法
1。单步跟踪法破解(最基本)载入PEID,显示:
ASPack 2.12 -> Alexey Solodovnikov
显然是ASPpack2.12版本的壳,今天我们的目标就是它了
OD载入
程序停在
0040D001 > 60 pushad
0040D002 E8 03000000 call NotePad_.0040D00A
0040D007 - E9 EB045D45 jmp 459DD4F7
0040D00C 55 push ebp
0040D00D C3 retn
0040D00E E8 01000000 call NotePad_.0040D014
0040D013 EB 5D jmp short NotePad_.0040D072
pushad:程序入口点
call :为调用即调用NotePad_.0040D00A
这里用先用F8步进,F7进入call,继续F8步进,会遇到向下的箭头
0040D008 /EB 04 jmp short NotePad_.0040D00E
0040D00A |5D pop ebp
0040D00B |45 inc ebp
0040D00C |55 push ebp
0040D00D |C3 retn
0040D00E \E8 01000000 call NotePad_.0040D014
不用管它,我们破解断点只断向上的跳转
到这里注意一下
0040D008 /EB 04 jmp short NotePad_.0040D00E
0040D00A |5D pop ebp
0040D00B |45 inc ebp
0040D00C |55 push ebp
0040D00D |C3 retn
0040D00E \E8 01000000 call NotePad_.0040D014
0040D013 EB 5D jmp short NotePad_.0040D072
0040D015 BB EDFFFFFF mov ebx,-13
注意这个call,要用F7进入,不然就要跑飞(程序运行起来)
继续F8步进,直到
0040D12F /74 2E je short NotePad_.0040D15F
0040D131 |78 2C js short NotePad_.0040D15F
0040D133 |AC lods byte ptr ds:
0040D134 |3C E8 cmp al,0E8
0040D136 |74 0A je short NotePad_.0040D142
0040D138 |EB 00 jmp short NotePad_.0040D13A
0040D13A |3C E9 cmp al,0E9
0040D13C |74 04 je short NotePad_.0040D142
0040D13E |43 inc ebx
0040D13F |49 dec ecx
0040D140 ^|EB EB jmp short NotePad_.0040D12D
0040D142 |8B06 mov eax,dword ptr ds:
向上的跳转,在向上箭头的下一行下断点,具体这么做:
0040D142 8B06 mov eax,dword ptr ds:
在这一行上点右键——断点——运行到选定位置
F8继续步进
以下还会遇到几处向上的跳转,仿照上述设置断点即可
一直调试到这里
0040D3A9 8985 A8030000 mov dword ptr ss:,eax
0040D3AF 61 popad
0040D3B0 75 08 jnz short NotePad_.0040D3BA
0040D3B2 B8 01000000 mov eax,1
0040D3B7 C2 0C00 retn 0C
0040D3BA 68 CC104000 push NotePad_.004010CC
0040D3BF C3 retn
0040D3C0 8B85 26040000 mov eax,dword ptr ss:
注意:
0040D3BA 68 CC104000 push NotePad_.004010CC
程序的OEP
原因:
一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
上面有很大跳转,且存在RETN,可以判定 此处就是程序的OEP。。可以直接脱壳!
操作如下:
在OEP处点右键--用OllyDump脱壳调试进程--入口点地址修正为OEP所在的地址(这里为10cc),重建输入表和方式可以任选一个,点脱壳-保存为1.exe
用PEID查看, 显示
Microsoft Visual C++ 6.0 SPx Method 1
脱壳成功!
2.ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
OD载入,F8,注意观察OD右上角寄存器中的ESP有没有突出(变红色)
注:我们选择ESP是在关键句之后的第一个ESP值
这里看可以看出ESP值是0012FFA4
在OD右下角的命令处输入:DD 0012FFA4 回车
在右下角堆栈情况里找到地址为 0012FFA4数字,点右键--断点--设置硬件访问断点-WORD(DWORD效果一样)
F9运行程序-来到跳转处,按下F8,到达程序OEP
0040D3B0 /75 08 jnz short NotePad_.0040D3BA
0040D3B2 |B8 01000000 mov eax,1
0040D3B7 |C2 0C00 retn 0C
0040D3BA \68 CC104000 push NotePad_.004010CC
0040D3BF C3 retn
脱壳就不做了。大家要在自己电脑试验下!
3.内存镜像法
用OD打开软
点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载入程序
打开内存镜像,找到程序的第一个.rsrc,这个的确定要看物主:NOTEPAD_可以看处是程序的,而其他就是 系统和调用系统的东东
在程序的第一个.rsrc上方CODE处(即地址为0040100)设置断点(在其上点右键-设置访问中断),颜色突出(变红)
然后F9运行程序
这样会到一个地方。F8步进,遇到向上的跳转进行下断,不一会就会到程序的OEP
4.最后一次异常法
用OD打开软件
点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数3
CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数3-1次)
这时你会在OD的右下角看到一个"SE句柄",按CTRL+G,输入“SE句柄”前的地址:0012FFE4回车
在OD右上角的位置下断点(F2),然后F9来到断点处,去掉断点,F8进行步进,来到程序的OEP
5.特别方法
设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP) 我收藏了
慢慢地认真地看! 感谢,收藏有空学习下! 好像有七种吧,呵呵 前面两种会 你也说的很详细
后面三种不会 你却一笔带过·· 对我很有帮助,一定学学,谢楼主 我一种都不会
你水怎么办 我收藏了
慢慢地认真地看! 讲得很详细呀,好好学习一下。 哇哦。楼上的可以说是超级老人
页:
[1]
2