能力值:
( LV2,RANK:10 )
|
-
-
2 楼
脱Themida的壳,
刚想膜拜一下,
原来是用脚本.........
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
呃。。。没得办法。。。手脱都把我绕晕了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
可能是自校验吧 程序会检测程序有没有被修改 同时打开加壳的和修复之后的 一一对比 看是否存在不一样的跳转修改
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
用OD载入,运行脱壳脚本
[LEFT]0071976C 6A 28 push 28 脚本运行完到这
0071976E 68 101D7500 push 00751D10
00719773 E8 98030000 call 00719B10
00719778 33FF xor edi, edi
0071977A 57 push edi
0071977B FF15 18A07200 call dword ptr [72A018]
00719781 66:8138 4D5A cmp word ptr [eax], 5A4D
00719786 75 1F jnz short 007197A7
00719788 8B48 3C mov ecx, dword ptr [eax+3C]
0071978B 03C8 add ecx, eax
0071978D 8139 50450000 cmp dword ptr [ecx], 4550
00719793 75 12 jnz short 007197A7
00719795 0FB741 18 movzx eax, word ptr [ecx+18]
00719799 3D 0B010000 cmp eax, 10B
0071979E 74 1F je short 007197BF
007197A0 3D 0B020000 cmp eax, 20B
007197A5 74 05 je short 007197AC
007197A7 897D E4 mov dword ptr [ebp-1C], edi
007197AA EB 27 jmp short 007197D3
007197AC 83B9 84000000 0>cmp dword ptr [ecx+84], 0E
007197B3 ^ 76 F2 jbe short 007197A7
007197B5 33C0 xor eax, eax
007197B7 39B9 F8000000 cmp dword ptr [ecx+F8], edi
007197BD EB 0E jmp short 007197CD
007197BF 8379 74 0E cmp dword ptr [ecx+74], 0E
007197C3 ^ 76 E2 jbe short 007197A7
007197C5 33C0 xor eax, eax
007197C7 39B9 E8000000 cmp dword ptr [ecx+E8], edi
007197CD 0F95C0 setne al
007197D0 8945 E4 mov dword ptr [ebp-1C], eax
007197D3 897D FC mov dword ptr [ebp-4], edi
007197D6 6A 01 push 1
007197D8 FF15 60A37200 call dword ptr [72A360] ; MSVCR71.__set_app_type
007197DE 59 pop ecx
007197DF 830D E0BA1901 F>or dword ptr [119BAE0], FFFFFFFF
007197E6 830D E4BA1901 F>or dword ptr [119BAE4], FFFFFFFF
//酷似VC6的入口代码
007197ED FF15 5CA37200 call dword ptr [72A35C] ; MSVCR71.__p__fmode
007197F3 8B0D D8BA1901 mov ecx, dword ptr [119BAD8]
007197F9 8908 mov dword ptr [eax], ecx
007197FB FF15 58A37200 call dword ptr [72A358] ; MSVCR71.__p__commode[/LEFT]
拿一个VC++的程序来参考下:
00401F10 D> 55 push ebp
00401F11 8BEC mov ebp,esp
00401F13 6A FF push -1
00401F15 68 E8394000 push 4039E8 ①
00401F1A 68 96204000 push 402096 ②
00401F1F 64:A1 00000000 mov eax,dword ptr fs:[0]
00401F25 50 push eax
00401F26 64:8925 00000000 mov dword ptr fs:[0],esp
00401F2D 83EC 68 sub esp,68
00401F30 53 push ebx
00401F31 56 push esi
00401F32 57 push edi ; ntdll.7C930738
00401F33 8965 E8 mov dword ptr ss:[ebp-18],esp
00401F36 33DB xor ebx,ebx
00401F38 895D FC mov dword ptr ss:[ebp-4],ebx
00401F3B 6A 02 push 2
00401F3D FF15 4C334000 call dword ptr ds:[40334C] ; msvcrt.__set_app_type
00401F43 59 pop ecx ; kernel32.7C816FD7
00401F44 830D 6C514000 FF or dword ptr ds:[40516C],FFFFFFFF
00401F4B 830D 70514000 FF or dword ptr ds:[405170],FFFFFFFF
00401F52 FF15 48334000 call dword ptr ds:[403348] ; msvcrt.__p__fmode
确定OEP:007197AB
下面开始补OEP,在补OEP的过程中,有两个push数据需要从堆栈中找出。
看了很多文章,都只是直接给出堆栈里面的数据,可是怎么从堆栈找并没给出,想向大牛们求教,
怎样从堆栈找出①和②的数值?
看我脱的过程对吗?有没有出错,请指出。谢谢
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
我在4楼已经帮你解决了哇
是不是没看见?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
感谢大大,能讲一下过程吗?好想学学
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
你比较一下我的文件和你脱壳后的文件就知道了
就是过了一个异常
|