飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6019|回复: 4

二次内存断点法轻松脱壳 by 沙滩小子

[复制链接]
  • TA的每日心情
    开心
    2017-2-23 16:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2005-12-17 13:41:05 | 显示全部楼层 |阅读模式
    [转帖] 二次内存断点法轻松脱壳 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:[ebp+403A4C],eb>
    004BCF09     FFB5 483A4000          push dword ptr ss:[ebp+403A48]
    004BCF0F     6A 40                  push 40
    004BCF11     FF95 803A4000          call dword ptr ss:[ebp+403A80]
    .........................................................................
    ALT+M打开内存映射
    内存映射,项目 21
    地址=7C800000
    大小=00001000 (4096.)
    物主=kernel32 7C800000 (自身)
    区段=
    包含=PE header                  //一次内存断点.F9运行程序
    类型=Imag 01001040
    访问=RWE
    初始访问=RWE
    .................................................................
    7C930806     66:8139 4D5A           cmp word ptr ds:[ecx],5A4D   //程序中断在这里.二次内存断点
    7C93080B     75 1D                  jnz short ntdll.7C93082A
    7C93080D     8B51 3C                mov edx,dword ptr ds:[ecx+3C]
    7C930810     81FA 00000010          cmp edx,10000000
    7C930816     73 12                  jnb short ntdll.7C93082A
    ................................................................................
    内存映射,项目 14
    地址=00401000
    大小=000A2000 (663552.)
    物主=jdbb_tj  00400000
    区段=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.我一直喜欢这样用..嘻嘻
    --------------------------------------------------------------------------------
    【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    前天 15:35
  • 签到天数: 1637 天

    [LV.Master]伴坛终老

    发表于 2005-12-17 14:30:26 | 显示全部楼层
    可以试试这二次内存断点大发。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-17 20:43:22 | 显示全部楼层
    原理是什么咯
    PYG19周年生日快乐!

    该用户从未签到

    发表于 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次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-7-18 14:10
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2006-9-9 09:37:07 | 显示全部楼层
    原理是什么咯
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表