首页
社区
课程
招聘
手脱Armadillo 3.78 - ST问题与请教(记录中)
发表于: 2005-9-14 13:54 7376

手脱Armadillo 3.78 - ST问题与请教(记录中)

2005-9-14 13:54
7376
////////////
此贴精彩之处不在开始,而是在于过程.在于您的参与.
////////////
基础:只脱过2个标准壳.(且对标准壳的概念模糊)
目的:
   1.学习Armadillo 3.78壳的分析,(标准,COPY MEM,ANTI,CC)
   2.学习Armadillo 3.78脱壳的简单过程.
   3.让和我一样的菜鸟也可以看懂.
/////////////////////
努力学习,天天看雪。
/////////////////////
程序:
[2005/03/09] 冒险岛v25版无敌外挂(反正现在也用不了了,不会损害盛大利益)
说明:绿客出品..
下载地址:780K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6Y4x3e0u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6i4K6u0r3k6r3!0%4L8W2)9#2k6U0t1K6i4K6g2X3x3W2)9J5k6h3S2@1L8b7`.`.
下载后为调试方便改执行程序为英文名 wg.exe
////////////
用PEiD核心扫描判断壳为
Armadillo 3.78 - SiliconRealms Tool
运行程序后在任务管理器里出现2个进程
////////////

打开OD,忽略所有异常,隐藏OD,载入程序 WG.EXE
00436000 >  60              pushad
00436001    E8 00000000     call wg.00436006
00436006    5D              pop ebp
00436007    50              push eax
00436008    51              push ecx
00436009    0FCA            bswap edx
0043600B    F7D2            not edx
0043600D    9C              pushfd
下断 bp OpenMutexA,SHIRT+F9运行,运行到如下
7C817227 >  8BFF            mov edi,edi
7C817229    55              push ebp
7C81722A    8BEC            mov ebp,esp
7C81722C    51              push ecx
7C81722D    51              push ecx
7C81722E    837D 10 00      cmp dword ptr ss:[ebp+10],0
7C817232    56              push esi
7C817233    0F84 B4070400   je kernel32.7C8579ED
7C817239    FF75 10         push dword ptr ss:[ebp+10]
堆栈如下
0012D778   0041C380  /CALL 到 OpenMutexA 来自 wg.0041C37A
0012D77C   001F0001  |Access = 1F0001
0012D780   00000000  |Inheritable = FALSE
0012D784   0012DDB8  \MutexName = "E74::DA17A51CB4"
<<0012DDB8>>
Ctrl+G:401000  键入代码如下
(下面代码就是运行从双进程到单进程的转换-如果错了请指点)
00401000    60              pushad
00401001    52              push edx //edx就是0012ddb8
00401002    6A 00           push 0
00401004    6A 00           push 0
00401006    E8 155A417C     call kernel32.CreateMutexA
0040100B    61              popad
0040100C  - E9 1662417C     jmp kernel32.OpenMutexA
在401000点鼠右键处新建EIP,F9运行,再次中断在OpenMutexA处。
7C817227 >  8BFF            mov edi,edi
7C817229    55              push ebp
7C81722A    8BEC            mov ebp,esp
7C81722C    51              push ecx
7C81722D    51              push ecx
7C81722E    837D 10 00      cmp dword ptr ss:[ebp+10],0
7C817232    56              push esi
7C817233    0F84 B4070400   je kernel32.7C8579ED
取消断点
Ctrl+G:401000 在刚才的那些红色代码上点右键-撤消选择处修改
下断:bp GetModuleHandleA+5 ,F9运行,到这里。取消短点,
7C8263E1    837D 08 00      cmp dword ptr ss:[ebp+8],0
7C8263E5  ^ 0F84 3FC7FFFF   je kernel32.7C822B2A  //并在这里下断
堆锏如下
/1
0012CF10  /0012CF48
0012CF14  |773D7FF9  返回到 773D7FF9 来自 kernel32.GetModuleHandleA
0012CF18  |77372E84  ASCII "kernel32.dll"
多次F9堆兼如下
/2
0012CF54  /0012CF74
0012CF58  |773D5246  返回到 773D5246 来自 kernel32.GetModuleHandleA
0012CF5C  |77372E84  ASCII "kernel32.dll"
0012CF60  |7C8284FF  kernel32.GetProcessHeap
/3
0012CF70  /0012CF90
0012CF74  |71B110E9  返回到 WSOCK32.71B110E9 来自 kernel32.GetModuleHandleA
0012CF78  |71B12F8C  ASCII "kernel32.dll"
/4
0012D718  /0012D780
0012D71C  |0041B4D3  返回到 wg.0041B4D3 来自 kernel32.GetModuleHandleA
0012D720  |00000000
0012D724  |7C82B3C8  返回到 kernel32.7C82B3C8 来自 ntdll.ZwOpenMutant
/5
00127B6C  /0012CE30
00127B70  |00AA18FE  返回到 00AA18FE 来自 kernel32.GetModuleHandleA
00127B74  |00AB6364  ASCII "kernel32.dll"
00127B78  |00AB7588  ASCII "VirtualAlloc"
/6
00127B6C  /0012CE30
00127B70  |00AA191B  返回到 00AA191B 来自 kernel32.GetModuleHandleA
00127B74  |00AB6364  ASCII "kernel32.dll"
00127B78  |00AB757C  ASCII "VirtualFree"
第7次是出现错误提示如下
//不知道如何在地址00AABE74处绕过命令。请常识更改EIP或者忽略异常执行程序。//

