其实这是09年的东西了,比较简单的变形壳,是我当时申请LCG时的考题。最近无意中被我从邮箱内翻出来了,同时又联想到最近fly兄的unpack论坛永久关闭的消息,权当对逝去青春的祭奠了。

考题

111

脱文
1.修复 oep stolen code
到OEP很简单 ESP定律 shift+f9 2次只接到OEP
有2种方法修复oep stolen code 1种去掉花指令 把代码补到OEP前 2就是整理代码后直接此处DUMP
整理下代码大概是

004C5C0D    55              push    ebp
004C5C11    8BEC            mov     ebp, esp
004C5C16    83C4 F0         add     esp, -10
004C5C1C    B8 D8D44900     mov     eax, 0049D4D8
004C5C24    E8 8305F4FF     call    004061AC
004C5C29    A1 DCF44900     mov     eax, dword ptr [49F4DC]
004C5C31    8B00            mov     eax, dword ptr [eax]
004C5C36    E8 5529F9FF     call    00458590
jmp     0049D7F4               //跳向的是FOEP

我比较懒选择后者 修复后DUMP下来
2.dump iat and fix

首先OD加载 停在

004C5087 >  60              pushad                                   ;

前几句就有花 但是总体看上去是PESPIN 先设置 除了Invalid or privileged instruction之外其他全选
按2次SHIFT+F9 下断 bp LoadLibraryA SHIFT+F9 取消断点后 ALT+F9回程序领空

004C5A4D    85C0            test    eax, eax                         ; kernel32.7C800000
004C5A4F    0F84 28060000   je      004C607D
004C5A55    50              push    eax
004C5A56    E8 C5FCFFFF     call    004C5720
004C5A5B    2BD2            sub     edx, edx
004C5A5D    F9              stc

004C5A4D 处停下 向下到 004C5AA6 处F4 CTRL+F9 到达

004C579E    60              pushad
004C579F    0BFF            or      edi, edi
004C57A1    75 16           jnz     short 004C57B9
004C57A3    8B9D D9224000   mov     ebx, dword ptr [ebp+4022D9]
004C57A9    2D 01000000     sub     eax, 1
004C57AE    8B0483          mov     eax, dword ptr [ebx+eax*4]
004C57B1    0385 D1224000   add     eax, dword ptr [ebp+4022D1]
004C57B7    EB 72           jmp     short 004C582B
004C57B9    8B9D D5224000   mov     ebx, dword ptr [ebp+4022D5]
004C57BF    8A47 FF         mov     al, byte ptr [edi-1]
004C57C2    24 7F           and     al, 7F
004C57C4    8885 2B234000   mov     byte ptr [ebp+40232B], al
004C57CA    FF37            push    dword ptr [edi]
004C57CC    8F85 34234000   pop     dword ptr [ebp+402334]
004C57D2    2BC9            sub     ecx, ecx
004C57D4    80BD E5264000 C>cmp     byte ptr [ebp+4026E5], 0CC
004C57DB    75 05           jnz     short 004C57E2
004C57DD    74 01           je      short 004C57E0
004C57DF    68 8BEC8B3B     push    3B8BEC8B
004C57E4    03BD D1224000   add     edi, dword ptr [ebp+4022D1]

花指令有点多 清理下后就清楚多了
F4运行到 004C57EF E8 1B0B0000 call 004C630F
向下

004C5833   /76 35           jbe     short 004C586A
004C5835   |03BD C9224000   add     edi, dword ptr [ebp+4022C9]
004C583B   |3BF8            cmp     edi, eax
004C583D   |76 2B           jbe     short 004C586A

改为

004C5833   /EB 35           jmp     short 004C586A
004C5835   |03BD C9224000   add     edi, dword ptr [ebp+4022C9]
004C583B   |3BF8            cmp     edi, eax
004C583D   |EB 2B           jmp     short 004C586A

向下

004C5877    C3              retn 处F4

继续向下看
分析下去 来到

004C5B20    FF6424 FC       jmp     dword ptr [esp-4]

这里壳开始猥琐IAT了 住手 – -||!
修改为

jmp      004C5B73
004C5B73    8902            mov     dword ptr [edx], eax

这样就跳过了IAT加密 拿IMREC dump下地址就填004C5C0D 抓取后发现指针全为真
FIXED主程序后正常运行 over~~~~~

注:因为是以前的东西,win7以上系统可能会存在兼容问题
原题文件

脱壳后文件

留言

请输入验证码 * 请输入正确的验证码