首页
社区
课程
招聘
[原创]脱壳Armadillo
发表于: 2005-7-7 09:49 3822

[原创]脱壳Armadillo

2005-7-7 09:49
3822
软件名称: 奇迹仓库编辑器MgEdit

编译语言: E语言

破解工具:OllyDbg v1.10修改版,ImportREC 1.6 Final,LordPE

脱壳作者: 夜凉如水

首先我们用od载入加了壳的记事本忽略所有异常,隐藏插件,先下OpenMutexA断点F9运行
0050D379 M>/$  55                push ebp
0050D37A   |.  8BEC              mov ebp,esp
0050D37C   |.  6A FF             push -1
0050D37E   |.  68 78225300       push MgEdit.00532278
0050D383   |.  68 60CD5000       push MgEdit.0050CD60                  ;  SE handler installation

7C80EC1B k>  8BFF                mov edi,edi//停在这里
7C80EC1D     55                  push ebp
7C80EC1E     8BEC                mov ebp,esp
7C80EC20     51                  push ecx
7C80EC21     51                  push ecx

看堆栈
0012F5B0   00503DA6  /CALL 到 OpenMutexA 来自 MgEdit.00503DA0
0012F5B4   001F0001  |Access = 1F0001
0012F5B8   00000000  |Inheritable = FALSE
0012F5BC   0012FBF0  \MutexName = "ADC:A8FDA1550"
Ctrl+G 401000 键入以下代码
00401000     60                  pushad  
00401001     9C                  pushfd  
00401002     68 B4FB1200         push 0012FBF0 ★ 堆栈里看到的值  
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处新建起源,右键-》此处新建EIP
F9运行,再次中断在OpenMutexA处,取消断点。

再次Ctrl+G 401000
撤消刚才做的选择,右键-》撤消选择

下GetModuleHandleA断点F9运行
7C80B529 k>  8BFF                mov edi,edi //短在这里,取消段点.
7C80B52B     55                  push ebp
7C80B52C     8BEC                mov ebp,esp
7C80B52E     837D 08 00          cmp dword ptr ss:[ebp+8],0
7C80B532     74 18               je short kernel32.7C80B54C //再次下段
按F9,注意堆栈
0012ED48   77F45BD8  /CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BD2
0012ED4C   77F4501C  \pModule = "KERNEL32.DLL"
0012ED50   00000001

0012ED44  /0012ED60
0012ED48  |77F45BD8  返回到 SHLWAPI.77F45BD8 来自 kernel32.GetModuleHandleA
0012ED4C  |77F4501C  ASCII "KERNEL32.DLL"

0012EC84  /0012ECBC
0012EC88  |5D175394  返回到 COMCTL32.5D175394 来自 kernel32.GetModuleHandleA
0012EC8C  |5D1753E0  ASCII "kernel32.dll"
0012EC90  |5D1E2B38  COMCTL32.5D1E2B38
0012F558  /0012F5B8

0012F55C  |00503073  返回到 MgEdit.00503073 来自 kernel32.GetModuleHandleA
0012F560  |00000000

0012C27C  /0012C508
0012C280  |00B95331  返回到 00B95331 来自 kernel32.GetModuleHandleA
0012C284  |0012C3BC  ASCII "kernel32.dll"//返回
取消断点,按alt+f9返回!

00B95331     8B0D 60D8BB00       mov ecx,dword ptr ds:[BBD860]
00B95337     89040E              mov dword ptr ds:[esi+ecx],eax
00B9533A     A1 60D8BB00         mov eax,dword ptr ds:[BBD860]
00B9533F     393C06              cmp dword ptr ds:[esi+eax],edi
00B95342     75 16               jnz short 00B9535A
00B95344     8D85 B4FEFFFF       lea eax,dword ptr ss:[ebp-14C]
00B9534A     50                  push eax
00B9534B     FF15 B850BB00       call dword ptr ds:[BB50B8]            ; kernel32.LoadLibraryA
00B95351     8B0D 60D8BB00       mov ecx,dword ptr ds:[BBD860]
00B95357     89040E              mov dword ptr ds:[esi+ecx],eax
00B9535A     A1 60D8BB00         mov eax,dword ptr ds:[BBD860]
00B9535F     393C06              cmp dword ptr ds:[esi+eax],edi
00B95362     0F84 AD000000       je 00B95415//修改为jmp 00b95415
00B95368     33C9                xor ecx,ecx
00B9536A     8B03                mov eax,dword ptr ds:[ebx]
00B9536C     3938                cmp dword ptr ds:[eax],edi

下GetCurrentThreadId断点 按F9运行
看堆栈
0012BB40   66001E3A  /CALL 到 GetCurrentThreadId 来自 66001E34
0012BB44   00000001
0012BB48   66001C1E  返回到 66001C1E 来自 66001DE6
0012BB4C   66001B64  返回到 66001B64 来自 66001B90

