脱壳Armadillo--奇迹仓库编辑器MgEdit
 

软件名称: 奇迹仓库编辑器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 
        
上一篇   下一篇