破解之多种方法脱ASP壳
工具:PEID-经典查壳工具
OD -动态调试工具
理论知识:所谓壳即软件作者为防止软件被调试破解所用的一种的保护方法,分为压缩壳和加密壳,就安全性和破解 复杂性来说,加密壳要比压缩壳厉害的多。
OD界面:左上角为CPU窗口,分别为地址,机器码,汇编代码,注释
右上角为寄存器窗口
左下角为内存窗口
右下角为当前堆栈情况和注释
经常使用的快捷键:F2:在需要的地方下断点(INT3型断点) F3:选择打开程序
F4:运行到所选择的那一行
F7:单步进入
F8:单步跟踪
F9:执行程序(运行程序)
USHAD (压栈) 代表程序的入口点,
OPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般到这个OEP就在附近
OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们到程序真 正
的OEP,就可以立刻脱壳。
二。开始破解
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:[esi]
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:[esi]
向上的跳转,在向上箭头的下一行下断点,具体这么做:
0040D142 8B06 mov eax,dword ptr ds:[esi]
在这一行上点右键——断点——运行到选定位置
F8继续步进
以下还会遇到几处向上的跳转,仿照上述设置断点即可
一直调试到这里
0040D3A9 8985 A8030000 mov dword ptr ss:[ebp+3A8],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:[ebp+426]
注意:
notepad++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)设置断点(在其上点右键-设置访问中断),颜突出(变红)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论