0012BB20   66003505  /CALL 到 GetCurrentThreadId 来自 660034FF

0012F5A8   00BACF2D  /CALL 到 GetCurrentThreadId 来自 00BACF27//返回

取消断点,F7返回

00BACF2D     A3 F018BC00         mov dword ptr ds:[BC18F0],eax//F8单不跟踪
00BACF32     E8 2487FEFF         call 00B9565B
00BACF37     6A 00               push 0
00BACF39     E8 4BD9FEFF         call 00B9A889
00BACF3E     59                  pop ecx
00BACF3F     E8 7D39FFFF         call 00BA08C1
00BACF44     8BF8                mov edi,eax
00BACF46     A1 E018BC00         mov eax,dword ptr ds:[BC18E0]
00BACF4B     8B48 74             mov ecx,dword ptr ds:[eax+74]
00BACF4E     3348 5C             xor ecx,dword ptr ds:[eax+5C]
00BACF51     3308                xor ecx,dword ptr ds:[eax]
00BACF53     03F9                add edi,ecx
00BACF55     8B0E                mov ecx,dword ptr ds:[esi]
00BACF57     85C9                test ecx,ecx
00BACF59     75 2E               jnz short 00BACF89
00BACF5B     8B78 5C             mov edi,dword ptr ds:[eax+5C]
00BACF5E     E8 5E39FFFF         call 00BA08C1
00BACF63     8B0D E018BC00       mov ecx,dword ptr ds:[BC18E0]         ; MgEdit.0052F258
00BACF69     FF76 14             push dword ptr ds:[esi+14]
00BACF6C     8B51 74             mov edx,dword ptr ds:[ecx+74]
00BACF6F     FF76 10             push dword ptr ds:[esi+10]
00BACF72     33D7                xor edx,edi
00BACF74     3311                xor edx,dword ptr ds:[ecx]
00BACF76     FF76 0C             push dword ptr ds:[esi+C]
00BACF79     03C2                add eax,edx
00BACF7B     8B51 78             mov edx,dword ptr ds:[ecx+78]
00BACF7E     3351 14             xor edx,dword ptr ds:[ecx+14]
00BACF81     33D7                xor edx,edi
00BACF83     2BC2                sub eax,edx
00BACF85     FFD0                call eax
00BACF87     EB 25               jmp short 00BACFAE
00BACF89     83F9 01             cmp ecx,1
00BACF8C     75 22               jnz short 00BACFB0
00BACF8E     FF76 04             push dword ptr ds:[esi+4]
00BACF91     FF76 08             push dword ptr ds:[esi+8]
00BACF94     6A 00               push 0
00BACF96     E8 2639FFFF         call 00BA08C1
00BACF9B     50                  push eax
00BACF9C     A1 E018BC00         mov eax,dword ptr ds:[BC18E0]
00BACFA1     8B48 78             mov ecx,dword ptr ds:[eax+78]
00BACFA4     3348 5C             xor ecx,dword ptr ds:[eax+5C]
00BACFA7     3348 14             xor ecx,dword ptr ds:[eax+14]
00BACFAA     2BF9                sub edi,ecx
00BACFAC     FFD7                call edi//F7进入

004FC001     60                  pushad //F8一步
004FC002     E8 03000000         call MgEdit.004FC00A
004FC007   - E9 EB045D45         jmp 45ACC4F7
004FC00C     55                  push ebp
004FC00D     C3                  retn
在004FC001处按F8一次,来到004FC002,此时看寄存器区域,ESP=0012F598,对,就是使用ESP定律,右键--->跟进到数据窗口,
在数据窗口上右键--->断点--->硬件访问--->Dword,然后F9运行

004FC3B0    /75 08               jnz short MgEdit.004FC3BA//断在这里 取消断点
004FC3B2    |B8 01000000         mov eax,1
004FC3B7    |C2 0C00             retn 0C
004FC3BA    \68 00104000         push MgEdit.00401000//飞向光明之巅
004FC3BF     C3                  retn

00401000     E8 06000000         call MgEdit.0040100B//用LordPE Dump!
00401005     50                  push eax
00401006     E8 BB010000         call MgEdit.004011C6                  ; jmp to kernel32.ExitProcess
0040100B     55                  push ebp

注意不要关OD,直接打开ImprotREC否则不能修复成功,选择我们要脱的进程。然后输入OEP,1000。自动搜索IAT-》获取输入表,有一个假指针-》点显示无效函数-》右键-》剪切指针-》修复抓取文件
呵呵~~成功

本人第一次脱E语言加壳的软件 ,他的开头很有意思 呵呵 call MgEdit.0040100B

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
学习并支持!
2005-7-9 00:40
0
游客
登录 | 注册 方可回帖
返回