首页
社区
课程
招聘
求助!脱完壳修复了的程序,就是不能通过HeapAlloc!
发表于: 2007-3-29 11:19 4700

求助!脱完壳修复了的程序,就是不能通过HeapAlloc!

2007-3-29 11:19
4700
是Themida的壳,用okdodo的那个脚本脱的,程序太大,无法上传空间。
我用OD跟踪原程序和脱完壳的程序,代码都是一样,在调用HeapAlloc的时候
7C9305D4 >  68 04020000     push    204      ;HeapAlloc入口
7C9305D9    68 F006937C     push    7C9306F0
7C9305DE    E8 DFE7FFFF     call    7C92EDC2
7C9305E3    8B5D 08         mov     ebx, dword ptr [ebp+8]
7C9305E6    895D E4         mov     dword ptr [ebp-1C], ebx
7C9305E9    33FF            xor     edi, edi
7C9305EB    897D D0         mov     dword ptr [ebp-30], edi
7C9305EE    C645 E2 00      mov     byte ptr [ebp-1E], 0
7C9305F2    897D CC         mov     dword ptr [ebp-34], edi
7C9305F5    8B45 0C         mov     eax, dword ptr [ebp+C]
7C9305F8    0B43 10         or      eax, dword ptr [ebx+10] ;这条指令脱壳后的程序不能通过

原程序能通过,而脱壳后的程序一到最后这条指令就莫名其妙的跳转到

7C92EAF0    8B1C24          mov     ebx, dword ptr [esp] ; 跳转到这里来了
7C92EAF3    51              push    ecx
7C92EAF4    53              push    ebx
7C92EAF5    E8 C78C0200     call    7C9577C1
7C92EAFA    0AC0            or      al, al
7C92EAFC    74 0C           je      short 7C92EB0A
7C92EAFE    5B              pop     ebx
7C92EAFF    59              pop     ecx
7C92EB00    6A 00           push    0
7C92EB02    51              push    ecx
7C92EB03    E8 11EBFFFF     call    ZwContinue
7C92EB08    EB 0B           jmp     short 7C92EB15
7C92EB0A    5B              pop     ebx
7C92EB0B    59              pop     ecx
7C92EB0C    6A 00           push    0
7C92EB0E    51              push    ecx
7C92EB0F    53              push    ebx
7C92EB10    E8 3DF7FFFF     call    ZwRaiseException    ;然后从这里返回到发生跳转的7c9305f8就程序终止了

请高手帮忙解决下问题,脱壳后的程序前面开的几个线程都运行正常,到这就过不去了,是不是我程序的修复有问题啊?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 154
活跃值: (75)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
关注...
2007-3-29 20:32
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
会不会是出现异常而跳到了异常处理程序呢?
2007-3-29 21:18
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
确实是异常
2007-3-30 08:54
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不过好像是系统自己的异常处理模块!
2007-3-30 08:58
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
继续求助!

这个壳进入OEP,用的CALL而不是JUMP

0060C90F    FFD7            call    edi
0060C911    50              push    eax
0060C912    E8 C9F9E1FF     call    0042C2E0  ;这个是OEP
0060C917    8BF8            mov     edi, eax

壳开了近20个保护线程,而主程序它是像上面那样调用的,随后它就开始用这些线程互相保护,我进入上面那个CALL然后是这样

0042C2E0    55              push    ebp
0042C2E1    8BEC            mov     ebp, esp
0042C2E3    83E4 F8         and     esp, FFFFFFF8
0042C2E6    B8 A4290000     mov     eax, 29A4
0042C2EB    E8 00E81D00     call    0060AAF0
0042C2F0    A1 5CD06B00     mov     eax, dword ptr [6BD05C]
0042C2F5    53              push    ebx
0042C2F6    56              push    esi
0042C2F7    57              push    edi
0042C2F8    898424 AC290000 mov     dword ptr [esp+29AC], eax
0042C2FF    E8 DC1C0000     call    0042DFE0
0042C304    FF15 F4606700   call    dword ptr [6760F4]               ; kernel32.GetCommandLineA
0042C30A    8BD8            mov     ebx, eax
0042C30C    68 58946700     push    00679458                         ; ASCII "0057"
0042C311    68 B0956700     push    006795B0                         ; ASCII "############ Game Start [%s]################"
0042C316    895C24 14       mov     dword ptr [esp+14], ebx
0042C31A    E8 F1E2FFFF     call    0042A610
0042C31F    8B7D 08         mov     edi, dword ptr [ebp+8]
0042C322    8B35 D4626700   mov     esi, dword ptr [6762D4]          ; USER32.LoadStringA

我觉得这应该就是OEP然后我就从这里DUMP,修复了import表后就出了前面说的情况,

请问我这样DUMP对不对,为什么会出现异常哪?
2007-3-30 13:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
....不懂
2007-4-2 14:32
0
游客
登录 | 注册 方可回帖
返回
//