!!!!!!!!!!不知道怎么处理了。
到这里我下不去了,请指点指点。如果问题很菜请别见笑。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
期待回答中,自己顶一下.
2005-9-14 14:42
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
SHIFT+F9
2005-9-14 14:44
0
雪    币: 136
活跃值: (220)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
不要太相信PEID 他不可能判断版本那么正确的!!!!!!!!
2005-9-14 15:03
0
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有什么好的东东-工具介绍。说出来,分享一下。
2005-9-14 16:01
0
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
根据刚才-闪电狼-的提示。居然忘了F9惭愧。。
第7次Shirft+F9堆鉴如下
////////////////
001278DC  /00127B70
001278E0  |00A89AF7  返回到 00A89AF7 来自 kernel32.GetModuleHandleA
001278E4  |00127A24  ASCII "kernel32.dll"
////////////////
此时就是返回点了--我是这么认为的:)
取消断点,按ALT+F9返回,到这里
00A89AF7    8B0D 74B7AB00   mov ecx,dword ptr ds:[ABB774]
00A89AFD    89040E          mov dword ptr ds:[esi+ecx],eax
00A89B00    A1 74B7AB00     mov eax,dword ptr ds:[ABB774]
00A89B05    391C06          cmp dword ptr ds:[esi+eax],ebx
00A89B08    75 16           jnz short 00A89B20
00A89B0A    8D85 B4FEFFFF   lea eax,dword ptr ss:[ebp-14C]
00A89B10    50              push eax
00A89B11    FF15 DC00AB00   call dword ptr ds:[AB00DC]               ; kernel32.LoadLibraryA
00A89B17    8B0D 74B7AB00   mov ecx,dword ptr ds:[ABB774]
00A89B1D    89040E          mov dword ptr ds:[esi+ecx],eax
00A89B20    A1 74B7AB00     mov eax,dword ptr ds:[ABB774]
00A89B25    391C06          cmp dword ptr ds:[esi+eax],ebx
00A89B28    0F84 32010000   je 00A89C60   >>注意这里
00A89B2E    33C9            xor ecx,ecx
00A89B30    8B07            mov eax,dword ptr ds:[edi]
00A89B32    3918            cmp dword ptr ds:[eax],ebx
///////////////////
找到了这个就是魔术跳转吧。
00A89B28    0F84 32010000   je 00A89C60   >>注意这里
马上点右键-汇编  修改为 jmp 00A89C60
然后按 Alt+M 在0040100 上点右键 -> 选择设置内存访问断点。

