飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2347|回复: 0

[原创] 对飘云老大的CM1的手动脱壳(FSG2.0)

[复制链接]
  • TA的每日心情
    郁闷
    2016-6-2 14:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-2-24 12:50:17 | 显示全部楼层 |阅读模式
    原帖:https://www.chinapyg.com/viewthr ... page%3D1&page=1
    查壳:FSG2.0
    脱壳:很多方法,我常用2种;
    1,脚本脱壳,FLY老大的脚本,直接找到OEP。
    2,手动,F8一直步过,找到类似:
    004001CF   /75 03           jnz short CrackMe0.004001D4 //跳到004001D4,正好漏过jmp dword ptr ds:[ebx+C]
    004001D1   |FF63 0C         jmp dword ptr ds:[ebx+C] //这就是跳到OEP
    004001D4   \50              push eax

    图1:
    然后DUMP.
    这里不要关OD,因为一会还要用的.
    这都很简单,主要是修复问题,这之前,我对找RAV,SIZE很不解.看了很多教程也没看明白,我这里通俗说一次,希望给我这样的菜鸟帮助.
    好了,言归正传.
    DUMP后就是修复iat.
    现在我们去找RAV,SIZE.
    首先再次回到没关闭的OD
    注意:这里我说下找RAV的具体方法
    004689DC    55              push ebp                                     ; This is the OEP! Found By: fly
    004689DD    8BEC            mov ebp,esp
    004689DF    83C4 F0         add esp,-10
    004689E2    B8 E4874600     mov eax,CrackMe0.004687E4
    004689E7    E8 74D2F9FF     call CrackMe0.00405C60                       ; SFX 代码真实入口点
    004689EC    A1 90A94600     mov eax,dword ptr ds:[46A990]
    004689F1    8B00            mov eax,dword ptr ds:[eax]
    004689F3    E8 B4AAFEFF     call CrackMe0.004534AC
    004689F8    A1 90A94600     mov eax,dword ptr ds:[46A990]
    004689FD    8B00            mov eax,dword ptr ds:[eax]
    004689FF    BA 3C8A4600     mov edx,CrackMe0.00468A3C
    00468A04    E8 B3A6FEFF     call CrackMe0.004530BC
    00468A09    8B0D 84A74600   mov ecx,dword ptr ds:[46A784]                ; CrackMe0.0046BC08
    00468A0F    A1 90A94600     mov eax,dword ptr ds:[46A990]
    00468A14    8B00            mov eax,dword ptr ds:[eax]
    00468A16    8B15 C07E4600   mov edx,dword ptr ds:[467EC0]                ; CrackMe0.00467F0C
    00468A1C    E8 A3AAFEFF     call CrackMe0.004534C4
    00468A21    A1 90A94600     mov eax,dword ptr ds:[46A990]
    ---------------
    00468A09    8B0D 84A74600   mov ecx,dword ptr ds:[46A784]                ; CrackMe0.0046BC08
    看到这样的代码了嘛.调用了一个函数在[46A784] ,括号内的就该内存地址调用该函数.
    那么就在该位置下硬件断点.
    补充下:其实后面没有调用函数的代码行也可以达到同样效果,至于为啥,那我就不知道了。这时我们再看内存窗口:


    好,关键时候到了,现在开始找RAV.
    向上一直到出了调用函数区.
    即如这样的形式:
    0046A6C8  DE72AB5D
    0046A6CC  3FD1A855
    0046A6D0  00468170  CrackMe0.00468170//6A6D0 就是RAV
    0046A6D4  00468184  CrackMe0.00468184

    向下一直也出调用函数区:
    如:
    0046AB00  00406B20  CrackMe0.00406B20
    0046AB04  00406C08  CrackMe0.00406C08  //记下0046AB04 ,这个计算SIZE
    0046AB08  00000000
    0046AB0C  00000000
    至于SIZE一般是
    0046AB04-0046A6D0=434
    就是刚才那个末地址-初地址
    算出的地址比较小,我这里也不知道为什么不能用,因此我就放大,最后放大5000,成功,因此大家可以多试几次SIZE.

    好了到此基本就可以正确修复了.
    首先,打开importREC,选择CM1.
    图2

    改:
    OEP=689DC RVA=6A6D0 SIZE=5000
    搜索:IAT,完成.
    然后,再次改RVA=6A6D0 SIZE=5000
    获得输入信息,完成.
    然后,CUT无效函数.
    最后,抓取修复文件.
    运行程序OK...
    查壳...Borland Delphi 6.0 - 7.0 无壳,到此结束.
    请高手指点,谢谢.

    [ 本帖最后由 指舞瞬间 于 2008-2-24 12:56 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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