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

用Ollydbg手脱Armadillo加壳的Dll

更新时间:2007-12-13 0:16:12
责任编辑:阿loosen
热 点:
破解作者】 jameshero
【使用工具】 PEID、flyODBG修改版
【破解平台】 winXP+SP2
【软件名称】 某服务端程序
【软件简介】 因为涉及到某些商业问题,在这就不说了,看方法吧
【加壳方式】 Armadillo 2.51 - 3.xx DLL Stub
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


一。用PEID查看壳为:Armadillo 2.51 - 3.xx DLL Stub
具体版本不知道,看看先吧!

二。设置flyODBG忽略所有异常选项,OD自动隐藏插件帮你隐藏OD.


OD载入程序。

00944957 >  55                    push ebp
00944958    8BEC                  mov ebp,esp
0094495A    53                    push ebx
0094495B    8B5D 08               mov ebx,dword ptr ss:[ebp+8]
0094495E    56                    push esi
0094495F    8B75 0C               mov esi,dword ptr ss:[ebp+C]
00944962    57                    push edi
00944963    8B7D 10               mov edi,dword ptr ss:[ebp+10]
00944966    85F6                  test esi,esi
---------------------------------------------------------------


下断:BP GetModuleHandleA+5,Shift+F9运行,注意看堆栈:


---------------------------------------------------------------
00069510  |00B452CA    返回到 00B452CA 来自 kernel32.GetModuleHandleA
00069514  |00069660    ASCII "kernel32.dll"
---------------------------------------------------------------


当堆栈变成上面的样子就可以返回了,我们ALT+F9返回程序!


---------------------------------------------------------------

00B452CA    8B0D 3C1EB700         mov ecx,dword ptr ds:[B71E3C]   <---------返回到这
00B452D0    89040E                mov dword ptr ds:[esi+ecx],eax
00B452D3    A1 3C1EB700           mov eax,dword ptr ds:[B71E3C]
00B452D8    391C06                cmp dword ptr ds:[esi+eax],ebx
00B452DB    75 16                 jnz short 00B452F3
00B452DD    8D85 B4FEFFFF         lea eax,dword ptr ss:[ebp-14C]
00B452E3    50                    push eax
00B452E4    FF15 B842B600         call dword ptr ds:[B642B8]        ; kernel32.LoadLibraryA
00B452EA    8B0D 3C1EB700         mov ecx,dword ptr ds:[B71E3C]
00B452F0    89040E                mov dword ptr ds:[esi+ecx],eax
00B452F3    A1 3C1EB700           mov eax,dword ptr ds:[B71E3C]
00B452F8    391C06                cmp dword ptr ds:[esi+eax],ebx
00B452FB    0F84 2F010000         je 00B45430 <--------------MAGICJUMP,改JMP 00B45430
00B45301    33C9                  xor ecx,ecx
00B45303    8B07                  mov eax,dword ptr ds:[edi]
00B45305    3918                  cmp dword ptr ds:[eax],ebx
00B45307    74 06                 je short 00B4530F

----------------------------------------------------------------

(注意:下面的方法和FLY的不太一样)

现在我们Alt+M打开内存查看窗口,看到这个DLL的给个区段



----------------------------------------------------------------
00870000   00001000   KingFor3   00870000 (itself)     PE header //★  这里下 内存访问 断点
00871000   0008B000   KingFor3   00870000  CODE 
008FC000   00002000   KingFor3   00870000  DATA       
008FE000   00001000   KingFor3   00870000  BSS       
----------------------------------------------------------------


现在我们F9运行程序,中断在下面地址
----------------------------------------------------------------
00B585A7    0348 3C               add ecx,dword ptr ds:[eax+3C] 〈------中断在这
00B585AA    898D FCD7FFFF         mov dword ptr ss:[ebp-2804],ecx
00B585B0    A1 C8DFB600           mov eax,dword ptr ds:[B6DFC8]
00B585B5    8985 CCAEFFFF         mov dword ptr ss:[ebp+FFFFAECC],eax
00B585BB    8B85 CCAEFFFF         mov eax,dword ptr ss:[ebp+FFFFAECC]
00B585C1    8985 0CD8FFFF         mov dword ptr ss:[ebp-27F4],eax
00B585C7    8B85 FCD7FFFF         mov eax,dword ptr ss:[ebp-2804]
00B585CD    8B40 50               mov eax,dword ptr ds:[eax+50]
----------------------------------------------------------------



现在我们CTRL+S在整个区段搜索

 mov edx,dword ptr ds:[ecx+C]
 add edx,dword ptr ds:[ecx+8] 
找到下面的地址
----------------------------------------------------------------
00B5E1D7    8D74C1 D8             lea esi,dword ptr ds:[ecx+eax*8-28]
00B5E1DB    33C0                  xor eax,eax
00B5E1DD    3BCE                  cmp ecx,esi
00B5E1DF    73 11                 jnb short 00B5E1F2
00B5E1E1    8B51 0C               mov edx,dword ptr ds:[ecx+C]〈--------找到这
00B5E1E4    0351 08               add edx,dword ptr ds:[ecx+8]〈-------在这下断
00B5E1E7    3BD0                  cmp edx,eax
----------------------------------------------------------------


在上面地址下断以后,ALT+M取消内存断点,F9运行断下
继续F9,会在这多次中断,看“寄存器”窗口的ECX 00870298 ASCII ".reloc"
当出现这个的时候,再看 下面,这个时候显示的就是重定位表RVA和大小
现在我们记下来,取消断点。

1 2 下一页

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