jisheng 发表于 2005-12-17 13:41:05

二次内存断点法轻松脱壳 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:26

可以试试这二次内存断点大发。

CorpUlent 发表于 2006-3-17 20:43:22

原理是什么咯

想要飞de更高 发表于 2006-9-6 17:44:08

原帖由 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次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序!

chp1 发表于 2006-9-9 09:37:07

原理是什么咯
页: [1]
查看完整版本: 二次内存断点法轻松脱壳 by 沙滩小子