首页
社区
课程
招聘
Armadillo脱壳请教
发表于: 2006-9-21 15:14 6606

Armadillo脱壳请教

2006-9-21 15:14
6606
fly你好,我仔细读了下面的文章
http://bbs.pediy.com/showthread.php?threadid=13223
按照帖子方法进行脱壳。可是dump后用peid查还是arm壳。不知是否正确。第一次脱壳也不知道错在什么地方。望指教

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
1、请遵守论坛游戏规则,不要点将
2、去掉Armadillo的加壳标记即可

简单举个例子
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000100   50 45 00 00 4C 01 08 00  9D 8F E0 44 00 00 00 00   PE..L...?嗄....
00000110   00 00 00 00 E0 00 0F 01  0B 01 53 52 00 F0 04 00   ....?....SR.?.

你会在PE标记后发现53 52,把这个修改为00 00
2006-9-21 15:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
抱歉,没有看清发贴要求。
现在我重新脱了一次,有两个进程 PID=AB0,PID=DA4
我用AB0进程脱完后运行提示
This program has been damaged, possibly by a bad sector of the hard drive or a virus. Please reinstall it.
用DA4则什么提示都没有。
看看进程有两个DA4.exe (我dump PID=DA4的程序),那个才是我要的呢,还是我根本没有做对呢。

有些时候相联系作者问讯问题该怎么做呢?

谢谢。
2006-9-21 16:02
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
第1楼的问题解决了?
第3楼的问题没有描述清楚,试试dilloDIE.V1.6脱壳机吧
2006-9-21 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用脱壳机脱了一次,不能运行,出错。
2006-9-21 16:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用脱壳机脱了一次,不能运行,出错。

这是我参照http://bbs.pediy.com/showthread.php?threadid=13223教程修改的结果。

