首页
社区
课程
招聘
arm脱壳问题
发表于: 2006-2-3 22:01 7459

arm脱壳问题

2006-2-3 22:01
7459
看了论坛的教材
自己也按着试一下
例子程序下载地址
http://zyq111.vicp.net/down/try.exe
peid查壳知道,该软件的壳为Armadillo 1.xx - 2.xx -> SiliconRealms Toolworks,据说这个是不准的!

OD载入命令行下断点 BP OpenMutexA,F9运行。

断到这里
77E7AFA6 K>  55            push ebp
77E7AFA7     8BEC          mov ebp,esp
77E7AFA9     51            push ecx
77E7AFAA     51            push ecx
77E7AFAB     837D 10 00    cmp dword ptr ss:[ebp+1>
77E7AFAF     56            push esi
77E7AFB0     0F84 2DF40100 je KERNEL32.77E9A3E3
77E7AFB6     64:A1 1800000>mov eax,dword ptr fs:[1>
****************************************************************
堆栈内容:
0012D7AC   00A9F321  /CALL 到 OpenMutexA 来自 fantfore.00A9F31B
0012D7B0   001F0001  |Access = 1F0001
0012D7B4   00000000  |Inheritable = FALSE
0012D7B8   0012DDEC  \MutexName = "3EC::DA11F914F0"
0012D7BC   0012FF2C

Ctrl+G 401000
填入以下代码:
00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 DCFB1200     PUSH 12DDEC
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 687BA677     CALL KERNEL32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 75C7A677     JMP KERNEL32.OpenMutexA
点右键 选在此处新建 Eip ,看到Eip 变为 401000

F9运行
中断到这里
77E7AFA6 K>  55            push ebp
77E7AFA7     8BEC          mov ebp,esp
77E7AFA9     51            push ecx
77E7AFAA     51            push ecx
77E7AFAB     837D 10 00    cmp dword ptr ss:[ebp+1>
77E7AFAF     56            push esi
77E7AFB0     0F84 2DF40100 je KERNEL32.77E9A3E3
77E7AFB6     64:A1 1800000>mov eax,dword ptr fs:[1>

****************************************************************
Ctrl+G 401000来到:
00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 DCFB1200     PUSH 12DDEC
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 687BA677     CALL KERNEL32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 75C7A677     JMP KERNEL32.OpenMutexA

撤消刚才的修改~~~~~~~~
下bp GetModuleHandleA,
断到这里
77E6AB06 K>  55            push ebp
77E6AB07     8BEC          mov ebp,esp
77E6AB09     837D 08 00    cmp dword ptr ss:[ebp+8>
77E6AB0D     0F84 31F50000 je KERNEL32.77E7A044
77E6AB13     FF75 08       push dword ptr ss:[ebp+>
77E6AB16     E8 9EC8FFFF   call KERNEL32.77E673B9
77E6AB1B     85C0          test eax,eax
77E6AB1D     74 08         je short KERNEL32.77E6A>
77E6AB1F     FF70 04       push dword ptr ds:[eax+>
77E6AB22     E8 5B560000   call KERNEL32.GetModule>

F9运行N次
在此期间仔细观察堆栈内容,
1---
0012D1C4   78001E96  /CALL 到 GetModuleHandleA 来自 MSVCRT.78001E90
0012D1C8   780322D4  \pModule = "KERNEL32"
0012D1CC   78001E46  返回到 MSVCRT.78001E46 来自 MSVCRT.78001E8B
0012D1D0   78001E1A  返回到 MSVCRT.78001E1A
0012D1D4   780010EC  返回到 MSVCRT.780010EC 来自 MSVCRT.78001E0F

2

0012D24C   77A03F02  /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A03EFC
0012D250   779A0630  \pModule = "kernel32.dll"
0012D254   77A04081  返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012D258   77990000  offset OLEAUT32.#345

3
0012D240   77A072DB  /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A072D5
0012D244   779A0994  \pModule = "KERNEL32"
0012D248   77A0412A  返回到 OLEAUT32.77A0412A 来自 OLEAUT32.77A072D0
0012D24C   77A0620B  返回到 OLEAUT32.77A0620B
0012D250   77A03FAA  返回到 OLEAUT32.77A03FAA 来自 OLEAUT32.77A06200
0012D254   77A04081  返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012D258   77990000  offset OLEAUT32.#345

4
0012D178   779A83DB  /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012D17C   77A1ADA8  \pModule = "KERNEL32.DLL"
0012D180   779A7A32  返回到 OLEAUT32.779A7A32 来自 OLEAUT32.779A83D0
0012D184   77A1F790  OLEAUT32.77A1F790
0012D188   000003E8
0012D18C   779EFB2D  返回到 OLEAUT32.779EFB2D 来自 OLEAUT32.779A7A10

5
0012D178   779A83DB  /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012D17C   77A1ADA8  \pModule = "KERNEL32.DLL"
0012D180   779C0222  返回到 OLEAUT32.779C0222 来自 OLEAUT32.779A83D0
0012D184   77A1F908  OLEAUT32.77A1F908
0012D188   000003E8
0012D18C   779EFB34  返回到 OLEAUT32.779EFB34 来自 OLEAUT32.779C0200

6
0012D750   00A9E463  /CALL 到 GetModuleHandleA 来自 fantfore.00A9E45D
0012D754   00000000  \pModule = NULL
0012D758   0012D764
0012D75C   01197EBE
0012D760   00B1F133  fantfore.00B1F133
0012D764   00000000
0012D768   00AF8000  ASCII "PDATA000"

7
0180F1E0   77E70519  /CALL 到 GetModuleHandleA 来自 KERNEL32.77E70514
0180F1E4   00000000  \pModule = NULL
0180F1E8   77E70502  返回到 KERNEL32.77E70502 来自 KERNEL32.77E70512
0180F1EC   00000000
0180F1F0   77E6CE51  KERNEL32.<ModuleEntryPoint>

8
00126884   011B372E  /CALL 到 GetModuleHandleA 来自 011B3728
00126888   011C7474  \pModule = "kernel32.dll"
0012688C   011C8744  ASCII "VirtualAlloc"

9
00126884   011B374B  /CALL 到 GetModuleHandleA 来自 011B3745
00126888   011C7474  \pModule = "kernel32.dll"
0012688C   011C8738  ASCII "VirtualFree"

10
0012C98C   011BEAC9  /CALL 到 GetModuleHandleA 来自 011BEAC3
0012C990   00000000  \pModule = NULL

11
0012C9C0   011BE72F  /CALL 到 GetModuleHandleA 来自 011BE72D
0012C9C4   00000000  \pModule = NULL

12
0012C9C0   011BE82E  /CALL 到 GetModuleHandleA 来自 011BE82C
0012C9C4   00000000  \pModule = NULL

13
0012C9C0   011BE88A  /CALL 到 GetModuleHandleA 来自 011BE888
0012C9C4   00000000  \pModule = NULL

14
0012C9C0   011BE9B0  /CALL 到 GetModuleHandleA 来自 011BE9AE
0012C9C4   00000000  \pModule = NULL

15
次的时候
提示框错误

解压程序错误,代码2,请联系我们解决。
见图
http://zyq111.vicp.net/down/err.bmp

我的疑问是什么时候应该返回
就是什么时候能看出返回的时机!
我从第8次第9次等处 alt+f9返回都找不到关键跳

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
2
看了好几个论坛的教材都说返回时机很容易判断
但是都没说具体怎么判断
这个问题困扰我们这样的菜鸟很久了
高手总是认为这样的不值一提,结过我们菜鸟就怎么也看不懂
2006-2-3 22:13
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
pModule = "kernel32.dll
ASCII "VirtualAlloc"

pModule = "kernel32.dll
ASCII "VirtualFree"

VirtualAlloc和VirtualFree这两个API依次显示就是标志
Shift+F9,再次中断在GetModuleHandleA处就是返回修改Magic JMP的时机了

另外:刚开始学习时建议用Armadillo单进程标准壳来练习
2006-2-3 22:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
4
感谢斑竹
2006-2-4 00:01
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
不要希望教程去适应你的目标程序
跟随教程练习,用教程中的例子程序
2006-2-4 00:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
6
那版主,这里的关键跳怎么判断呢?

感谢斑竹
那我在
10
0012C98C   011BEAC9  /CALL 到 GetModuleHandleA 来自 011BEAC3
0012C990   00000000  \pModule = NULL
这个返回

011BEAC3     FF15 D8201C01 call dword ptr ds:[11C2>; KERNEL32.GetModuleHandleA
011BEAC9     68 007F0000   push 7F00
011BEACE     53            push ebx
011BEACF     8945 E8       mov dword ptr ss:[ebp-1>
011BEAD2     FF15 8C241C01 call dword ptr ds:[11C2>; USER32.LoadCursorA
011BEAD8     BE 24881C01   mov esi,11C8824         ; UNICODE "SRTSmartDlg"
011BEADD     8945 F0       mov dword ptr ss:[ebp-1>
011BEAE0     C745 F4 10000>mov dword ptr ss:[ebp-C>
011BEAE7     8975 FC       mov dword ptr ss:[ebp-4>
011BEAEA     8D45 D8       lea eax,dword ptr ss:[e>
011BEAED     50            push eax
011BEAEE     E8 D4100000   call 011BFBC7
011BEAF3     66:85C0       test ax,ax
011BEAF6     75 18         jnz short 011BEB10
011BEAF8     68 B89E1C01   push 11C9EB8
011BEAFD     56            push esi
011BEAFE     FF15 D8221C01 call dword ptr ds:[11C2>; MSVCRT.wcscat
011BEB04     43            inc ebx
011BEB05     59            pop ecx
011BEB06     83FB 0A       cmp ebx,0A
011BEB09     59            pop ecx
011BEB0A   ^ 7C DE         jl short 011BEAEA
011BEB0C     32C0          xor al,al
011BEB0E     EB 02         jmp short 011BEB12
011BEB10     B0 01         mov al,1
011BEB12     5E            pop esi
011BEB13     5B            pop ebx
011BEB14     C9            leave
011BEB15     C3            retn
011BEB16     55            push ebp
011BEB17     8BEC          mov ebp,esp
011BEB19     837D 0C 46    cmp dword ptr ss:[ebp+C>
011BEB1D     8B45 14       mov eax,dword ptr ss:[e>
011BEB20     75 04         jnz short 011BEB26
011BEB22     8348 18 01    or dword ptr ds:[eax+18>
011BEB26     56            push esi
011BEB27     57            push edi
011BEB28     50            push eax
011BEB29     FF75 10       push dword ptr ss:[ebp+>
011BEB2C     FF75 0C       push dword ptr ss:[ebp+>
011BEB2F     FF75 08       push dword ptr ss:[ebp+>
011BEB32     E8 4D100000   call 011BFB84
011BEB37     837D 0C 02    cmp dword ptr ss:[ebp+C>
011BEB3B     8BF8          mov edi,eax
011BEB3D     75 1F         jnz short 011BEB5E
011BEB3F     FF75 08       push dword ptr ss:[ebp+>
011BEB42     E8 81F7FFFF   call 011BE2C8
011BEB47     8BF0          mov esi,eax
011BEB49     59            pop ecx
011BEB4A     85F6          test esi,esi
011BEB4C     74 10         je short 011BEB5E
011BEB4E     FF76 08       push dword ptr ds:[esi+>
011BEB51     FF15 64201C01 call dword ptr ds:[11C2>; GDI32.DeleteObject
011BEB57     56            push esi
011BEB58     E8 D9280000   call 011C1436           ; jmp to MSVCRT.operator delete
011BEB5D     59            pop ecx
011BEB5E     8BC7          mov eax,edi
011BEB60     5F            pop edi
011BEB61     5E            pop esi
011BEB62     5D            pop ebp
011BEB63     C2 1000       retn 10
011BEB66     55            push ebp
011BEB67     8BEC          mov ebp,esp
011BEB69     83EC 14       sub esp,14
011BEB6C     53            push ebx
011BEB6D     8BD9          mov ebx,ecx
011BEB6F     FF75 0C       push dword ptr ss:[ebp+>
011BEB72     FF15 CC221C01 call dword ptr ds:[11C2>; MSVCRT.wcslen
011BEB78     3D FF000000   cmp eax,0FF
011BEB7D     59            pop ecx
011BEB7E     76 07         jbe short 011BEB87

找不到类似下面例子的je跳转
003D6541    3BC8                cmp ecx,eax
003D6543    75 07               jnz short 003D654C
003D6545    B8 A8B33E00         mov eax,3EB3A8
003D654A    EB 2F               jmp short 003D657B
003D654C    393D D8B73E00       cmp dword ptr ds:[3EB7D8],edi
003D6552    B8 D8B73E00         mov eax,3EB7D8
003D6557    74 0C               je short 003D6565                    ★ Magic Jump ★  // 改为 :jmp 003D6565

是不是返回的时机还不对啊?
2006-2-4 00:18
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
7
望各位指点迷津!
2006-2-4 00:23
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
8
教程我照着做就可以成功脱出
换一个不是教程的例子,就不行了
我觉的各位大侠在写教材的时候不光要告诉我们怎么做还应该告诉我们怎么判断
我看了论坛里很多脱文
作者自己也不自己为什么要怎么操作
就是那一个教材的例子
照着做
这样固然也有成功的时候
可是很多时候情况是不同的
所以说授之于鱼不如授之于渔
2006-2-4 15:31
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
UPX
9
教程无用?您真敢说话
记得论坛有Armadillo主程序的脱壳教程,你能按教程把Armadillo主程序干掉,想必可以脱掉90%的Armadillo各选项保护程序

如今这世道是高手自称脱壳菜鸟
新手一上来就要脱掉猛壳
看不懂呀  
2006-2-4 22:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
10
教程无用?您真敢说话(你说的吧?)
记得论坛有Armadillo主程序的脱壳教程,你能按教程把Armadillo主程序干掉,想必可以脱掉90%的Armadillo各选项保护程序
(看一个脱文可以脱掉90%的程序?)

如今这世道是高手自称脱壳菜鸟
新手一上来就要脱掉猛壳
看不懂呀  
(你不求上进也算了,别栏着我们)

:D

诚心学习
望各位指教
2006-2-6 20:00
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
11
你能按教程把Armadillo主程序干掉,想必可以脱掉90%的Armadillo各选项保护程序

想必?你试过100个ARM壳了?脱了90个,还有10个怎么办?
2006-2-6 20:06
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
12
更多的是需要多做练习,找出门路,灵活运用
2006-2-7 10:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 fly 发布
pModule = "kernel32.dll
ASCII "VirtualAlloc"

pModule = "kernel32.dll
ASCII "VirtualFree"
........

谢谢,终于知道了返回的时机了,看了那么多教程为什么就没1个说一下这个的呢。。。就1句话的问题让我困恼了2天
2006-2-8 09:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 fly 发布
不要希望教程去适应你的目标程序
跟随教程练习,用教程中的例子程序

好象不对嘛...2个API函数显示后再次按下shift+f9然后再返回找不到magic jmp的....是我们理解错了?
2006-2-8 15:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
15
谢谢各位终于搞定了
D:
2006-2-11 19:41
0
雪    币: 175
活跃值: (2331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我对arm就不敢碰。不好脱,变化太大了、
2006-2-11 21:20
0
游客
登录 | 注册 方可回帖
返回
//