|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
作者:bhcjl 转贴自:一蓑烟雨 【破文标题】三种方法脱ACProtect V2.0的壳 【破文作者】[PYG]bhcjl ------------------------------------------------------------------------ 【破解过程】今天看到一个加了ACProtect V2.0 -> risco * Sign.By.fly *的壳的小软件,研究了半天,参考了不少大侠的脱壳方法,发现有三种方法可以搞定,当然,还有其他的好方法,希望各位高手多指点。 第一种方法: 1.用OD载入加壳程序,发现停在下面这里 01001000 加> 68 00F00101 push 加壳后Ca.0101F000 ; 停在这里 01001005 68 0B100001 push 加壳后Ca.0100100B ESP定律 0100100A C3 retn 0100100B C3 retn 我们F8向下走一步,看(下图)寄存器窗口 EAX 00000000 ECX 00010101 EDX FFFFFFFF EBX 7FFDF000 ESP 0006FFC0 这里变红,这里右键--数据窗口中跟随 EBP 0006FFF0 ESI 00000000 EDI 00000000 EIP 01001005 加壳后Ca.01001005 这时看左下数据窗口 0006FFC0 0101F000 加壳后Ca.0101F000 右键-断点-设置硬件访问断点-WORD 0006FFC4 77E889D5 返回到 KERNEL32.77E889D5 好,我们设置好断点后,F9运行程序。 0101F000 60 pushad ; F9一次后停在这里 0101F001 81F3 E0D125C4 xor ebx,C425D1E0 继续F9.大概15次后,停在下面了 010127DF 896C24 10 mov dword ptr ss:[esp+10],ebp 15次后,再F9,程序就运行起来了,停在这里。F8单步向下走 010127E3 8D6C24 10 lea ebp,dword ptr ss:[esp+10] 010127E7 2BE0 sub esp,eax 010127E9 53 push ebx 010127EA 56 push esi 010127EB 57 push edi 010127EC 8B45 F8 mov eax,dword ptr ss:[ebp-8] 010127EF 8965 E8 mov dword ptr ss:[ebp-18],esp 010127F2 50 push eax 010127F3 8B45 FC mov eax,dword ptr ss:[ebp-4] 010127F6 C745 FC FFFFFFFF mov dword ptr ss:[ebp-4],-1 010127FD 8945 F8 mov dword ptr ss:[ebp-8],eax 01012800 C3 retn F8向下走,来到下面这里 01012467 56 push esi 01012468 53 push ebx 01012469 E8 20FCFFFF call 加壳后Ca.0101208E 0101246E 5B pop ebx 0101246F 5F pop edi 01012470 5E pop esi 01012471 5D pop ebp 01012472 C2 0800 retn 8 这上面的不管 01012475 E5 DF in eax,0DF 被偷了一行代码。 01012477 68 E0150001 push 加壳后Ca.010015E0 0101247C E8 47030000 call 加壳后Ca.010127C8 01012481 33DB xor ebx,ebx ; 来到这里 看上面的,懂各类语言的朋友就知道,这是C++类的语言写的,学脱壳要对各类语言的入口要非常清楚。 好,我们找一个这类的程序看看。看下面。和上面对比发现被偷了一行代码 01012475 原> $ 6A 70 push 70 ; 这是原程序入口 01012477 . 68 E0150001 push 原Calc.010015E0 0101247C . E8 47030000 call 原Calc.010127C8 01012481 . 33DB xor ebx,ebx 01012483 . 53 push ebx ; /pModule => NULL 好,我们把push 70,这一行代码复制一下,在01012475处汇编一下。改好后的代码如下 01012475 6A 70 push 70 这是我们修复后的。用OD在这里右键-此处新建EIP 01012477 68 E0150001 push 加壳后Ca.010015E0 0101247C E8 47030000 call 加壳后Ca.010127C8 01012481 33DB xor ebx,ebx ; 来到这里 01012483 53 push ebx 好,新建EIP后,我们就可以脱壳了,打开LordPE,找到这个进程,右键-修正镜像大小,然后,完整转存后退出LordPE .下面再打开ImportREC.修复一下即可,这里不多说了。运行一下程序,发现可以运行,再查一下壳,是Microsoft Visual C++ 7.0 Method2编写的 第二种方法: 用OD载入程序后,ALT+M打开内存镜像 01001000 00013000 (77824.) 加壳后Ca 01000000 后在这里F2下断 .text code 01014000 00002000 (8192.) 加壳后Ca 01000000 先这里F2下断 .data code,data 01016000 00009000 (36864.) 加壳后Ca 01000000 .rsrc code,resources 0101F000 0001E000 (122880.) 加壳后Ca 01000000 .perplex code,imports 65D20000 00001000 (4096.) USP10 65D20000 (自身) PE header 我们ALT+M打开内存镜像后在01014000区段右键-设置访问中断,(也就是F2下断),然后SHIFT+F9运行,停下后,再在01001000区段F2下断,再次SHIFT+F9运行,停下后。再次在区段01014000这里F2下断。然后SHIFT+F9运行,停在下面了 01012475 E5 DF in eax,0DF ; 这里被偷了代码。 01012477 68 E0150001 push 加壳后Ca.010015E0 0101247C E8 47030000 call 加壳后Ca.010127C8 01012481 33DB xor ebx,ebx 01012483 53 push ebx 01012484 8B3D 20100001 mov edi,dword ptr ds:[1001020] ; KERNEL32.GetModuleHandleA 0101248A FFD7 call edi 0101248C 66:8138 4D5A cmp word ptr ds:[eax],5A4D 01012491 75 1F jnz short 加壳后Ca.010124B2 01012493 8B48 3C mov ecx,dword ptr ds:[eax+3C] 01012496 03C8 add ecx,eax 01012498 8139 50450000 cmp dword ptr ds:[ecx],4550 0101249E 75 12 jnz short 加壳后Ca.010124B2 010124A0 0FB741 18 movzx eax,word ptr ds:[ecx+18] 010124A4 3D 0B010000 cmp eax,10B 010124A9 74 1F je short 加壳后Ca.010124CA 010124AB 3D 0B020000 cmp eax,20B 010124B0 74 05 je short 加壳后Ca.010124B7 010124B2 895D E4 mov dword ptr ss:[ebp-1C],ebx 010124B5 EB 27 jmp short 加壳后Ca.010124DE 010124B7 83B9 84000000 0E cmp dword ptr ds:[ecx+84],0E 010124BE ^ 76 F2 jbe short 加壳后Ca.010124B2 010124C0 33C0 xor eax,eax 010124C2 3999 F8000000 cmp dword ptr ds:[ecx+F8],ebx 010124C8 EB 0E jmp short 加壳后Ca.010124D8 010124CA 8379 74 0E cmp dword ptr ds:[ecx+74],0E 010124CE ^ 76 E2 jbe short 加壳后Ca.010124B2 010124D0 33C0 xor eax,eax 010124D2 3999 E8000000 cmp dword ptr ds:[ecx+E8],ebx 010124D8 0F95C0 setne al 010124DB 8945 E4 mov dword ptr ss:[ebp-1C],eax 010124DE 895D FC mov dword ptr ss:[ebp-4],ebx 010124E1 6A 02 push 2 010124E3 FF15 0C120001 call dword ptr ds:[100120C] ; msvcrt.__set_app_type 010124E9 59 pop ecx 010124EA 830D 10500101 FF or dword ptr ds:[1015010],FFFFFF>; 三次内存镜像后停在这里。向上看 010124F1 830D 14500101 FF or dword ptr ds:[1015014],FFFFFF> 下面的操作用第一种方法,这里不多说了。 第三种方法: OD载入后,F9运行程序,程序出来后,点暂停键,或者按F12,这时点查看--执行模块。打开可执行模块。用鼠标在第二行主程序模块右键点--CPU中查看代码。然后在底下的“命令”里输入"bpx abc".这里abc是随便输的。 然后在“模块间调用”中输入set_app_type。找到后,双击一下来到下面 01012475 E5 DF in eax,0DF ; 又来到这里了,被偷的代码处 01012477 68 E0150001 push 加壳后Ca.010015E0 0101247C E8 47030000 call 加壳后Ca.010127C8 01012481 33DB xor ebx,ebx 01012483 53 push ebx 01012484 8B3D 20100001 mov edi,dword ptr ds:[1001020] ; KERNEL32.GetModuleHandleA 0101248A FFD7 call edi 0101248C 66:8138 4D5A cmp word ptr ds:[eax],5A4D 01012491 75 1F jnz short 加壳后Ca.010124B2 01012493 8B48 3C mov ecx,dword ptr ds:[eax+3C] 01012496 03C8 add ecx,eax 01012498 8139 50450000 cmp dword ptr ds:[ecx],4550 0101249E 75 12 jnz short 加壳后Ca.010124B2 010124A0 0FB741 18 movzx eax,word ptr ds:[ecx+18] 010124A4 3D 0B010000 cmp eax,10B 010124A9 74 1F je short 加壳后Ca.010124CA 010124AB 3D 0B020000 cmp eax,20B 010124B0 74 05 je short 加壳后Ca.010124B7 010124B2 895D E4 mov dword ptr ss:[ebp-1C],ebx 010124B5 EB 27 jmp short 加壳后Ca.010124DE 010124B7 83B9 84000000 0E cmp dword ptr ds:[ecx+84],0E 010124BE ^ 76 F2 jbe short 加壳后Ca.010124B2 010124C0 33C0 xor eax,eax 010124C2 3999 F8000000 cmp dword ptr ds:[ecx+F8],ebx 010124C8 EB 0E jmp short 加壳后Ca.010124D8 010124CA 8379 74 0E cmp dword ptr ds:[ecx+74],0E 010124CE ^ 76 E2 jbe short 加壳后Ca.010124B2 010124D0 33C0 xor eax,eax 010124D2 3999 E8000000 cmp dword ptr ds:[ecx+E8],ebx 010124D8 0F95C0 setne al 010124DB 8945 E4 mov dword ptr ss:[ebp-1C],eax 010124DE 895D FC mov dword ptr ss:[ebp-4],ebx 010124E1 6A 02 push 2 ; 看到下面了吧。我们向上看 010124E3 FF15 0C120001 call dword ptr ds:[100120C] ; msvcrt.__set_app_type 010124E9 59 pop ecx 下面的操作我就不讲了,大家应该知道怎么做了吧 [此贴被 yongmin(yongmin) 在 04月01日10时41分 编辑过] |
地主 发表时间: 08-04-01 10:35 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号