0064B1F3   /EB 05           jmp short JuBa.0064B1FA
0064B1F5   |E8 74FBEBF9     call FA50AD6E
0064B1FA   \83BD CCF5FFFF 0>cmp dword ptr ss:[ebp-A34],0
0064B201    0F8C A8020000   jl JuBa.0064B4AF
0064B207    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0064B20D    3B0D D4636800   cmp ecx,dword ptr ds:[6863D4]
0064B213    0F8D 96020000   jge JuBa.0064B4AF
//最后我断在0064B4AF,然后用Dump第二个进程。运行提示This program has been damaged, possibly by a bad sector of the hard drive or a virus. Please reinstall it.是否脱壳不成功?
0064B219    8B95 40F6FFFF   mov edx,dword ptr ss:[ebp-9C0]
0064B21F    81E2 FF000000   and edx,0FF
0064B225    85D2            test edx,edx
0064B227    0F84 AD000000   je JuBa.0064B2DA
0064B22D    6A 00           push 0
0064B22F    8BB5 CCF5FFFF   mov esi,dword ptr ss:[ebp-A34]
0064B235    C1E6 04         shl esi,4
0064B238    8B85 CCF5FFFF   mov eax,dword ptr ss:[ebp-A34]
0064B23E    25 07000080     and eax,80000007
0064B243    79 05           jns short JuBa.0064B24A
0064B245    48              dec eax
0064B246    83C8 F8         or eax,FFFFFFF8
0064B249    40              inc eax
0064B24A    33C9            xor ecx,ecx
0064B24C    8A88 BC3D6800   mov cl,byte ptr ds:[eax+683DBC]
0064B252    8B95 CCF5FFFF   mov edx,dword ptr ss:[ebp-A34]
0064B258    81E2 07000080   and edx,80000007
0064B25E    79 05           jns short JuBa.0064B265
0064B260    4A              dec edx
0064B261    83CA F8         or edx,FFFFFFF8
0064B264    42              inc edx
0064B265    33C0            xor eax,eax
0064B267    8A82 BD3D6800   mov al,byte ptr ds:[edx+683DBD]
0064B26D    8B3C8D 84F36700 mov edi,dword ptr ds:[ecx*4+67F38>
0064B274    333C85 84F36700 xor edi,dword ptr ds:[eax*4+67F38>
0064B27B    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0064B281    81E1 07000080   and ecx,80000007
0064B287    79 05           jns short JuBa.0064B28E
0064B289    49              dec ecx
0064B28A    83C9 F8         or ecx,FFFFFFF8
0064B28D    41              inc ecx
0064B28E    33D2            xor edx,edx
0064B290    8A91 BE3D6800   mov dl,byte ptr ds:[ecx+683DBE]
0064B296    333C95 84F36700 xor edi,dword ptr ds:[edx*4+67F38>
0064B29D    8B85 CCF5FFFF   mov eax,dword ptr ss:[ebp-A34]
0064B2A3    99              cdq
0064B2A4    B9 1C000000     mov ecx,1C
0064B2A9    F7F9            idiv ecx
0064B2AB    8BCA            mov ecx,edx
0064B2AD    D3EF            shr edi,cl
0064B2AF    83E7 0F         and edi,0F
0064B2B2    03F7            add esi,edi
0064B2B4    8B15 B8636800   mov edx,dword ptr ds:[6863B8]
0064B2BA    8D04B2          lea eax,dword ptr ds:[edx+esi*4]
0064B2BD    50              push eax
0064B2BE    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0064B2C4    51              push ecx
0064B2C5    E8 96210000     call JuBa.0064D460
0064B2CA    83C4 0C         add esp,0C
//修改代码如下
0064B2CD    FF85 CCF5FFFF   inc dword ptr ss:[ebp-A34]
0064B2D3    C705 D8636800 0>mov dword ptr ds:[6863D8],1
0064B2DD  ^ E9 18FFFFFF     jmp JuBa.0064B1FA
//不知道为什么下面的代码会变成90
0064B2E2    90              nop
0064B2E3    90              nop
0064B2E4    90              nop
0064B2E5    90              nop

我用了自动脱壳机脱完后不能运行,也不知道问题所在?
2006-9-21 17:00
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
7
原版程序可以正常运行起来吧
脱壳机不行就只好手动脱壳了
dilloDIE.V1.6在WinXP/2003平台上效果较好,并且某些杀软/防火墙会对脱壳机有影响

找个相似保护方式的教程跟随练习
先用教程中例子跟随练习
不要让教程去适应你的目标程序
掌握方法后就可以自己做了
2006-9-21 17:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
麻烦fly老大帮我看看我上面编辑后的脱壳纪录是否有问题。

下面这是我扫描后的结果能介绍给我那篇教程适合么?
我使用的XP 英文版这个对脱壳有影响么?

<------- 21-09-2006 17:57:11 ------->
C:\Program Files\JuBa\JuBa.exe
!- Protected Armadillo
Protection system (Basic)
!- <Protection Options>
Debug-Blocker
CopyMem-II
Enable Strategic Code Splicing
Enable Memory-Patching Protections
!- <Backup Key Options>
Fixed Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>

!- Child detach
Child process ID: 00000250
Entry point: 0065AB63
Original bytes: 558B

2006-9-21 17:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
麻烦谁帮我看看我的问题。
我参照文档手动脱壳,可是在修复IAT是修改magic jump可是我怎样也没有找到magic jump。谁能提示一下如何找到magic jump呢?
谢谢各位的帮助
2006-9-22 11:20
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
总的来说,Armadillo并不是适合新手练习的目标

你可以在看雪论坛精华合集里面找CopyMem-II教程,掌握后再看Code Splicing教程
2006-9-22 11:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
成功的边缘:
参照教程找到相应的magic jump,现在准备修改IAT可是我不理解教程中这个地方

1、运行ImportREC,选择这个进程。填入RVA=001D7208、Size=000008B4,Get Import剪切掉无效函数,修改OEP RVA=001B83BC,FixDump,正常运行!

教程中的RVA=001D7208、Size=000008B4是如何计算出来的。

2、BP WaitForDebugEvent
中断后取消断点,看堆栈:
0012BCB8   0060F8BF  /CALL 到 WaitForDebugEvent 来自 MAGCT.0060F8B9
0012BCBC   0012CD90  |pDebugEvent = 0012CD90
0012BCC0   000003E8  \Timeout = 1000. ms
在数据窗口定位到0012CD90处,准备看OEP值
通过这样我的OEP是00407B20那么我的OEP RVA是00407B20-0040000=7B20这样对么?
2006-9-22 12:07
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
12
1、找输入表函数结尾处-开始处
2、是
3、离成功还有不少距离

兄弟,先多学习基础知识吧
这些东西是别人无法替代你去学习的
2006-9-22 12:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
的确如你所说,我的基础是比较差。真的很感谢你耐心的帮助。

下面是我的脱壳一些步骤及问题:
00F4A4BF    8985 54D7FFFF   mov     [ebp-28AC], eax
00F4A4C5    FF15 7C62F500   call    [F5627C]                         ; kernel32.GetTickCount
//在这里我选择内存窗口跟随
00F4A4CB    2B85 50D7FFFF   sub     eax, [ebp-28B0]
00F4A4D1    3D B80B0000     cmp     eax, 0BB8
00F4A4D6    EB 11           jmp     short 00F4A4E9
00F4A4D8    8B85 40D9FFFF   mov     eax, [ebp-26C0]
00F4A4DE    35 C31C724B     xor     eax, 4B721CC3
00F4A4E3    8985 40D9FFFF   mov     [ebp-26C0], eax
00F4A4E9    8B85 40D6FFFF   mov     eax, [ebp-29C0]
00F4A4EF    8985 D0ABFFFF   mov     [ebp+FFFFABD0], eax
00F4A4F5    FFB5 D0ABFFFF   push    dword ptr [ebp+FFFFABD0]
00F4A4FB    E8 AAB10000     call    00F556AA                         ; jmp 到 msvcrt.operator delete
00F4A500    59              pop     ecx
00F4A501    C705 E8C0F500 6>mov     dword ptr [F5C0E8], 0F5CC64
//我在这里设置的断点,也就是中断后输入表处理完毕
00F4A50B    C785 94D7FFFF 9>mov     dword ptr [ebp-286C], 0F3719B

下面是我在内存跟随窗口看见的

00F55FF4  00000000
00F55FF8  00000000
00F55FFC  00000000
00F56000  77DD761B  ADVAPI32.RegOpenKeyExA
00F56004  77DFD5BB  ADVAPI32.RegCreateKeyA
00F56008  77DF8F7D  ADVAPI32.RegCreateKeyW
//中间部分截去
00F5627C  7C80929C  kernel32.GetTickCount
////中间部分截去
00F56538  774FDE02  ole32.StringFromGUID2
00F5653C  774FFAC3  ole32.CoCreateInstance
00F56540  77533373  ole32.OleUninitialize
00F56544  774FF6DA  ole32.OleInitialize
00F56548  00000000
00F5654C  00000000
00F56550  00010000  UNICODE "ALLUSERSPROFILE=D:\Profiles\All Users"

1、是不是00F56000开始的地方,00F56548结尾的地方呢?
2、这里IAT偏移量是不是00F56000-0040000=B56000呢?
再次谢谢你的无私的帮助
2006-9-22 13:01
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
14
1、是
2、这里IAT偏移量是00F56544-00F56000=544
2006-9-22 13:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
IAT偏移和大小
也就是我手动填入RAV=544 size=548么?估计我又理解错了。
还是RAV=B56000,size=544呢?
2006-9-22 13:14
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
16
我说错了,偏移量是00F56000-00400000
大小是544
2006-9-22 13:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢
RAV=00F56000-00400000=B56000,size=544是么?

我使用Import 1.6F
填入RAV=B56000 size=548然后get imports得到结果
IAT read successfully.
rva:00B560C0 forwarded from mod:ntdll.dll ord:0258 name:RtlGetLastWin32Error
rva:00B56110 forwarded from mod:ntdll.dll ord:015C name:RtlRestoreLastWin32Error
rva:00B5625C forwarded from mod:ntdll.dll ord:005D name:RtlDeleteCriticalSection
rva:00B56264 forwarded from mod:ntdll.dll ord:0226 name:RtlLeaveCriticalSection
rva:00B5626C forwarded from mod:ntdll.dll ord:024C name:RtlEnterCriticalSection
---------------------------------------------------------------------------------------------------------------------------
Current imports:
A (decimal:10) valid module(s) (added: +A (decimal:+10))
149 (decimal:329) imported function(s). (added: +149 (decimal:+329))

填入OEP RAV=7B20 提示Invalid dump file! can't match RVA to offset in the dump file 为什么呢?
2006-9-22 13:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
似乎快结束了,感觉还是原地不动。。。
2006-9-22 14:56
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
19
从输入表数量看应该不是正确输入表所在,你应该在dump出来的程序中找到正确的输入表和oep。
2006-9-22 17:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
在计算RVA的时候碰见一个问题,RVA是如何计算出来的。参照帖子所诉修改程序的入口点。用OD载入居然找不到CALL [XXXXXXX]的地方。有没有其他方法来计算RVA呢?
2006-9-22 18:19
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
21
你找到oep了么?
2006-9-22 20:00
0
游客
登录 | 注册 方可回帖
返回
//