首页
社区
课程
招聘
两个Armadillo 1.xx - 2.xx的脱壳
发表于: 2005-11-24 23:22 5008

两个Armadillo 1.xx - 2.xx的脱壳

2005-11-24 23:22
5008
StayOn Pro 4.0  Armadillo 1.xx - 2.xx 双进程脱壳

软件大小:485KB
软件语言:简体中文
软件类别:国外软件/共享版/网络辅助
运行环境:Win9x/Me/NT/2000/XP
加入时间:2003-6-10 16:35:55
下载次数:331
下载地址:e64K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3E0K6i4K6u0W2L8$3&6D9K9h3&6W2k6r3!0%4L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4G2k6Y4c8Q4x3V1j5%4x3K6t1I4i4K6u0W2K9s2c8E0
软件介绍:保持你的Internet连接性,如果你要离开,但是又不想下网,用这个可以保持网络连接,避免你被强行断线。  

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
            
【调试环境】:WinXPSP2、flyODBG、PEiD、LordPE、ImportREC

00444974 StayOn_P.<>/$  55               push ebp     //进入OllyDbg后暂停在这里
00444975            |.  8BEC             mov ebp,esp
00444977            |.  6A FF            push -1
00444979            |.  68 00E64400      push StayOn_P.0044E600
0044497E            |.  68 94444400      push StayOn_P.00444494    ;  SE 句柄安装
00444983            |.  64:A1 00000000   mov eax,dword ptr fs:[0]
00444989            |.  50               push eax
0044498A            |.  64:8925 00000000 mov dword ptr fs:[0],esp

***********************************
转换为单进程
下断Bp OpenMutexA F9运行
***********************************

7C80EC1B kernel32.O>  8BFF               mov edi,edi //到这里
7C80EC1D              55                 push ebp
7C80EC1E              8BEC               mov ebp,esp
7C80EC20              51                 push ecx
7C80EC21              51                 push ecx
7C80EC22              837D 10 00         cmp dword ptr ss:[ebp+10],0
7C80EC26              56                 push esi
7C80EC27              0F84 7A500300      je kernel32.7C843CA7
7C80EC2D              64:A1 18000000     mov eax,dword ptr fs:[18]
7C80EC33              FF75 10            push dword ptr ss:[ebp+10]
7C80EC36              8DB0 F80B0000      lea esi,dword ptr ds:[eax+BF8]

//看堆栈
0012F5B8   0043F85D   /CALL 到 OpenMutexA 来自 StayOn_P.0043F857
0012F5BC   001F0001   |Access = 1F0001
0012F5C0   00000000   |Inheritable = FALSE
0012F5C4   0012FBF8   \MutexName = "DA0::DAA99D8E17"  //这个可能不同

Ctrl+g 401000
60 9C 68 F8 FB 12 00 33 C0 50 50 E8 2F DB 40 7C 9D 61 E9 04 DC 40 7C
00401000              60                 pushad
//新建立EIP  再F9
00401001              9C                 pushfd
00401002              68 F8FB1200        push 12FBF8   //<----                     
00401007              33C0               xor eax,eax
00401009              50                 push eax
0040100A              50                 push eax
0040100B              E8 2FDB407C        call kernel32.CreateMutexA
00401010              9D                 popfd
00401011              61                 popad
00401012            - E9 04DC407C        jmp kernel32.OpenMutexA

F9 运行 然后在Ctrl+g 401000撤消修改后  取消断点 bc OpenMutexA

下硬件断点he GetModuleHandleA      
***********************************
每一次F9运行时候,所出现的堆栈情况!
***********************************
0012ED68   77F45BD8   /CALL 到 GetModuleHandleA 来自 77F45BD2
0012ED6C   77F4501C   \pModule = "KERNEL32.DLL"
0012ED70   00000001
0012ED74   77F40000
0012ED78   00000000
0012ED7C   00004DF2
0012ED80  /0012ED94
0012ED84  |77F452DD   返回到 77F452DD 来自 77F45BB5

0012E55C   5D175394   /CALL 到 GetModuleHandleA 来自 5D17538E
0012E560   5D1753E0   \pModule = "kernel32.dll"
0012E564   5D1E2B38
0012E568   00000000
0012E56C   5D170000
0012E570   7C812972   返回到 kernel32.7C812972 来自ntdll.RtlCreateHeap

0012F570   0043EDD9   /CALL 到 GetModuleHandleA 来自 StayOn_P.0043EDD3
0012F574   00000000   \pModule = NULL
0012F578   0044B50C   ASCII "RegisterServiceProcess"

