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

Armadillo V3.6双进程标准壳 ------神速脱壳大法

更新时间:2008-4-25 0:01:24
责任编辑:池天
热 点:
下载页面: http://www.superrsoft.com/cn/srcom.htm  
软件大小:  5794 KB  
软件语言:  中文  
软件类别:  国产软件 / 共享版 / 网络辅助  
应用平台:  Win9x/NT/2000/XP  

【说明】:此破文结合了Fly、mysqladm、pyzpyz、jwh51、骨灰C( MM)大虾们所写的破文,在此谢谢他们了,这是我第一次学OLLYDBG和脱Armadillo的壳,请各位大侠多多指教! 

【作者声明】:只作为学习技术用,没有其他任何商业目的,失误之处敬请诸位大侠赐教!  

【调试环境】:Win2000、Ollydbg、PEiD、LordPE、ImportREC  

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

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

————————————————————————  
一、使程序把自己当成子进程运行 
00567000 > $Content$nbsp;60             PUSHAD  //进入OD后停在这! 
00567001   . E8 00000000    CALL iepro.00567006 
00567006   $Content$nbsp;5D             POP EBP 
00567007   . 50             PUSH EAX 
00567008   . 51             PUSH ECX 
00567009   . EB 0F          JMP SHORT iepro.0056701A 

下断:BP OpenMutexA  

77E89CE9 > 55               PUSH EBP //断在这,看看堆栈 
77E89CEA   8BEC             MOV EBP,ESP 
77E89CEC   51               PUSH ECX 
77E89CED   51               PUSH ECX 
77E89CEE   837D 10 00       CMP DWORD PTR SS:[EBP+10],0 
77E89CF2   56               PUSH ESI 
77E89CF3   74 50            JE SHORT KERNEL32.77E89D45 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆  
BP OpenMutexA 时的堆栈:  

0012F574   0053E141  /CALL 到 OpenMutexA 
0012F578   001F0001  |Access = 1F0001 
0012F57C   00000000  |Inheritable = FALSE 
0012F580   0012FBB4  \MutexName = "20C::DA3A38CB6B" 
0012F584   0012FF04 
0012F588   00000000 
0012F58C   0055C5D9  iepro.0055C5D9 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 

Ctrl+G:401000  键入以下代码  

00401000     60                  pushad  
00401001     9C                  pushfd  
00401002     68 B4FB1200         push 12FBB4 ★ 堆栈里看到的值  
00401007     33C0                xor eax,eax  
00401009     50                  push eax  
0040100A     50                  push eax  
0040100B     E8 B4B2A577         call kernel32.CreateMutexA  
00401010     9D                  popfd  
00401011     61                  popad  
00401012     E9 33F7A577         jmp kernel32.OpenMutexA 

在401000处新建起源,F9运行,再次中断在OpenMutexA处。 

—————————————————————————————————  
二、Magic Jump,避开IAT加密  

取消以前断点,下断:BP GetModuleHandleA(为什么不下BP GetModuleHandleA+5呢?因为我试了很多次,用这个断点断不下来,所以改用BP GetModuleHandleA) 

77E80978 > 55               PUSH EBP //断在这里 
77E80979   8BEC             MOV EBP,ESP 
77E8097B   837D 08 00       CMP DWORD PTR SS:[EBP+8],0 
77E8097F   75 0E            JNZ SHORT KERNEL32.77E8098F  //重新设置断点在这里 
77E80981   64:A1 18000000   MOV EAX,DWORD PTR FS:[18] 
77E80987   8B40 30          MOV EAX,DWORD PTR DS:[EAX+30] 
77E8098A   8B40 08          MOV EAX,DWORD PTR DS:[EAX+8] 
77E8098D   EB 14            JMP SHORT KERNEL32.77E809A3 
77E8098F   FF75 08          PUSH DWORD PTR SS:[EBP+8] 
77E80992   E8 2E890000      CALL KERNEL32.77E892C5 
77E80997   85C0             TEST EAX,EAX 
77E80999   74 08            JE SHORT KERNEL32.77E809A3 
77E8099B   FF70 04          PUSH DWORD PTR DS:[EAX+4] 
77E8099E   E8 E2000000      CALL KERNEL32.GetModuleHandleW 
77E809A3   5D               POP EBP 
77E809A4   C2 0400          RETN 4 

取消断点,在77E8097F处重新下断点,在这里中断十几次,中间会出现无法处理异常的对话框,用SHIFT+F9跳过就行了;Alt+F9返回程序。判断返回程序的时机: 
☆  ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆  
注意看BP GetModuleHandleA 时的堆栈变化: 

0012BEF8   00BCE3B7  /CALL 到 GetModuleHandleA 来自 00BCE3B1 
0012BEFC   00BDF700  \pModule = "kernel32.dll" 
0012BF00   00BE0710  ASCII "VirtualAlloc" 

0012BEF8   00BCE3D4  /CALL 到 GetModuleHandleA 来自 00BCE3CE 
0012BEFC   00BDF700  \pModule = "kernel32.dll" 
0012BF00   00BE0704  ASCII "VirtualFree" 

//再F9下去就会出现无法处理异常的对话框 

0012BC70  |00BB912E  返回到 00BB912E 来自 KERNEL32.GetModuleHandleA 
0012BC74  |0012BDAC  ASCII "kernel32.dll" 

到这里时就用CTRL+F9返回主程序: 

00BB912E   8B0D 0838BE00    MOV ECX,DWORD PTR DS:[BE3808] 
00BB9134   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX 
00BB9137   A1 0838BE00      MOV EAX,DWORD PTR DS:[BE3808] 
00BB913C   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI 
00BB913F   75 16            JNZ SHORT 00BB9157 
00BB9141   8D85 B4FEFFFF    LEA EAX,DWORD PTR SS:[EBP-14C] 
00BB9147   50               PUSH EAX 
00BB9148   FF15 CCA0BD00    CALL DWORD PTR DS:[BDA0CC]   KERNEL32.LoadLibraryA 
00BB914E   8B0D 0838BE00    MOV ECX,DWORD PTR DS:[BE3808] 
00BB9154   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX 
00BB9157   A1 0838BE00      MOV EAX,DWORD PTR DS:[BE3808] 
00BB915C   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI 
00BB915F   0F84 AD000000    JE 00BB9212    //这里就是我们常说的Magic Jump,把它改为JMP 
00BB9165   33C9             XOR ECX,ECX 
00BB9167   8B03             MOV EAX,DWORD PTR DS:[EBX] 
00BB9169   3938             CMP DWORD PTR DS:[EAX],EDI 
00BB916B   74 06            JE SHORT 00BB9173 

这里所作的修改,可以不需要在IAT处理结束后再还原代码了。 

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

1 2 下一页

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