二次内存断点法轻松脱壳 by 沙滩小子
[转帖] 二次内存断点法轻松脱壳 by 沙滩小子【破解作者】 beach
【作者邮箱】 [email protected]
【作者主页】 bbs.chinadev.net
【使用工具】 OllyDbg.V1.10
【破解平台】 Win9x/NT/2000/XP
【软件名称】 简单宝贝脱机版
【软件简介】 一个倚天网络游戏的外挂
【加壳方式】 PC Shrinker 0.29 - 0.71 -> Virogen
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
一.PEID查壳是PC Shrinker 0.29 - 0.71 -> Virogen.这个壳比较少见.可以用我最喜欢的内存断点法搞掂它.
二.OD忽略所有异常.隐藏OD.载入程序.
004BCEFC j>9C pushfd //程序入口点.
004BCEFD 60 pushad
004BCEFE BD C0950B00 mov ebp,0B95C0
004BCF03 01AD 4C3A4000 add dword ptr ss:,eb>
004BCF09 FFB5 483A4000 push dword ptr ss:
004BCF0F 6A 40 push 40
004BCF11 FF95 803A4000 call dword ptr ss:
.........................................................................
ALT+M打开内存映射
内存映射,项目 21
地址=7C800000
大小=00001000 (4096.)
物主=kernel32 7C800000 (自身)
区段=
包含=PE header //一次内存断点.F9运行程序
类型=Imag 01001040
访问=RWE
初始访问=RWE
.................................................................
7C930806 66:8139 4D5A cmp word ptr ds:,5A4D //程序中断在这里.二次内存断点
7C93080B 75 1D jnz short ntdll.7C93082A
7C93080D 8B51 3C mov edx,dword ptr ds:
7C930810 81FA 00000010 cmp edx,10000000
7C930816 73 12 jnb short ntdll.7C93082A
................................................................................
内存映射,项目 14
地址=00401000
大小=000A2000 (663552.)
物主=jdbb_tj00400000
区段=pcs1
包含=code //在此设断.SHIFT+F9运行程序
类型=Imag 01001002
访问=R
初始访问=RWE
.........................................................................
0049FF04 55 push ebp //OEP处.用OD插件脱壳搞掂
0049FF05 8BEC mov ebp,esp
0049FF07 83C4 F0 add esp,-10
0049FF0A B8 E4FA4900 mov eax,jdbb_tj.0049FAE4
0049FF0F E8 EC63F6FF call jdbb_tj.00406300
--------------------------------------------------------------------------------
【破解总结】
二次内存断点法可以比较简快速找到OEP.我一直喜欢这样用..嘻嘻
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 可以试试这二次内存断点大发。 原理是什么咯 原帖由 xingbing 于 2005-12-17 14:30 发表
可以试试这二次内存断点大发。
让我来做一个假设吧,假设我是一个壳的作者。一个EXE文件的有code段,data段,rsrc段.....依次排列在你的内存空间中,那么我会怎么解码呢?呵呵~我比较笨一点,我会先将code段解码,然后再将data段解压,接着是rsrc段......那么聪明的你不难发现,只要你在data断或者rsrc段下内存访问断点,那么中断的时候code段就已经解压完毕了。这时我们再对code段下内存反问断点,不就可以到达OEP了吗?
这里注意上面虽然下了两次内存访问断点,但是本质是不一样的,目的也是不一样的。
1.对data段下内存访问断点而中断是因为内存写入中断,目的是断在对对data段的解压时,这时壳要对data段写数据,但是code段已经解压完毕。
2.对code段下内存访问断点而中断是因为内存执行中断,目的当然就是寻找OEP了。
总结一下:如果我们知道壳在什么地方对code段解压完毕我们就可以使用内存断点,找到OEP。如果不知道,那么我们就依靠2次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序! 原理是什么咯
页:
[1]