然后F9,一片红啊。。。。
仔细一看不对啊。如下
00AA5DF8    8B04B0          mov eax,dword ptr ds:[eax+esi*4]
00AA5DFB    3341 24         xor eax,dword ptr ds:[ecx+24]
00AA5DFE    8B0D 2800AC00   mov ecx,dword ptr ds:[AC0028]            ; wg.00446310
00AA5E04    3341 74         xor eax,dword ptr ds:[ecx+74]
00AA5E07    8B0D 2800AC00   mov ecx,dword ptr ds:[AC0028]            ; wg.00446310
00AA5E0D    3341 5C         xor eax,dword ptr ds:[ecx+5C]
00AA5E10    8B0D 2800AC00   mov ecx,dword ptr ds:[AC0028]            ; wg.00446310
00AA5E16    3341 6C         xor eax,dword ptr ds:[ecx+6C]
00AA5E19    8B0D 2800AC00   mov ecx,dword ptr ds:
//////////////////
觉的这和看雪里的一个帖子很像,有问题。。
那帖子的地址是: http://bbs.pediy.com/showthread.php?s=&threadid=16526
那里回帖大概有这么些。。
//////////////////////
KuNgBiM == 输入表加密问题,脱壳没处理好
闪电狼  == 入口被偷了吧
fly     == 这里不是OEP   CopyMem-II
limee   == 没跳过 anti
//////////////////
///没办法,又在这里等待高手指点了。
2005-9-14 16:16
0
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
下内存访问断点 ,改为 bp GetCurrentThreadId ,注意返回时机。
2005-9-14 17:32
0
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
//////////////////////////////
采用 skyege 的提示。。。
/////////////////////////////
换401000内存访问断点为bp GetCurrentThreadId,然后F9
停到这里
///////////
7C82BC6D >  64:A1 18000000  mov eax,dword ptr fs:[18]
7C82BC73    8B40 24         mov eax,dword ptr ds:[eax+24]
7C82BC76    C3              retn
7C82BC77    90              nop
7C82BC78    90              nop
7C82BC79    90              nop
7C82BC7A    90              nop
7C82BC7B    90              nop
7C82BC7C >  8BFF            mov edi,edi
7C82BC7E    55              push ebp
7C82BC7F    8BEC            mov ebp,esp
7C82BC81    83EC 24         sub esp,24
7C82BC84    A1 08D1887C     mov eax,dword ptr ds:[7C88D108]
...............
////////////////
堆件如下
001271E0   73441E3A  /CALL 到 GetCurrentThreadId 来自 73441E34
001271E4   00000001
001271E8   73441C1E  返回到 73441C1E 来自 73441DE6
001271EC   73441B64  返回到 73441B64 来自 73441B90
///////////////
第2次F9
堆件如下
001271C0   73443505  /CALL 到 GetCurrentThreadId 来自 734434FF
再按F9程序将会结束运行
//////////////////////////////////////////////////////

经过长时间的F7和F8始终没有还是在壳中。郁闷。。
盼天将甘露啊。。。期待中。。。。。
2005-9-14 20:19
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
bp DebugActiveProcess
2005-9-14 21:47
0
雪    币: 898
活跃值: (4054)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
首先你要搞清楚标准加壳方式、CopyMem-II方式
2005-9-14 22:12
0
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
///////////////////
换个拖法... ^_^
//////////////////

隐藏OD,载入程序 wg.exe
00436000 >  60              pushad
00436001    E8 00000000     call wg.00436006
00436006    5D              pop ebp
00436007    50              push eax
00436008    51              push ecx
00436009    0FCA            bswap edx
0043600B    F7D2            not edx
0043600D    9C              pushfd

按 Alt+E 打开可执行模块窗口
在00400000 00097000 00436000 wg 1.00这行上点右键选择-"查看名称"-
在弹出的窗体内我们看到了程序会调用到的API函数
往下拖 :)
找到 KERNEL32.WriteProcessMemory (我这里是在最后一行)
点右键盘选择-"在反编译窗口中跟随导入函数"
7C80226F >  8BFF            mov edi,edi
7C802271    55              push ebp
7C802272    8BEC            mov ebp,esp
7C802274    51              push ecx
7C802275    51              push ecx
7C802276    8B45 0C         mov eax,dword ptr ss:[ebp+C]