0012E210   003D5DC8   /CALL 到 GetModuleHandleA 来自 003D5DC2
0012E214   003EA7F8   \pModule = "kernel32.dll"
0012E218   003EB09C   ASCII "InvalidKey"

0012E210   003D5DC8   /CALL 到 GetModuleHandleA 来自 003D5DC2
0012E214   003EA7EC   \pModule = "user32.dll"
0012E218   003EB09C   ASCII "InvalidKey"

0012E24C   003DF6BD   /CALL 到 GetModuleHandleA 来自 003DF6B7
0012E250   00AF1480   \pModule = "WSOCK32.dll"
0012E254   0047F738   StayOn_P.0047F738
0012E258   0047F738   StayOn_P.0047F738

0012E230   003D622B   /CALL 到 GetModuleHandleA 来自 003D6225
0012E234   00000000   \pModule = NULL   //到这里就可以返回了
0012E238   00000073
0012E23C   00AF1497
0012E240   00000000

//取消硬件断点返回(ALT+F9)

003D622B              8B4D 08            mov ecx,dword ptr ss:[ebp+8]  ; WSOCK32.#1139
//来到这里
003D622E              3BC8               cmp ecx,eax
003D6230              75 07              jnz short 003D6239
003D6232              B8 98A33E00        mov eax,3EA398
003D6237              EB 30              jmp short 003D6269
003D6239              393D C8A73E00      cmp dword ptr ds:[3EA7C8],edi
003D623F              B8 C8A73E00        mov eax,3EA7C8
003D6244              74 0C              je short 003D6252  //Magic Jump,改jmp!
003D6246              3B48 08            cmp ecx,dword ptr ds:[eax+8]
003D6249              74 1B              je short 003D6266
此时第一个断点的任务完成!

********************************************************************************************
再下硬件断点
he GetCurrentThreadId

0012F5B4   003E0AFB   /CALL 到 GetCurrentThreadId 来自 003E0AF5
0012F5B8   0012FF2C
0012F5BC   00000000     // 到这里就可以取消硬件断点 返回了

003E0AFB              A3 380D3F00        mov dword ptr ds:[3F0D38],eax //回到这里
003E0B00              E8 9754FFFF        call 003D5F9C
003E0B05              6A 00              push 0    //-----第一个
003E0B07              E8 6973FFFF        call 003D7E75
003E0B0C              59                 pop ecx
003E0B0D              E8 B0E3FFFF        call 003DEEC2
003E0B12              8B06               mov eax,dword ptr ds:[esi]
003E0B14              85C0               test eax,eax
003E0B16              74 23              je short 003E0B3B
003E0B18              E8 A5E3FFFF        call 003DEEC2
.
.
.
003E0B4A              A1 2C0D3F00        mov eax,dword ptr ds:[3F0D2C]
003E0B4F              FF76 08            push dword ptr ds:[esi+8]
003E0B52              8B48 28            mov ecx,dword ptr ds:[eax+28]
003E0B55              3348 20            xor ecx,dword ptr ds:[eax+20]
003E0B58              6A 00              push 0    //----第二个
003E0B5A              3348 1C            xor ecx,dword ptr ds:[eax+1C]
003E0B5D              03F9               add edi,ecx
003E0B5F              E8 5EE3FFFF        call 003DEEC2
003E0B64              50                 push eax
003E0B65              FFD7               call edi  
//直接到这下“硬件执行”断点,F9,取消断点,F7进入

此时第二个断点的任务完成!
**********************************************************************

0040DED2              55                 push ebp      
//到这里了,OEP!LordPE-纠正映像-Dump!红色海洋
0040DED3              8BEC               mov ebp,esp
0040DED5              6A FF              push -1
0040DED7              68 38C34200        push StayOn_P.0042C338
0040DEDC              68 8C054100        push StayOn_P.0041058C
0040DEE1              64:A1 00000000     mov eax,dword ptr fs:[0]
0040DEE7              50                 push eax
0040DEE8              64:8925 00000000   mov dword ptr fs:[0],esp
0040DEEF              83EC 58            sub esp,58
0040DEF2              53                 push ebx
0040DEF3              56                 push esi
0040DEF4              57                 push edi
0040DEF5              8965 E8            mov dword ptr ss:[ebp-18],esp
0040DEF8              FF15 90824200      call dword ptr ds:[428290]                 ;

kernel32.GetVersion

OD,不要关!打开import--选择进程--OEP输入DED2--自动搜索IAT--获取输入表--显示无效函数--CUT!
抓取修复  --搞定

减肥:LordPE 编辑区段
擦除区断头  .text1  .data1  .pdata 然后重建PE

