首页
社区
课程
招聘
PECompact 2.x -> Jeremy Collake脱壳时候,遇到的一点问题?请帮忙解答。
发表于: 2005-10-19 15:15 6132

PECompact 2.x -> Jeremy Collake脱壳时候,遇到的一点问题?请帮忙解答。

2005-10-19 15:15
6132
先用PEiD侦测出是 PECompact 2.X -> JEREMY COLLAKE,好的!OD+手动Dump!
―――――――――――――――――――――――――――――――――
设置Ollydbg忽略所有的异常选项。
―――――――――――――――――――――――――――――――――
00401000 m>  B8 70314300     mov eax,mypro.00433170   //进入OD后暂停在这
00401005     50              push eax
00401006     64:FF35 0000000>push dword ptr fs:[0]
0040100D     64:8925 0000000>mov dword ptr fs:[0],esp
00401014     33C0            xor eax,eax
00401016     8908            mov dword ptr ds:[eax],ecx
00401018     50              push eax
00401019     45              inc ebp
0040101A     43              inc ebx

下断:BP VirtualFree

F9运行!
77E615CB k>  55              push ebp  //中断在此
77E615CC     8BEC            mov ebp,esp
77E615CE     FF75 10         push dword ptr ss:[ebp+10]
77E615D1     FF75 0C         push dword ptr ss:[ebp+C]
77E615D4     FF75 08         push dword ptr ss:[ebp+8]
77E615D7     6A FF           push -1
77E615D9     E8 04000000     call kernel32.VirtualFreeEx
77E615DE     5D              pop ebp
77E615DF     C2 0C00         retn 0C

中断后取消断点(BPD VirtualFree),Ctrl+F9两次:
//第一次:
77E615DF     C2 0C00         retn 0C     //断这里
77E615E2 k>  55              push ebp
77E615E3     8BEC            mov ebp,esp
77E615E5     F645 15 80      test byte ptr ss:[ebp+15],80
77E615E9     74 0A           je short kernel32.77E615F5
77E615EB     837D 10 00      cmp dword ptr ss:[ebp+10],0
77E615EF     0F85 C2C10100   jnz kernel32.77E7D7B7
77E615F5     56              push esi
77E615F6     8B35 A011E477   mov esi,dword ptr ds:[<&ntdll.NtFre>; ntdll.ZwFreeVirtualMemory
77E615FC     57              push edi

//第二次:
00370409     C3              retn      //这里中断
0037040A     55              push ebp
0037040B     8BEC            mov ebp,esp
0037040D     83C4 FC         add esp,-4
00370410     53              push ebx
00370411     57              push edi
00370412     56              push esi
00370413     E8 00000000     call 00370418
00370418     5B              pop ebx

Alt+F9立即返回:
0043321D     8985 23120010   mov dword ptr ss:[ebp+10001223],eax                ; mypro.<ModuleEntryPoint>   //这里是返回位置
00433223     8BF0            mov esi,eax
00433225     59              pop ecx
00433226     5A              pop edx
00433227     03CA            add ecx,edx
00433229     68 00800000     push 8000
0043322E     6A 00           push 0
00433230     57              push edi
00433231     FF11            call dword ptr ds:[ecx]
00433233     8BC6            mov eax,esi
00433235     5A              pop edx
00433236     5E              pop esi
00433237     5F              pop edi
00433238     59              pop ecx
00433239     5B              pop ebx
0043323A     5D              pop ebp
0043323B     FFE0            jmp eax    //按理来说这个位置就应该跳到oep吧?
0043323D     0000            add byte ptr ds:[eax],al

F8单步26次,其中有几次是在00433231     FF11            call dword ptr ds:[ecx]这个call里执行的。里边代码是这样的:
77E615CB k>  55              push ebp
77E615CC     8BEC            mov ebp,esp
77E615CE     FF75 10         push dword ptr ss:[ebp+10]
77E615D1     FF75 0C         push dword ptr ss:[ebp+C]
77E615D4     FF75 08         push dword ptr ss:[ebp+8]
77E615D7     6A FF           push -1
77E615D9     E8 04000000     call kernel32.VirtualFreeEx
77E615DE     5D              pop ebp
77E615DF     C2 0C00         retn 0C

返回后执行到  0043323B     FFE0            jmp eax 这里
这里的eax居然是这样的
eax=00401000 (mypro.<ModuleEntryPoint>)
代码是

00401000 m>  E8 06000000     call mypro.0040100B
00401005     50              push eax
00401006     E8 BB010000     call mypro.004011C6                                ; jmp to kernel32.ExitProcess
0040100B     55              push ebp
0040100C     8BEC            mov ebp,esp
0040100E     81C4 F0FEFFFF   add esp,-110
00401014     E9 83000000     jmp mypro.0040109C
00401019     6B72 6E 6C      imul esi,dword ptr ds:[edx+6E],6C
0040101D     6E              outs dx,byte ptr es:[edi]
0040101E     2E:66:6E        outs dx,byte ptr es:[edi]
00401021     72 00           jb short mypro.00401023
请问我找到的是oep吗?我dump出来以后不能执行,修复iat也不可以?
为什么oep的入口跟开始的入口是一个位置阿?不明白。
我用peid 0.93扫描发现oep应该是这个阿,高手们能不能帮我解释一下呢

genoep
found oep:  004113fd。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
看看是否解码完毕
里面未必就没有壳了
2005-10-19 17:03
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
南蛮妈妈对LZ说:
已经到了oep了, 这个是E语言写的
2005-10-19 17:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
to fly:
因为程序iat没有修复,所以不能运行,当然用peid也就不知道是不是还有壳,但是用扩展功能看都说未加壳。区段查看如下
.text   00001000    00031000  00001000  00031000  e0000020
.rsrc   00032000    00002000  00032000  00002000  e0000020
.idata2 00034000    00001000  00034000  00000400  c0000040

to南蛮妈妈:
我经验未到,所以不能判断为何种语言所写,但是如果是e语言写的话,那么iat要如何来修复呢?

to看帖子的人:
谁能给我点提示,另外oep如果是这个的话,那么peid的判断是什么?iat修复的时候用113fd是不能找到iat的,如果用1000修复也不能运行。loadpe修复也是如此。

请大家给与新人帮助。多谢!

同源程序相比较,区段多了一个
2005-10-19 17:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
脱壳已经成功,但是有地方需要人来帮我解释下,我在1000处脱壳,然后在dump窗口中我选择重建输入表中的第二项:在脱壳文件中搜索DLL&API名称。结果脱出来的文件修复都不需要就可以运行了。不过壳显示是nothing found,区段名能看到多了一个人工添加的名。
2005-10-20 08:56
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
6
haha OEP的不一定就好PUSH EBP 开头 E语言写的程序就是 CALL开头的
2005-10-20 10:06
0
游客
登录 | 注册 方可回帖
返回
//