aspr 2.11 ske 加壳之棋天大圣2.2主程序脱壳
 
破文作者:8100303
发表时间:2006-5-29 17:53
链接地址:http://www.unpack.cn/viewthread.php?tid=4790
作者声明:只是感兴趣,并无其他目的,一点心得,不妥之处还请各位大侠指正。感谢VolX的脚本。英文不好,见谅。
        1、用脚本找oep:
        There are stolen code at the OEP:
        00ED0257    55              push    ebp
        00ED0258    336C24 08       xor     ebp, [esp+8]
        00ED025C    336C24 28       xor     ebp, [esp+28]
        00ED0260    EB 02           jmp     short 00ED0264
        00ED0262    CD20 1BED23ED   vxdjump ED23ED1B
        00ED0268    8D6C0C 1A       lea     ebp, [esp+ecx+1A]
        00ED026C    2E:EB 01        jmp     short 00ED0270
        00ED026F    F3:             prefix rep:
        00ED0270    2BE9            sub     ebp, ecx
        There are 真正 OEP:
        0043E830  - E9 221AA900     jmp     00ED0257
        0043E835    195C89 B9       sbb     [ecx+ecx*4-47], ebx
        0043E839    2F              das
        0043E83A    A2 8D423C69     mov     [693C428D], al
        0043E83F    B7 03           mov     bh, 3
        0043E841    68 F9D8C601     push    1C6D8F9
        0043E846    8904E6          mov     [esi], eax
        0043E849    48              dec     eax
        0043E84A    95              xchg    eax, ebp
        2、再重新运行,用脚本修复iat。
      
        3、iat修复完成后,修复stolen code然后dump并修复输入表,
        修复stolen code有两个方法
        一是手动修复,结合一个相同语言程序的oep,还原代码到原oep,适合时间充裕而又苛意追求完美的人
        二是直接粘贴区段。我选择了后者,用lordpe区域转存,在dump的程序中粘贴stolen code和VM必须的区段:
      
        内存映射
        地址       大小    ? 宿主       区段       包含            类型   访问      初始访问  映射为
        00CD0000   00043000                                        Priv   RWE       RWE
        00D20000   00014000                                        Priv   RW
        00EA0000   00001000                                        Priv   RWE       RWE
        00ED0000   00004000                                        Priv   RWE       RWE
        00EF0000   00001000                                        Priv   RWE       RWE
        00F00000   00001000                                        Priv   RWE       RWE
        00F10000   00001000                                        Priv   RWE       RWE
        00F20000   00001000                                        Priv   RWE       RWE
        00F30000   00001000                                        Priv   RWE       RWE
        00F40000   00001000                                        Priv   RWE       RWE
        00F50000   00010000                                        Priv   RWE       RWE
      
        4、壳有1处检验,解决之:
        00CF8A58   /EB 01           jmp     short 00CF8A5B
        00CF8A5A   |90              nop
        00CF8A5B   \8B73 30         mov     esi, [ebx+30]
        00CF8A5E    8B7B 14         mov     edi, [ebx+14]
        00CF8A61    A1 F037D000     mov     eax, [D037F0]
        00CF8A66    8B40 34         mov     eax, [eax+34]
        00CF8A69    FFD0            call    eax 
        00CF8A6B    2945 0C         sub     [ebp+C], eax
        00CF8A6E    8B45 0C         mov     eax, [ebp+C]
        00CF8A71    2B43 18         sub     eax, [ebx+18]
        00CF8A74    2B43 68         sub     eax, [ebx+68]
        00CF8A77    8945 FC         mov     [ebp-4], eax
        00CF8A7A    8D43 24         lea     eax, [ebx+24]
        00CF8A7D    8945 F8         mov     [ebp-8], eax
        00CF8A80    85FF            test    edi, edi
        00CF8A82    76 38           jbe     short 00CF8ABC
        00CF8A84    EB 01           jmp     short 00CF8A87
        00CF8A86    C7              ???                                      ; 未知命令
        00CF8A87    8B45 F8         mov     eax, [ebp-8]
        00CF8A8A    0FB600          movzx   eax, byte ptr [eax]
        00CF8A8D    8B5483 40       mov     edx, [ebx+eax*4+40]
        00CF8A91    8BC6            mov     eax, esi
        00CF8A93    FFD2            call    edx
        00CF8A95    3B45 FC         cmp     eax, [ebp-4]
        00CF8A98    75 1A           jnz     short 00CF8AB4
        00CF8A9A    8B45 10         mov     eax, [ebp+10]
        00CF8A9D    50              push    eax
        00CF8A9E    8B45 14         mov     eax, [ebp+14]
        00CF8AA1    50              push    eax
        00CF8AA2    E8 19FAFFFF     call    00CF84C0
        00CF8AA7    50              push    eax
        00CF8AA8    8BCE            mov     ecx, esi
        00CF8AAA    8B55 18         mov     edx, [ebp+18]
        00CF8AAD    8BC3            mov     eax, ebx
        00CF8AAF    E8 D4FDFFFF     call    00CF8888
        00CF8AB4    4F              dec     edi
        00CF8AB5    0373 6C         add     esi, [ebx+6C]
        00CF8AB8    85FF            test    edi, edi
        00CF8ABA  ^ 77 CB           ja      short 00CF8A87
        上面校验,下面就是 error code 111 了。
        00CF8ABC    68 D88ACF00     push    0CF8AD8                          ; ASCII "111",CR,LF
        00CF8AC1    E8 66C3FEFF     call    00CE4E2C
        00CF8AC6    5F              pop     edi
        00CF8AC7    5E              pop     esi
        00CF8AC8    5B              pop     ebx
        00CF8AC9    59              pop     ecx
        00CF8ACA    59              pop     ecx
        00CF8ACB    5D              pop     ebp
        00CF8ACC    C2 1400         retn    14
      
        5、破解:不值一提,略。
        
上一篇   下一篇