软件名称:PRTG v3.26
加壳方式:Armadillo 1.xx - 2.xx 一个标准壳
破解工具:Ollydbg,Hiew,ImportREC
软件介绍:PRTG v3.26是windows平台下的MRTG,它利用SNMP协议对网络流量,CPU负载,内存利用率等数据的进行监控,并且生成各种统计图形,Web页面和报表。MRTG使用起来复杂,操作都是命令行格式,需要perl支持,而PRTG提供图形化的向导,方便简单。
软件下载:4f5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8S2k6i4y4K6L8r3g2J5i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6H3M7Y4c8Y4

0067A5F9 prtg3.<Mod>/$  55               push ebp    //进入OllyDbg后暂停在这里
0067A5FA            |.  8BEC             mov ebp,esp
0067A5FC            |.  6A FF            push -1
0067A5FE            |.  68 386A6900      push prtg3.00696A38
0067A603            |.  68 E09F6700      push prtg3.00679FE0                        ;  SE 句柄安装
0067A608            |.  64:A1 00000000   mov eax,dword ptr fs:[0]
0067A60E            |.  50               push eax
0067A60F            |.  64:8925 00000000 mov dword ptr fs:[0],esp

下硬件断点he GetModuleHandleA  
7C80B529 kernel32.G>  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
7C80B534              FF75 08            push dword ptr ss:[ebp+8]
7C80B537              E8 682D0000        call kernel32.7C80E2A4
7C80B53C              85C0               test eax,eax
7C80B53E              74 08              je short kernel32.7C80B548
7C80B540              FF70 04            push dword ptr ds:[eax+4]
7C80B543              E8 F4300000        call kernel32.GetModuleHandleW
7C80B548              5D                 pop ebp
7C80B549              C2 0400            retn 4
   
***********************************
每一次F9运行时候,所出现的堆栈情况!
***********************************
0012EC6C   5D175394   /CALL 到 GetModuleHandleA 来自 5D17538E
0012EC70   5D1753E0   \pModule = "kernel32.dll"

0012ED2C   77F45BD8   /CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BD2
0012ED30   77F4501C   \pModule = "KERNEL32.DLL"
0012ED34   00000001

0012BB18   0112F55A   /CALL 到 GetModuleHandleA 来自 0112F554
0012BB1C   01140B58   \pModule = "kernel32.dll"
0012BB20   01141BB4   ASCII "VirtualAlloc"

0012BB18   0112F577   /CALL 到 GetModuleHandleA 来自 0112F571
0012BB1C   01140B58   \pModule = "kernel32.dll"
0012BB20   01141BA8   ASCII "VirtualFree"

0012B890   01119660   /CALL 到 GetModuleHandleA 来自 0111965A
0012B894   0012B9CC   \pModule = "kernel32.dll"  
0012B898   00000000    //到这里就可以返回了

//hd GetModuleHandleA 取消硬件断点返回(ALT+F9)  

01119660              8B0D C04C1401      mov ecx,dword ptr ds:[1144CC0]
01119666              89040E             mov dword ptr ds:[esi+ecx],eax
01119669              A1 C04C1401        mov eax,dword ptr ds:[1144CC0]
0111966E              393C06             cmp dword ptr ds:[esi+eax],edi
01119671              75 16              jnz short 01119689
01119673              8D85 B4FEFFFF      lea eax,dword ptr ss:[ebp-14C]
01119679              50                 push eax
0111967A              FF15 D0B01301      call dword ptr ds[113B0D0]                ; kernel32.LoadLibraryA
01119680              8B0D C04C1401      mov ecx,dword ptr ds:[1144CC0]
01119686              89040E             mov dword ptr ds:[esi+ecx],eax
01119689              A1 C04C1401        mov eax,dword ptr ds:[1144CC0]
0111968E              393C06             cmp dword ptr ds:[esi+eax],edi
01119691              0F84 AD000000      je 01119744      //Magic Jump,改jmp!
01119697              33C9               xor ecx,ecx

此时第一个断点的任务完成!

********************************************************************************************

再下硬件断点
he GetCurrentThreadId  F9运行

7C809737 kernel32.G>  64:A1 18000000     mov eax,dword ptr fs:[18]  //来到这里
7C80973D              8B40 24            mov eax,dword ptr ds:[eax+24]
7C809740              C3                 retn
7C809741              90                 nop

***********************************
每一次F9运行时候,所出现的堆栈情况!
***********************************
0012B150   73391E36   /CALL 到 GetCurrentThreadId 来自 73391E30
0012B154   00000001
0012B158   73391C1A   返回到 73391C1A 来自 73391DE2
0012B15C   73391B60   返回到 73391B60 来自 73391B8C

