-
-
[原创]GiveMe5's Crackme简单脱壳算法分析
-
发表于:
2006-5-7 14:50
5554
-
[原创]GiveMe5's Crackme简单脱壳算法分析
【破解日期】 2006年5月7日
【破解作者】 冷血书生
【作者邮箱】 没有
【作者主页】 http://blog.csdn.net/xueleng/
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 GiveMe5's Crackme
【下载地址】 本地下载
【软件简介】 没啥好介绍的,地球人都知道的事情~~
【软件大小】 500K
【加壳方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
一、脱壳分析
004302E3 > 55 push ebp ; 载入停在这里,下断点he GetModuleHandleA
004302E4 8BEC mov ebp,esp
004302E6 6A FF push -1
004302E8 68 20AB4500 push packed.0045AB20
004302ED 68 20004300 push packed.00430020
004302F2 64:A1 00000000 mov eax,dword ptr fs:[0]
///////////////////////////////////////////////////////////////////////////////////////////
堆栈变化:
0012FF38 004303AB /CALL 到 GetModuleHandleA 来自 packed.004303A5
0012FF3C 00000000 \pModule = NULL
0012C864 4B21210E /CALL 到 GetModuleHandleA 来自 4B212108
0012C868 0012C86C \pModule = "D:\WINDOWS\system32\ntdll.dll"
0012C86C 4B21210E /CALL 到 GetModuleHandleA 来自 4B212108
0012C870 0012C874 \pModule = "D:\WINDOWS\system32\imm32.dll"
0012C7B8 4B21210E /CALL 到 GetModuleHandleA 来自 4B212108
0012C7BC 0012C7C0 \pModule = "D:\WINDOWS\system32\KERNEL32"
0012CEF4 4C52D4A7 /CALL 到 GetModuleHandleA 来自 msctfime.4C52D4A1
0012CEF8 0012CEFC \pModule = "D:\WINDOWS\system32\ntdll.dll"
0012CF48 773D7FF9 /CALL 到 GetModuleHandleA 来自 773D7FF3
0012CF4C 77372E84 \pModule = "kernel32.dll"
0012CF8C 773D5246 /CALL 到 GetModuleHandleA 来自 773D5240
0012CF90 77372E84 \pModule = "kernel32.dll"
0012CF94 7C8284FF kernel32.GetProcessHeap
0012CFA8 71B110E9 /CALL 到 GetModuleHandleA 来自 WSOCK32.71B110E3
0012CFAC 71B12F8C \pModule = "kernel32.dll"
0012D750 0041B003 /CALL 到 GetModuleHandleA 来自 packed.0041AFFD
0012D754 00000000 \pModule = NULL
00127ADC 00BF4234 /CALL 到 GetModuleHandleA 来自 00BF422E
00127AE0 00C07B00 \pModule = "kernel32.dll"
00127AE4 00C08BB4 ASCII "VirtualAlloc"
00127ADC 00BF4251 /CALL 到 GetModuleHandleA 来自 00BF424B
00127AE0 00C07B00 \pModule = "kernel32.dll"
00127AE4 00C08BA8 ASCII "VirtualFree"
00106F54 00BFED03 /CALL 到 GetModuleHandleA 来自 00BFECFD
00106F58 00000000 \pModule = NULL
00106F88 00BFE969 /CALL 到 GetModuleHandleA 来自 00BFE967
00106F8C 00000000 \pModule = NULL
00106F88 00BFEA68 /CALL 到 GetModuleHandleA 来自 00BFEA66
00106F8C 00000000 \pModule = NULL
00106F88 00BFEAC4 /CALL 到 GetModuleHandleA 来自 00BFEAC2
00106F8C 00000000 \pModule = NULL
00106F88 00BFEBEA /CALL 到 GetModuleHandleA 来自 00BFEBE8
00106F8C 00000000 \pModule = NULL
00127840 00BE45E1 /CALL 到 GetModuleHandleA 来自 00BE45DB
00127844 00127990 \pModule = "kernel32.dll" -------------> 返回的好时机
///////////////////////////////////////////////////////////////////////////////////////////
00BE45E1 8B0D 4CF5C000 mov ecx,dword ptr ds:[C0F54C] ; 返回到这里
00BE45E7 89040E mov dword ptr ds:[esi+ecx],eax
00BE45EA A1 4CF5C000 mov eax,dword ptr ds:[C0F54C]
00BE45EF 391C06 cmp dword ptr ds:[esi+eax],ebx
00BE45F2 75 16 jnz short 00BE460A
00BE45F4 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00BE45FA 50 push eax
00BE45FB FF15 0C21C000 call dword ptr ds:[C0210C] ; kernel32.LoadLibraryA
00BE4601 8B0D 4CF5C000 mov ecx,dword ptr ds:[C0F54C]
00BE4607 89040E mov dword ptr ds:[esi+ecx],eax
00BE460A A1 4CF5C000 mov eax,dword ptr ds:[C0F54C]
00BE460F 391C06 cmp dword ptr ds:[esi+eax],ebx
00BE4612 0F84 2F010000 je 00BE4747 ; je改为 jmp,取消硬件断点
///////////////////////////////////////////////////////////////////////////////////////////
bp GetCurrentThreadId
堆栈变化:
00127140 73441E3A /CALL 到 GetCurrentThreadId 来自 73441E34
00127144 00000001
00127148 73441C1E 返回到 73441C1E 来自 73441DE6
0012714C 73441B64 返回到 73441B64 来自 73441B90
7C82BC6D > 64:A1 18000000 mov eax,dword ptr fs:[18]
0012D650 4B2162EE /CALL 到 GetCurrentThreadId 来自 MSCTF.4B2162E8
0012D590 77E6CC69 /CALL 到 GetCurrentThreadId 来自 USER32.77E6CC63
0012D488 00BE49AD /CALL 到 GetCurrentThreadId 来自 00BE49A7 --------> 返回的好时机
///////////////////////////////////////////////////////////////////////////////////////////
00BFC764 /75 1B jnz short 00BFC781
00BFC766 |FF76 04 push dword ptr ds:[esi+4]
00BFC769 |FF76 08 push dword ptr ds:[esi+8]
00BFC76C |53 push ebx
00BFC76D |52 push edx
00BFC76E |8B90 84000000 mov edx,dword ptr ds:[eax+84]
00BFC774 |3350 78 xor edx,dword ptr ds:[eax+78]
00BFC777 |3350 30 xor edx,dword ptr ds:[eax+30]
00BFC77A |2BCA sub ecx,edx
00BFC77C |FFD1 call ecx ////进入OEP
00BFC77E |8945 FC mov dword ptr ss:[ebp-4],eax
00BFC781 \8B45 FC mov eax,dword ptr ss:[ebp-4]
00BFC784 5F pop edi
00BFC785 5E pop esi
00BFC786 5B pop ebx
00BFC787 C9 leave
00BFC788 C3 retn
///////////////////////////////////////////////////////////////////////////////////////////
00401099 /EB 27 jmp short packed.004010C2 /// OEP,Dump it
0040109B |33C0 xor eax,eax
0040109D |A3 F7204000 mov dword ptr ds:[4020F7],eax
004010A2 |6A 29 push 29
004010A4 |68 0E204000 push packed.0040200E
004010A9 |6A 65 push 65
004010AB |FF75 08 push dword ptr ss:[ebp+8]
004010AE |E8 D9010000 call packed.0040128C ; jmp to USER32.GetDlgItemTextA
004010B3 |A3 F7204000 mov dword ptr ds:[4020F7],eax
004010B8 |B8 01000000 mov eax,1
004010BD |E9 89000000 jmp packed.0040114B
004010C2 \6A 00 push 0
004010C4 E8 E1010000 call packed.004012AA ; jmp to kernel32.GetModuleHandleA
///////////////////////////////////////////////////////////////////////////////////////////
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)