安全中国首页 > 文章中心 > 加壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

Armadillo V3.40标准加壳方式的脱壳——Win98的Notepad

更新时间:2008-5-11 0:07:18
责任编辑:流火
热 点:
下载地址:  http://www.siliconrealms.com/download/Armd340.exe  
软件大小:  1.63M 

【软件简介】:Armadillo is a powerful software protection system. It wraps around your program like an armored shell, defending your work from pirates and program crackers with state-of-the-art encryption, data compression, and other security features. It allows you to design and add a complete software protection and registration-key system to your existing programs in five minutes or less, with no changes to your program’s code! And it works with any language that produces a 32-bit Windows EXE file. 

【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 

【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC 

—————————————————————————————————  
【脱壳过程】: 
           


从其主页下载了Armadillo V3.40,应该是目前的最新版吧? 
试炼品:用Armadillo V3.40标准方式(Standard Protections Only)加壳的Win98的Notepad,想试试就自己加吧。 

Armadillo是当今猛壳之一啦。其CopyMem-II+Debug-Blocker的加壳方式是非常强劲的,其标准加壳方式相对来说则容易的多。无聊时偶来捏捏软柿子, 看看V3.40的标准加壳有无变化。 

用IsDebug 1.4插件去掉Ollydbg的调试器标志。设置忽略所有的异常选项。Let’s Go! 


00425869   55                     push ebp 
                                  ====>进入OD后断在这! 

F9运行,弹出“未授权”的Armadillo保护提示。偶们下断:BP GetModuleHandleA+5  点OK后断下。当然,对于用注册版加壳的没有这个提示,可以直接在GetModuleHandleA+5处下 硬件执行 断点。断下后看看堆栈: 

77E59F93     837C24 04 00         cmp dword ptr ss:[esp+4],0 
77E59F98     0F84 23060000        je kernel32.77E5A5C1 
                                  ====>断在这!按7次F9,然后取消断点,Ctrl+F9执行到返回 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 
BP GetModuleHandleA+5  中断后的堆栈变化: 


0012BE84    00AA6A5E   返回到 00AA6A5E 来自 kernel32.GetModuleHandleA 
0012BE88    0012BFC0   ASCII "kernel32.dll" 

0012BE84    00AA6A5E   返回到 00AA6A5E 来自 kernel32.GetModuleHandleA 
0012BE88    0012BFC0   ASCII "user32.dll" 

0012BE84    00AA6A5E  返回到 00AA6A5E 来自 kernel32.GetModuleHandleA 
0012BE88    0012BFC0  ASCII "MSVBVM60.DLL" 

0012B77C    66001BB1   返回到 66001BB1 来自 kernel32.GetModuleHandleA 
0012B780    66003DA8   ASCII "kernel32.dll" 

0012B770    66002848   返回到 66002848 来自 kernel32.GetModuleHandleA 
0012B774    66003DD4   ASCII "KERNEL32" 

0012B768    660031FB   返回到 660031FB 来自 kernel32.GetModuleHandleA 
0012B76C    00000000 

0012BE84    00AA6A5E   返回到 00AA6A5E 来自 kernel32.GetModuleHandleA 
0012BE88    0012BFC0   ASCII "advapi32.dll" 

0012C110    00ABE6C1   返回到 00ABE6C1 来自 kernel32.GetModuleHandleA 
0012C114    00000000   //好了,到此为止吧  再来几次就运行了 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 

77E59F9E     FF7424 04            push dword ptr ss:[esp+4] 
77E59FA2     E8 55080000          call kernel32.77E5A7FC 
77E59FA7     85C0                 test eax,eax 
77E59FA9     74 08                je short kernel32.77E59FB3 
77E59FAB     FF70 04              push dword ptr ds:[eax+4] 
77E59FAE     E8 B0060000          call kernel32.GetModuleHandleW 
77E59FB3     C2 0400              retn 4 
                                  ====>返回到 00ABE6C1 

———————————————————————— 

00ABE6BB     FF15 C4C0AC00        call dword ptr ds:[ACC0C4]              ; kernel32.GetModuleHandleA 
00ABE6C1     3985 B0E9FFFF        cmp dword ptr ss:[ebp-1650], eax        ; Notepad.00400000 
00ABE6C7     75 0F                jnz short 00ABE6D8 
00ABE6C9     C785ACE9FFFF4002AD00 mov dword ptr ss:[ebp-1654], 0AD0240 
00ABE6D3     E9 C4000000          jmp 00ABE79C 
00ABE6D8     83A5 84E7FFFF 00     and dword ptr ss:[ebp-187C], 0 
00ABE6DF     C78580E7FFFF5008AD00 mov dword ptr ss:[ebp-1880], 0AD0850 
00ABE6E9     EB 1C                jmp short 00ABE707 
00ABE6EB     8B85 80E7FFFF        mov eax, dword ptr ss:[ebp-1880] 
00ABE6F1     83C0 0C              add eax, 0C 
00ABE6F4     8985 80E7FFFF        mov dword ptr ss:[ebp-1880], eax 
00ABE6FA     8B85 84E7FFFF        mov eax, dword ptr ss:[ebp-187C] 
00ABE700     40                   inc eax 
00ABE701     8985 84E7FFFF        mov dword ptr ss:[ebp-187C], eax 
00ABE707     8B85 80E7FFFF        mov eax, dword ptr ss:[ebp-1880] 
00ABE70D     8338 00              cmp dword ptr ds:[eax], 0 
00ABE710     0F84 86000000        je 00ABE79C   //在这里偶中断了6次 
                                  ====>这就是那个Magic Jump    
此处下 硬件执行 断点,每次断下后改标志Z=1,使其JMP,就能得到未被破坏的输入表了  

接着下断:BP GetCurrentThreadId   断下后取消断点,Ctrl+F9执行到返回   

77E57CC4     64:A1 18000000       mov eax, dword ptr fs:[18] 
77E57CCA     8B40 24              mov eax, dword ptr ds:[eax+24] 
77E57CCD     C3                   retn 
                                  ====>返回到 00AC1351 


00AC134B     FF15 14C1AC00        call dword ptr ds:[ACC114]   ; kernel32.GetCurrentThreadId 
00AC1351     A3 F0B8AD00          mov dword ptr ds:[ADB8F0], eax 
                                  ====>返回到这里  向下找CALL EDI,在00AC13E4处,F2下断 
00AC1356     E8 E759FEFF          call 00AA6D42 
00AC135B     6A 00                push 0 
00AC135D     E8 FBB1FEFF          call 00AAC55D 
00AC1362     6A 00                push 0 
00AC1364     C7054418AD008022AD00 mov dword ptr ds:[AD1844], 0AD2280      ; ASCII "RC" 
00AC136E     E8 A22D0000          call 00AC4115 
00AC1373     59                   pop ecx 
00AC1374     59                   pop ecx 
00AC1375     E8 1B2BFFFF          call 00AB3E95 

1 2 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画