aspr 2.11 ske加壳之某vb程序脱壳
 
破文作者:8100303
发表时间:2006-5-21 11:12
链接地址:http://www.unpack.cn/viewthread.php?tid=4604
作者声明:只是感兴趣,失误及不妥之处还请各位大侠指出(越来越谦虚了)
        开始前先谢谢VolX和他的脚本。
        一、oep
        寻找oep脚本停在这里:
        012903C4   /EB 01           jmp     short 012903C7
        012903C6   |69FF 74240826   imul    edi, edi, 26082474
        012903CC    EB 02           jmp     short 012903D0
        012903CE    CD20 669C52BA   vxdjump BA529C66
        012903D4    C6              ???                                      ; 未知命令
        到code区段查找命令 jmp 012903C4
        真正的oep:
        00403A84  - E9 3BC9E800     jmp     012903C4
        00403A89    095D 02         or      [ebp+2], ebx
        00403A8C    4B              dec     ebx
        00403A8D    B6 C9           mov     dh, 0C9
        00403A8F    0000            add     [eax], al
        00403A91    0000            add     [eax], al
        00403A93    0030            add     [eax], dh
        00403A95    0000            add     [eax], al
        00403A97    0040 00         add     [eax], al
        修复oep:
        vb程序oep格式如下:
        push  00xxxxxx
        call  00xxxxxx
        这两句下面就是数据了,aspr只抽这2句。
        先第一句,按F8单步,并看堆栈窗口:
        0012FFAE   00000000
        0012FFB2   012903C4
        0012FFB6   00404C90  ASCII "VB5!6&vb6chs.dll"  这里是第一句push的地址
        0012FFBA   0043E33A  FantasyD.0043E33A
        第二句是个call,许多人总结了许多方法找到call的真实目的地,
        其实有一个非常简单的方法:code区段下内存访问断点。道理是什么?想想就知道了。
        这时,code区段下内存访问断点,运行,中断在这里:
        00403A7C  - FF25 44124000   jmp     [401244]                         ; msvbvm60.ThunRTMain
        00403A82    0000            add     [eax], al
        00403A7C就是oep第二句call的地址了。
        oep是:
        push 00404C90
        call 00403A7C
        二、iat
        重新运行程序,运行iat修复脚本,waiting and waiting 修复完成后,到达00403A84,恢复oep:
        push 00404C90
        call 00403A7C
        三、结束
        dump,fix,ok。
        四、破解
        不符合本文标题内容,略。
        
回复:

、这个简单,找一个相同语言的oep,然后对照,一般代码会变花指令,跳转或call用内存断点,如果有跳转到不了后面被抽的代码l,就把前面被抽的nop掉,就行了。一些跳转的距离是固定的,根本不用找,复制二进制代码就行了。关键是有耐心,有时会抽百十行代码。
、thank 其实VB程序找OEP/第二句的Call很简单,在VB的运行库载入后Ctrl+G:ThunRTMain,在其首或者过几行下断后Shift+F9即可.
上一篇   下一篇