在这里的“MOV EBP, ESP”上下断。
SHIFT+F9执行并中断在此
ALT+F9返回到调用处,并按 Ctrl+A 分析代码 显示如下
00424E03   . /70 07         jo short wg.00424E0C
00424E05   . |7C 03         jl short wg.00424E0A
00424E07   > |EB 05         jmp short wg.00424E0E
00424E09     |E8            db E8
00424E0A   >^|74 FB         je short wg.00424E07
00424E0C   >^\EB F9         jmp short wg.00424E07
00424E0E   >  EB 5F         jmp short wg.00424E6F
00424E10   >  8D55 FC       lea edx,dword ptr ss:[ebp-4]
00424E13   .  52            push edx                                 ; /pBytesWritten
00424E14   .  6A 02         push 2                                   ; |BytesToWrite = 2
00424E16   .  68 6CC94400   push wg.0044C96C                         ; |Buffer = wg.0044C96C
00424E1B   .  8B45 10       mov eax,dword ptr ss:[ebp+10]            ; |
00424E1E   .  50            push eax                                 ; |Address
00424E1F   .  8B4D 08       mov ecx,dword ptr ss:[ebp+8]             ; |
00424E22   .  8B11          mov edx,dword ptr ds:[ecx]               ; |
00424E24   .  52            push edx                                 ; |hProcess
00424E25   .  FF15 FC604400 call dword ptr ds:[<&KERNEL32.WriteProce>; \WriteProcessMemory
00424E2B   .  50            push eax
00424E2C   .  F7D0          not eax

在这里 Buffer = wg.0044C96C 上点右键 选择"在数据窗口中跟随"-"立即数"
看左下角的数据窗口
0044C96C  0000E860
0044C970  00000000
0044C974  00000000
0044C978  00000000
在"E8"和"60"上点右键->二进制->编辑 修改为"EB"和"FE"
{{也可以在CPU窗口中按Ctrl-G输入 44c96c 修改这里的 EB 60 为 EB FE
这样就可以看到究竟改成了什么代码。}}

F9运行程序,又回到了刚才的断点上。
7C802272    8BEC            mov ebp,esp
7C802274    51              push ecx
7C802275    51              push ecx
7C802276    8B45 0C         mov eax,dword ptr ss:[ebp+C]
7C802279    53              push ebx
7C80227A    8B5D 14         mov ebx,dword ptr ss:[ebp+14]

ALT+B去掉所有断点,下新断 BP WaitForDebugEvent
F9运行中断在新断中.
7C849128 >  8BFF            mov edi,edi
7C84912A    55              push ebp
7C84912B    8BEC            mov ebp,esp
7C84912D    83EC 68         sub esp,68
7C849130    56              push esi
7C849131    FF75 0C         push dword ptr ss:[ebp+C]
7C849134    8D45 F8         lea eax,dword ptr ss:[ebp-8]
7C849137    50              push eax
7C849138    E8 8328FEFF     call kernel32.7C82B9C0

Alt+F9返回,,显示如下代码
00420945   .  85C0          test eax,eax
00420947   .  0F84 23270000 je wg.00423070
0042094D   .  8B95 FCFDFFFF mov edx,dword ptr ss:[ebp-204]
00420953   .  81E2 FF000000 and edx,0FF
00420959   .  85D2          test edx,edx
0042095B   .  74 12         je short wg.0042096F
0042095D   .  A1 78CA4400   mov eax,dword ptr ds:[44CA78]
00420962   .  8378 20 00    cmp dword ptr ds:[eax+20],0
00420966   .  74 07         je short wg.0042096F

到这里双进程已经启动了.我们来看下新的进程的ID
点文件菜单->附加
看见有2个 wg 了吧.红色的是当前调试的进程另外一个就是刚才代码中
启动的新进程啦.记下ID..我这里是. BD8
未命名的窗口
进程       名称       窗口                         路径
灰色的|00000BD8   wg                                      C:\Documents and Settings\Administrator\桌面\wg12-175\wg.exe
红色的|00000F74   wg                                      C:\Documents and Settings\Administrator\桌面\wg12-175\wg.exe

现在我们来PUSH新进程,KILL当前调试进程.
修改 "Test EAX, EAX" 为 "PUSH BD8".
出现错误??应该是改为 "PUSH 0BD8"加个零.
接下一行该为 "Call DebugActiveProcessStop"
最终如下
00420945      68 B80D0000   push 0DB8
0042094A      E8 DE88427C   call kernel32.DebugActiveProcessStop
0042094F      90            nop
00420950      90            nop
00420951      90            nop
00420952      90            nop
00420953   .  81E2 FF000000 and edx,0FF
00420959   .  85D2          test edx,edx
0042095B   .  74 12         je short wg.0042096F
0042095D   .  A1 78CA4400   mov eax,dword ptr ds:[44CA78]
00420962   .  8378 20 00    cmp dword ptr ds:[eax+20],0
00420966   .  74 07         je short wg.0042096F

接下来F8单步运行到
0042094F      90            nop
现在我们的父进程和子进程已经断开连接了. :)

