算霸5主程序脱壳
 

破文作者:№微笑一刀[LOCKLOSE]
文章题目:算霸5主程序脱壳
下载地址:忘记了...
加密方式:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
破解工具:OD修改版,IMPR.
软件限制:启动时有个壳的NAG...
破解平台:Win9x/NT/2000/XP/XP SP2
软件简介:主要功能: 1. 表达式计算,可以进行多行计算。 2. 支持变量,可以设无限变量。 3. 基本支持C和BASIC的各种运算符。 4. 支持二进制、十进制、十六进制常量。 5. 支持数十个常用函数,基本包含了所有普通数学中所有函数。 6. 支持简单的文件处理,可以在文件指定位置写入字节,是黑客们用来破解可执行文件的必备工具。 7. 可以将计算式保存成文件,以便反复使用。 8. 可以设置透明度、置顶及监视粘贴板等。 破解过程:

      

老规矩,载入OD,设置忽略所有异常,隐藏OD,开工了. 载入以后停在这里~ 004F0880 > 55 push ebp <<-------停在这 004F0881 8BEC mov ebp,esp 004F0883 6A FF push -1 004F0885 68 90BA5000 push calc5.0050BA90 004F088A 68 58054F00 push calc5.004F0558 004F088F 64:A1 00000000 mov eax,dword ptr fs:[0] 004F0895 50 push eax 004F0896 64:8925 0000000>mov dword ptr fs:[0],esp 004F089D 83EC 58 sub esp,58 004F08A0 53 push ebx 004F08A1 56 push esi 004F08A2 57 push edi 下GetModuleHandleA断点,F9运行. 会断在下面的地方, 7C80B529 > 8BFF mov edi,edi 7C80B52B 55 push ebp 7C80B52C 8BEC mov ebp,esp 7C80B52E 837D 08 00 cmp dword ptr ss:[ebp+8],0

注意堆栈内容,先面是每次中断出现的信息 0012CA20 77F45BB0 /CALL 到 GetModuleHandleA 来自 77F45BAA 0012CA24 77F44FF4 \pModule = "KERNEL32.DLL"

0012CF30 77F45BB0 /CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BAA 0012CF34 77F44FF4 \pModule = "KERNEL32.DLL"

0012D744 004DB7C3 /CALL 到 GetModuleHandleA 来自 calc5.004DB7BD 0012D748 00000000 \pModule = NULL

00128CD8 00BC03AA /CALL 到 GetModuleHandleA 来自 00BC03A4 00128CDC 00BD3D68 \pModule = "kernel32.dll"

00128CD8 00BC03C7 /CALL 到 GetModuleHandleA 来自 00BC03C1 00128CDC 00BD3D68 \pModule = "kernel32.dll"

001081BC 00BCB03A /CALL 到 GetModuleHandleA 来自 00BCB034 001081C0 00000000 \pModule = NULL

001081F0 00BCACA0 /CALL 到 GetModuleHandleA 来自 00BCAC9E 001081F4 00000000 \pModule = NULL

001081F0 00BCAD9F /CALL 到 GetModuleHandleA 来自 00BCAD9D 001081F4 00000000 \pModule = NULL

001081F0 00BCADFB /CALL 到 GetModuleHandleA 来自 00BCADF9 001081F4 00000000 \pModule = NULL

001081F0 00BCAF21 /CALL 到 GetModuleHandleA 来自 00BCAF1F 001081F4 00000000 \pModule = NULL

