原文件:
附件:sy.rar
用fi查出是upx的壳,心想应该可以很容易脱出来。可是脱出来的程序不能运行。
过程:
0049D920 g> 60 pushad ; 壳入口
0049D921 BE 00104600 mov esi,ganmao.00461000
0049D926 8DBE 0000FAFF lea edi,dword ptr ds:[esi+F>
0049D92C C787 D4D40700 84096>mov dword ptr ds:[edi+7D4D4>
0049D936 57 push edi
0049D937 83CD FF or ebp,FFFFFFFF
0049D93A EB 0E jmp short ganmao.0049D94A
0049D93C 90 nop
0049D93D 90 nop
0049D93E 90 nop
0049D93F 90 nop
0049D940 8A06 mov al,byte ptr ds:[esi]
0049D942 46 inc esi
0049D943 8807 mov byte ptr ds:[edi],al
0049D945 47 inc edi
0049D946 01DB add ebx,ebx
0049D948 75 07 jnz short ganmao.0049D951
0049D94A 8B1E mov ebx,dword ptr ds:[esi]
0049D94C 83EE FC sub esi,-4
0049D94F 11DB adc ebx,ebx
0049D951 ^ 72 ED jb short ganmao.0049D940 ; 往回跳
0049D953 B8 01000000 mov eax,1 ; 选择这里,按F4 能跳出上面的循环
0049D958 01DB add ebx,ebx
0049D95A 75 07 jnz short ganmao.0049D963
................................................
.............继续往前走
0049D9C6 01DB add ebx,ebx
0049D9C8 ^ 73 EF jnb short ganmao.0049D9B9
0049D9CA 75 09 jnz short ganmao.0049D9D5
0049D9CC 8B1E mov ebx,dword ptr ds:[esi]
0049D9CE 83EE FC sub esi,-4
0049D9D1 11DB adc ebx,ebx
0049D9D3 ^ 73 E4 jnb short ganmao.0049D9B9
0049D9D5 83C1 02 add ecx,2
0049D9D8 81FD 00FBFFFF cmp ebp,-500
0049D9DE 83D1 01 adc ecx,1
0049D9E1 8D142F lea edx,dword ptr ds:[edi+e>
0049D9E4 83FD FC cmp ebp,-4
0049D9E7 76 0F jbe short ganmao.0049D9F8
0049D9E9 8A02 mov al,byte ptr ds:[edx]
0049D9EB 42 inc edx
0049D9EC 8807 mov byte ptr ds:[edi],al
0049D9EE 47 inc edi
0049D9EF 49 dec ecx
0049D9F0 ^ 75 F7 jnz short ganmao.0049D9E9
0049D9F2 ^ E9 4FFFFFFF jmp ganmao.0049D946 ; 这里又是一个类似的循环,想用前面的方法离开时
0049D9F7 90 nop ; 在这里按F4,程序运行了。用ctrl+f2重来。
...............................................................
.......................ctrl+f2,一直运行到下面这里。
0049D9E1 8D142F lea edx,dword ptr ds:[edi+e>
0049D9E4 83FD FC cmp ebp,-4
0049D9E7 76 0F jbe short ganmao.0049D9F8
0049D9E9 8A02 mov al,byte ptr ds:[edx]
0049D9EB 42 inc edx
0049D9EC 8807 mov byte ptr ds:[edi],al
0049D9EE 47 inc edi
0049D9EF 49 dec ecx
0049D9F0 ^ 75 F7 jnz short ganmao.0049D9E9
0049D9F2 ^ E9 4FFFFFFF jmp ganmao.0049D946
//在0049D9E7那有一个跳,跳到0049d9f8刚好就能跳出这个循环,于是就云0049d9f8。按f4
0049D9F7 90 nop ; 如果在这里按F4,程序运行了。用ctrl+f2重来。
.............................
.........来到这里
0049D9F8 8B02 mov eax,dword ptr ds:[edx]
0049D9FA 83C2 04 add edx,4
0049D9FD 8907 mov dword ptr ds:[edi],eax
0049D9FF 83C7 04 add edi,4
0049DA02 83E9 04 sub ecx,4
0049DA05 ^ 77 F1 ja short ganmao.0049D9F8
0049DA07 01CF add edi,ecx
0049DA09 ^ E9 38FFFFFF jmp ganmao.0049D946 ; 这里又有一个很大的往回跳.用f4离开这个循环.
0049DA0E 5E pop esi ; ganmao.00401000
................................
...........一直用f8
0049DA48 8B07 mov eax,dword ptr ds:[edi]
0049DA4A 09C0 or eax,eax
0049DA4C 74 3C je short ganmao.0049DA8A
0049DA4E 8B5F 04 mov ebx,dword ptr ds:[edi+4>
0049DA51 8D8430 00E10900 lea eax,dword ptr ds:[eax+e>
0049DA58 01F3 add ebx,esi
0049DA5A 50 push eax
0049DA5B 83C7 08 add edi,8
0049DA5E FF96 DCE10900 call dword ptr ds:[esi+9E1D>
0049DA64 95 xchg eax,ebp
0049DA65 8A07 mov al,byte ptr ds:[edi]
0049DA67 47 inc edi
0049DA68 08C0 or al,al
0049DA6A ^ 74 DC je short ganmao.0049DA48
0049DA6C 89F9 mov ecx,edi
0049DA6E 57 push edi
0049DA6F 48 dec eax
0049DA70 F2:AE repne scas byte ptr es:[edi>
0049DA72 55 push ebp
0049DA73 FF96 E0E10900 call dword ptr ds:[esi+9E1E>
0049DA79 09C0 or eax,eax
0049DA7B 74 07 je short ganmao.0049DA84
0049DA7D 8903 mov dword ptr ds:[ebx],eax
0049DA7F 83C3 04 add ebx,4
0049DA82 ^ EB E1 jmp short ganmao.0049DA65 ; 这里又是也不能用f4过,
//看看有什么跳转能跳出这里.
//发现在0049da4c那里有个跳能跳到49da8a,刚好就跳出了这里。所以就云0049da8a按f4离开这个循环.
0049DA84 FF96 E4E10900 call dword ptr ds:[esi+9E1E>
0049DA8A 61 popad ; 看到壳的出口了
0049DA8B ^ E9 30A0FDFF jmp ganmao.00477AC0 ; 跨断的跳转。477ac0应该就是oep了
......来到这里
00477AC0 55 push ebp ;在这里时用ollydbg里的插件的两种模式分别dump出来。然后用Import REConstructor修复,程序无法正常运行。
然后试着用loadPe 来dump,然后用loadPE修复。还是一样。
请问到底怎么回事?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!