新开一个OD,附加进程ID为DB8的进程.(注:下面的操作都是在新开的OD中了)
7C952584    C3              retn
7C952585    90              nop
7C952586    8BFF            mov edi,edi
7C952588 >  CC              int3
7C952589    C3              retn
7C95258A    8BFF            mov edi,edi
7C95258C    8B4424 04       mov eax,dword ptr ss:[esp+4]
7C952590    CC              int3
7C952591    C2 0400         retn 4

Shift+F9 运行,F12暂停程序.
00436000 > $- EB FE         jmp short wg.<ModuleEntryPoint>
00436002   ?  0000          add byte ptr ds:[eax],al
00436004   ?  0000          add byte ptr ds:[eax],al
00436006   $  5D            pop ebp
00436007   .  50            push eax
00436008   .  51            push ecx
00436009   .  0FCA          bswap edx
0043600B   .  F7D2          not edx
0043600D   .  9C            pushfd
0043600E   .  F7D2          not edx

修改 0043600 的 EBFE 改回来 60EB
00436000 >    60            pushad
00436001      EB 00         jmp short wg.00436003
00436003      0000          add byte ptr ds:[eax],al
00436005      005D 50       add byte ptr ss:[ebp+50],bl
00436008   .  51            push ecx
00436009   .  0FCA          bswap edx

///////////////////////////////////////
到这里Armadillo双进程已经跳过了.
剩下的就是其他的啦,说句实话,我现在都还只能判断
Armadillo的壳到底是不是标准壳是不是双进程.
什么CopyMem II, Anti, CC 我还不知道.在看雪找了很久都没有
找到如何去判断..晕啊.
/////////////////////////////////////////
稍后继续..
2005-9-17 11:03
0
雪    币: 136
活跃值: (220)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
12
晕 看雪上 那么多的教程 !!!自己要动手,丰衣足食.
2005-9-17 11:31
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
最初由 kkyyff 发布
////////////
此贴精彩之处不在开始,而是在于过程.在于您的参与.

我也参与学习一下!支持楼主!
2005-9-18 10:04
0
雪    币: 213
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Armadillo 3.78
费神!
2005-9-18 17:16
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 clong 发布
Armadillo 3.78
费神!

这软件应该就是CopyMem-II,我可以成功到程序OEP,不过到现在为止还未能搞定手上的VB程序,原因就是不太明白这VB编写的程序是怎样确定表,不太会修复,其它编写的知道怎样修复就没有问题,希望fly大哥能指教一下VB修复的方法。
2005-9-18 23:58
0
雪    币: 217
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
是copymem  一般情况下你到不了oep 就是了 
2005-9-19 13:35
0
雪    币: 219
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 yuhong 发布

这软件应该就是CopyMem-II,我可以成功到程序OEP,不过到现在为止还未能搞定手上的VB程序,原因就是不太明白这VB编写的程序是怎样确定表,不太会修复,其它编写的知道怎样修复就没有问题,希望fly大哥能指教一下VB修复的方法。


说说这个软件怎么到OEP啊?
2005-11-2 23:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
看了发晕,帮不上忙,希望高手指导,我等也学到些技巧。看雪学院真是名副其实!
2005-12-17 01:51
0
游客
登录 | 注册 方可回帖
返回