其实这是09年的东西了,比较简单的变形壳,是我当时申请LCG时的考题。最近无意中被我从邮箱内翻出来了,同时又联想到最近fly兄的unpack论坛永久关闭的消息,权当对逝去青春的祭奠了。
考题
脱文
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以上系统可能会存在兼容问题
原题文件