000E78EC 7365D4A4 /CALL 到 GetModuleHandleA 来自 7365D49E 000E78F0 000E78F4 \pModule = "C:\WINDOWS\system32\ntdll.dll" 在按一次就会出现那个未注册壳的NAG了,点OK后会提示一个异常,SHIFT+F9过去后 堆栈显示 00128A50 00BA99AC /CALL 到 GetModuleHandleA 来自 00BA99A6 00128A54 00128B8C \pModule = "kernel32.dll" 返回的时机到了,返回到 00BA99AC 8B0D 2091BD00 mov ecx,dword ptr ds:[BD9120] 00BA99B2 89040E mov dword ptr ds:[esi+ecx],eax 00BA99B5 A1 2091BD00 mov eax,dword ptr ds:[BD9120] 00BA99BA 393C06 cmp dword ptr ds:[esi+eax],edi 00BA99BD 75 16 jnz short 00BA99D5 00BA99BF 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 00BA99C5 50 push eax 00BA99C6 FF15 D4E0BC00 call dword ptr ds:[BCE0D4] ; kernel32.LoadLibraryA 00BA99CC 8B0D 2091BD00 mov ecx,dword ptr ds:[BD9120] 00BA99D2 89040E mov dword ptr ds:[esi+ecx],eax 00BA99D5 A1 2091BD00 mov eax,dword ptr ds:[BD9120] 00BA99DA 393C06 cmp dword ptr ds:[esi+eax],edi 00BA99DD 0F84 AD000000 je 00BA9A90 <<--------------修改为JMP 00BA9A90(Magic Jump) 00BA99E3 33C9 xor ecx,ecx 00BA99E5 8B03 mov eax,dword ptr ds:[ebx] 00BA99E7 3938 cmp dword ptr ds:[eax],edi 00BA99E9 74 06 je short 00BA99F1 取消GetModuleHandleA断点下GetCurrentThreadId断点~F9运行 断在 7C809737 > 64:A1 18000000 mov eax,dword ptr fs:[18] <<----------------这里 7C80973D 8B40 24 mov eax,dword ptr ds:[eax+24] 7C809740 C3 retn 看堆栈内容,直到出现 0012D798 00BC8A3D /CALL 到 GetCurrentThreadId 来自 00BC8A37 不然一直F9走,出现以后取消断点并返回~ 返回到 00BC8A3D A3 A8D6BD00 mov dword ptr ds:[BDD6A8],eax <<------------这里 00BC8A42 E8 5512FEFF call 00BA9C9C 00BC8A47 6A 00 push 0 00BC8A49 E8 B56DFEFF call 00BAF803 00BC8A4E 6A 00 push 0 00BC8A50 C705 8842BD00 A>mov dword ptr ds:[BD4288],0BD4FAC ; ASCII "RC" 00BC8A5A E8 B20CFEFF call 00BA9711 00BC8A5F 59 pop ecx 00BC8A60 59 pop ecx 向下看,找到 00BC8ACB 3348 08 xor ecx,dword ptr ds:[eax+8] 00BC8ACE 2BF9 sub edi,ecx 00BC8AD0 FFD7 call edi <<---------------这里下断~ 00BC8AD2 8BD8 mov ebx,eax 00BC8AD4 5F pop edi 00BC8AD5 8BC3 mov eax,ebx 在00BC8AD0处下断,然后F9运行,在F7跟进去~到这里~ 00499B94 55 push ebp <<---------------这里 00499B95 8BEC mov ebp,esp 00499B97 83C4 F0 add esp,-10 00499B9A 53 push ebx 00499B9B B8 E4984900 mov eax,calc5.004998E4 00499BA0 E8 8BC6F6FF call calc5.00406230 00499BA5 8B1D 1C074B00 mov ebx,dword ptr ds:[4B071C] ; calc5.004B1BF0 00499BAB 68 4C9C4900 push calc5.00499C4C ; ASCII "calc5" 哇噻...都是红色的...看着就是舒服啊.可以DUMP了. 注意这里我使用PeDumper插件来Dump, Dump时把右边的选项都选择上,点获取当前EIP为OEP,然后可以Dump了.保存到一个地方就可以了. 现在到修复IAT的时候了,运行IMPR.OEP处填写99B94,为什么写这个?这个问题别问我~ 把无效的剪切掉修复就OK了.

【破解心得】这里Dump时使用PeDumper因为觉得方便一点~省去了修复Dump文件的步骤,当初刚脱下来修复以后不能运行,经Fly指点才知道是壳修改了PE文件结构,还需要修复以下,这里使用PeDumper插件Dump的文件已经不需要修复了.直接用IMPR修复就能Run了~
上一篇   下一篇