| 
注册时间2005-10-27
阅读权限10
最后登录1970-1-1UID4011 周游历练 
 
 TA的每日心情|  | 开心 2017-2-23 16:41
 | 
|---|
 签到天数: 1 天 [LV.1]初来乍到 | 
 
| [转帖] 脱壳教程Armadillo3.05 by 笨虫虫 
 软件名称:windows98 记事本
 
 
 下载地址:windows自带
 
 
 加壳方式:armadillo3.05
 
 软件功能:文字记录
 
 
 编译语言:VC++
 
 
 破解工具:OllyDbg v1.10原版,ImportREC 1.6 Final,LordPE
 
 脱壳作者:笨虫虫
 
 大家好!我是燃烧吧菜鸟学堂和黑客基地的VIP会员笨虫虫,今天我们来玩玩armadillo3.05,玩破解久的人都知道armadillo是根难啃的骨头,所以今天我们就来啃啃这根骨头。高手就不用看了嘛,这个适合我们小菜鸟来学习。
 脱armadillo一般是3大断点法!
 1、BP OpenMutexA
 2、BP GetModuleHandleA 或者是he GetModuleHandleA+5
 3、BP GetCurrentThreadId
 
 *****************************************
 首先我们用OD载入加了壳的记事本忽略所有异常,隐藏插件,先下OpenMutexA断点F9运行
 7C82827A >  8BFF            mov edi,edi //我们停到这里,可能你与我的不一样
 7C82827C    55              push ebp
 7C82827D    8BEC            mov ebp,esp
 7C82827F    51              push ecx
 7C828280    51              push ecx
 7C828281    837D 10 00      cmp dword ptr ss:[ebp+10],0
 7C828285    56              push esi
 
 看到堆栈
 
 0012F5B0   00411DA6  /CALL 到 OpenMutexA 来自 NOTEPAD3.00411DA0
 0012F5B4   001F0001  |Access = 1F0001
 0012F5B8   00000000  |Inheritable = FALSE
 0012F5BC   0012FBF0  \MutexName = "6C8:A2591DD25" //这个地方法,一会我们要到0012FBF0这个值
 
 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
 撤消刚才做的选择,右键-》撤消选择
 *****************************************
 
 2、下GetModuleHandleA断点F9运行
 
 7C80C85C >  8BFF            mov edi,edi         //我们断在这里,可能你的与我不一样,这是没有关系的,取消断点
 7C80C85E    55              push ebp
 7C80C85F    8BEC            mov ebp,esp
 7C80C861    837D 08 00      cmp dword ptr ss:[ebp+8],0//主要看这里
 7C80C865    74 18           je short kernel32.7C80C87F//我们这里下断,F2
 
 按F9,注意堆栈
 ****************
 0012EC9C  /0012ECD4
 0012ECA0  |77C07962  返回到 msvcrt.77C07962 来自 kernel32.GetModuleHandleA
 0012ECA4  |77BE31BC  ASCII "kernel32.dll"
 0012ECA8  |77C31A70  msvcrt.77C31A70
 
 0012ED44  /0012ED60
 0012ED48  |77CA5E74  返回到 SHLWAPI.77CA5E74 来自 kernel32.GetModuleHandleA
 0012ED4C  |77CA5270  ASCII "KERNEL32.DLL"
 0012ED50  |00000001
 
 0012EC84  /0012ECBC
 0012EC88  |77F700FC  返回到 COMCTL32.77F700FC 来自 kernel32.GetModuleHandleA
 0012EC8C  |77F70148  ASCII "kernel32.dll"
 0012EC90  |77FB5BE8  COMCTL32.77FB5BE8
 
 0012F558  /0012F5B8
 0012F55C  |00411073  返回到 NOTEPAD3.00411073 来自 kernel32.GetModuleHandleA
 0012F560  |00000000
 0012F564  |7C93F012  返回到 ntdll.7C93F012 来自 ntdll.7C93EA73
 
 0012C27C  /0012C508
 0012C280  |003C5331  返回到 003C5331 来自 kernel32.GetModuleHandleA
 0012C284  |0012C3BC  ASCII "kernel32.dll"//看到这里就是返回时机了
 
 ****************
 
 此时,取消断点,按Ctrl+F9&F7返回!
 
 003C5331    8B0D 60D83E00   mov ecx,dword ptr ds:[3ED860]
 003C5337    89040E          mov dword ptr ds:[esi+ecx],eax
 003C533A    A1 60D83E00     mov eax,dword ptr ds:[3ED860]
 003C533F    393C06          cmp dword ptr ds:[esi+eax],edi
 003C5342    75 16           jnz short 003C535A
 003C5344    8D85 B4FEFFFF   lea eax,dword ptr ss:[ebp-14C]
 003C534A    50              push eax
 003C534B    FF15 B8503E00   call dword ptr ds:[3E50B8]         ; kernel32.LoadLibraryA
 003C5351    8B0D 60D83E00   mov ecx,dword ptr ds:[3ED860]
 003C5357    89040E          mov dword ptr ds:[esi+ecx],eax
 003C535A    A1 60D83E00     mov eax,dword ptr ds:[3ED860]
 003C535F    393C06          cmp dword ptr ds:[esi+eax],edi
 003C5362    0F84 AD000000   je 003C5415   //Magic Jump,改成jmp
 003C5368    33C9            xor ecx,ecx
 003C536A    8B03            mov eax,dword ptr ds:[ebx]
 003C536C    3938            cmp dword ptr ds:[eax],edi
 
 *****************************************
 第三、下GetCurrentThreadId断点 按F9运行
 
 注意看堆栈
 *************
 0012BB40   73391E36  /CALL 到 GetCurrentThreadId 来自 73391E30
 0012BB44   00000001
 0012BB48   73391C1A  返回到 73391C1A 来自 73391DE2
 0012BB4C   73391B60  返回到 73391B60 来自 73391B8C
 
 0012BB20   7339353F  /CALL 到 GetCurrentThreadId 来自 73393539
 0012BB24   00000000
 0012BB28   734A0470
 0012BB2C   734A04D8
 
 0012F5A8   003DCF2D  /CALL 到 GetCurrentThreadId 来自 003DCF27//是时候返回了
 0012F5AC   0012FF2C
 0012F5B0   00000000
 0012F5B4   7FFDE000
 *************
 
 此时,取消断点,按F7返回!
 
 003DCF2D    A3 F0183F00     mov dword ptr ds:[3F18F0],eax //回来到这里,我们按F8往下走
 003DCF32    E8 2487FEFF     call 003C565B
 003DCF37    6A 00           push 0
 003DCF39    E8 4BD9FEFF     call 003CA889
 003DCF3E    59              pop ecx
 003DCF3F    E8 7D39FFFF     call 003D08C1
 003DCF44    8BF8            mov edi,eax
 003DCF46    A1 E0183F00     mov eax,dword ptr ds:[3F18E0]
 003DCF4B    8B48 74         mov ecx,dword ptr ds:[eax+74]
 003DCF4E    3348 5C         xor ecx,dword ptr ds:[eax+5C]
 003DCF51    3308            xor ecx,dword ptr ds:[eax]
 003DCF53    03F9            add edi,ecx
 003DCF55    8B0E            mov ecx,dword ptr ds:[esi]
 003DCF57    85C9            test ecx,ecx
 003DCF59    75 2E           jnz short 003DCF89
 003DCF5B    8B78 5C         mov edi,dword ptr ds:[eax+5C]
 003DCF5E    E8 5E39FFFF     call 003D08C1
 003DCF63    8B0D E0183F00   mov ecx,dword ptr ds:[3F18E0]      ; NOTEPAD3.0043D258
 003DCF69    FF76 14         push dword ptr ds:[esi+14]
 003DCF6C    8B51 74         mov edx,dword ptr ds:[ecx+74]
 003DCF6F    FF76 10         push dword ptr ds:[esi+10]
 003DCF72    33D7            xor edx,edi
 003DCF74    3311            xor edx,dword ptr ds:[ecx]
 003DCF76    FF76 0C         push dword ptr ds:[esi+C]
 003DCF79    03C2            add eax,edx
 003DCF7B    8B51 78         mov edx,dword ptr ds:[ecx+78]
 003DCF7E    3351 14         xor edx,dword ptr ds:[ecx+14]
 003DCF81    33D7            xor edx,edi
 003DCF83    2BC2            sub eax,edx
 003DCF85    FFD0            call eax
 003DCF87    EB 25           jmp short 003DCFAE
 003DCF89    83F9 01         cmp ecx,1
 003DCF8C    75 22           jnz short 003DCFB0
 003DCF8E    FF76 04         push dword ptr ds:[esi+4]
 003DCF91    FF76 08         push dword ptr ds:[esi+8]
 003DCF94    6A 00           push 0
 003DCF96    E8 2639FFFF     call 003D08C1
 003DCF9B    50              push eax
 003DCF9C    A1 E0183F00     mov eax,dword ptr ds:[3F18E0]
 003DCFA1    8B48 78         mov ecx,dword ptr ds:[eax+78]
 003DCFA4    3348 5C         xor ecx,dword ptr ds:[eax+5C]
 003DCFA7    3348 14         xor ecx,dword ptr ds:[eax+14]
 003DCFAA    2BF9            sub edi,ecx
 003DCFAC    FFD7            call edi //看到EDI的值了吗?edi=004010CC (NOTEPAD3.004010CC)
 98记事本的入口。我们按F8进入。呵呵一片红色
 *************************************************
 004010CC     55                  push ebp   //用LordPE Dump!
 004010CD     8BEC                mov ebp,esp
 004010CF     83EC 44             sub esp,44
 004010D2     56                  push esi
 004010D3     FF15 E4634000       call dword ptr ds:[4063E4]        ; kernel32.GetCommandLineA
 004010D9     8BF0                mov esi,eax
 004010DB     8A00                mov al,byte ptr ds:[eax]
 004010DD     3C 22               cmp al,22
 004010DF     75 1B               jnz short NOTEPAD3.004010FC
 注意不要关OD,直接打开ImprotREC否则不能修复成功,选择我们要脱的进程。然后输入OEP,10cc。自动搜索IAT-》获取输入表,有一个假指针-》点显示无效函数-》右键-》剪切指针-》修复抓取文件
 呵呵~~成功
 | 
 |