| 作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教 【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC _____________________________________________________________ 【脱壳过程】:
CI Crypt是个不常见的壳,脱壳比压缩壳稍微复杂点,建议学习过UPX/AsPacK手动脱壳的朋友再来练习这个 脱壳的方法有很多,也可以使用ESP定律。大家先跟随练习,掌握后再去寻找自己的脱壳方法 _____________________________________________________________ 一.EP
用LordPE察看目标文件的PE信息: ImageBase=00570000 SizeOfImage=00075000 设置OllyDbg忽略所有异常选项,用IsDebugPresent插件Hide,清除以前的所有断点
CODE 00571744 3C 20 cmp al,20 //进入OllyDbg后暂停在这 00571746 F5 cmc 00571747 79 01 jns short 0057174A 00571749 F8 clc 0057174A F5 cmc 0057174B F9 stc 0057174C 60 pushad 0057174D C0C1 70 rol cl,70 00571750 E9 1B000000 jmp 00571770
_______________________________________________________ 二.数据恢复
BP VirtualAlloc Shift+F9,中断后取消断点,Alt+F9返回
CODE
0013FD6C 005713CC /CALL to VirtualAlloc from UnPackMe.005713CA 0013FD70 00400000 |Address = 00400000 0013FD74 0006B000 |Size = 6B000 (438272.) 0013FD78 00003000 |AllocationType = MEM_COMMIT|MEM_RESERVE 0013FD7C 00000040 \Protect = PAGE_EXECUTE_READWRITE
我们看到申请的内存地址是00400000
一般EXE文件的基址大多是00400000,而CI Crypt加壳后这个文件基址是ImageBase=00570000 原来CI Crypt加壳后改了基址,运行时要把代码还原的。 多看代码,最好能看明白壳的流程,这样看的多了就能学习到很多知识了。
CODE
005713C0 51 push ecx 005713C1 6A 40 push 40 005713C3 68 00300000 push 3000 005713C8 51 push ecx 005713C9 50 push eax 005713CA FFD3 call near ebx; kernel32.VirtualAlloc 005713CC 59 pop ecx //返回这里 005713CD 85C0 test eax,eax 005713CF 75 13 jnz short 005713E4 005713D1 6A 40 push 40 005713D3 68 00100000 push 1000 005713D8 51 push ecx 005713D9 50 push eax 005713DA FFD3 call near ebx 005713DC 85C0 test eax,eax 005713DE 0F84 4D020000 je 00571631 005713E4 & [1] [2] [3] [4] [5] [6] [7] 下一页
|