0012AD64   77BB1EEB   /CALL 到 GetCurrentThreadId 来自 MSACM32.77BB1EE5
0012AD68   C0000000
0012AD6C   00000001
0012AD70   77BB19F0   UNICODE "Priority%u"

0012ACE8   77BB1EEB   /CALL 到 GetCurrentThreadId 来自 MSACM32.77BB1EE5
0012ACEC   00000000
0012ACF0   0014FFE8

0012B394   73AD268E   /CALL 到 GetCurrentThreadId 来自 avifil32.73AD2688
0012B398   73AD4004   avifil32.73AD4004
0012B39C   FFFFFFFF
0012B3A0   77BFC3CE   返回到 msvcrt.77BFC3CE 来自 msvcrt.77C0745B

0012F594   011375DE   /CALL 到 GetCurrentThreadId 来自 011375D8
0012F598   0012FF2C
0012F59C   00000000   //看见到这里就可以 取消断点返回了

//hd GetCurrentThreadId 取消硬件断点返回(ALT+F9)

此时第二个断点的任务完成!

********************************************************************************************

011375DE              A3 A0911401        mov dword ptr ds:[11491A0],eax //返回到这里
011375E3              E8 6823FEFF        call 01119950
011375E8              6A 00              push 0     //-----第一个
011375EA              E8 AF7CFEFF        call 0111F29E
011375EF              6A 00              push 0
011375F1              C705 78101401 201C>mov dword ptr ds:[1141078],1141C20         ; ASCII "RC"
011375FB              E8 C61DFEFF        call 011193C6
01137600              59                 pop ecx
01137601              59                 pop ecx
01137602              E8 7205FFFF        call 01127B79
.
.
.
.
01137650              FFD0               call eax
01137652              EB 25              jmp short 01137679
01137654              83F9 01            cmp ecx,1
01137657              75 22              jnz short 0113767B
01137659              FF76 04            push dword ptr ds:[esi+4]
0113765C              FF76 08            push dword ptr ds:[esi+8]
0113765F              6A 00              push 0       //-----远处第二个
01137661              E8 1305FFFF        call 01127B79
01137666              50                 push eax
01137667              A1 88901401        mov eax,dword ptr ds:[1149088]
0113766C              8B48 44            mov ecx,dword ptr ds:[eax+44]
0113766F              3348 20            xor ecx,dword ptr ds:[eax+20]
01137672              3348 10            xor ecx,dword ptr ds:[eax+10]
01137675              2BF9               sub edi,ecx
01137677              FFD7               call edi //设置硬件执行断点
//设置硬件执行断点后F9运行 再取消硬件断点 F7进入
01137679              8BD8               mov ebx,eax
0113767B              5F                 pop edi

0061A7EC              55                 push ebp
//到这里了,OEP!LordPE-纠正映像-Dump!   
0061A7ED              8BEC               mov ebp,esp
0061A7EF              B9 08000000        mov ecx,8
0061A7F4              6A 00              push 0
0061A7F6              6A 00              push 0
0061A7F8              49                 dec ecx
0061A7F9            ^ 75 F9              jnz short prtg3.0061A7F4
0061A7FB              51                 push ecx
0061A7FC              53                 push ebx
0061A7FD              B8 CC9F6100        mov eax,prtg3.00619FCC
0061A802              E8 11CDDEFF        call prtg3.00407518
0061A807              33C0               xor eax,eax
0061A809              55                 push ebp

OD,不要关!打开import--选择进程--OEP输入21A7EC--自动搜索IAT--获取输入表--显示无效函数--CUT!
抓取修复  --搞定

减肥:LordPE 编辑区段
擦除区断头  .tls  .adata  .reloc1  .pdata 然后重建PE

脱壳后记:
看了很多脱文一直在郁闷中 希望这里详细的步骤可以给希望学习的朋友一个小小的帮助!

特别感谢:wynney 的《Armadillo几个版本脱壳总结--5个软件实例!超详细!》

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
按键精灵(Quick Macro) v3.60 正式版

是UPX的壳吧
2005-11-24 23:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很不错,思路很清晰,不知道我是不是还能做到这一点!呵呵。。。。
2005-11-25 02:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不好意思 晚上太累 眼睛也昏了~看掉了
不是按键精灵
是PRTG v3.26
如找不到可以去这里看看
af7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3k6J5k6h3g2Q4x3X3g2&6M7K6p5$3z5q4)9J5k6h3y4G2L8g2)9J5c8W2)9K6c8X3S2S2L8$3A6S2j5$3D9`.
2005-11-25 09:57
0
游客
登录 | 注册 方可回帖
返回