首页
社区
课程
招聘
[求助]脱Armadillo 1.xx - 2.xx的壳时遇到的问题,请各位高手帮忙看看
发表于: 2007-4-4 11:07 5996

[求助]脱Armadillo 1.xx - 2.xx的壳时遇到的问题,请各位高手帮忙看看

2007-4-4 11:07
5996
cloak v8.0这个软件用PEID查是Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks的壳,我按照脱Armadillo 1.xx - 2.xx的壳教程去脱壳,
在走到
00401000                                 60                     pushad
00401001                                 9C                     pushfd
00401002                                 68 F0FB1200            push 12FBF0  *这是堆栈中看到的
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
这段代码中
0040100B                                 E8 2FDB407C            call kernel32.CreateMutexA

00401012                               - E9 04DC407C            jmp kernel32.OpenMutexA
我填入了2FDB407C和04DC407C之后,语句显示的不是CreateMutexA和OpenMutexA,这是为什么?应该怎么办?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你的教程怎么和我的不一样,能告一下你的教程下载地址吗?下面是我用的教程,请楼主参照一下,在练习中我也遇到个问题,请大家帮忙:

大家好,我是wynney,今天给大家做一个“穿山甲”(Armadillo)的动画

目标程序是网吧游戏管理系统(客户端) 1.31,大家首先要知道它是双进程的还是单进程的

运行原程序,打开任务管理器或者是LordPE查看进程,发现有两个一样的进程,所以确认它是双进程的壳

首先用PEID查壳:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]

用OD载入,忽略所有异常,隐藏OD

004A0379 网吧>/$  55             push ebp  //程序入口
004A037A    |.  8BEC           mov ebp,esp
004A037C    |.  6A FF          push -1
004A037E    |.  68 78524C00    push 网吧游戏.004C5278
004A0383    |.  68 60FD4900    push 网吧游戏.0049FD60                 ;  SE 句柄安装

首先需要把双进程转换成单进程,这要通过OpenMutexA断点来完成!

下断bp OpenMutexA,回车,Shift+F9!

断下后Ctrl+G:00401000,键入以下代码

00401000      60               pushad
00401001      9C               pushfd
00401002      68 F0FB1200      push 12FBF0       ; ASCII "5B4::DAEBBBBF8D"  //堆栈显示的值
00401007      33C0             xor eax,eax
00401009      50               push eax
0040100A      50               push eax
0040100B      E8 B5A6A577      call kernel32.CreateMutexA
00401010      9D               popfd
00401011      61               popad
00401012    - E9 7A13A677      jmp kernel32.OpenMutexA

二进制代码

60 9C 68 F0 FB 12 00 33 C0 50 50 E8 B5 A6 A5 77 9D 61 E9 7A 13 A6 77

新建EIP--Shift+F9再次中断--F2取消断点(按演示动画此处应为红色,但我的电脑上显示的为绿色,??????)--Ctrl+G:00401000 撤消修改

********************************************************************************************
已经把双进程转换成单进程了,接下来需要避开输入表加密

也就是要找我们说的Magic Jump了

he GetModuleHandleA+5,Shift+F9运行到这一步,我的电脑提示运行错误,以下步骤在我的电脑上无法实现?????)
77E5AD8B     /0F84 37010000    je kernel32.77E5AEC8  //断下!注意观察堆栈!
77E5AD91     |FF7424 04        push dword ptr ss:[esp+4]
77E5AD95     |E8 F8050000      call kernel32.77E5B392
77E5AD9A     |85C0             test eax,eax
77E5AD9C     |74 08            je short kernel32.77E5ADA6

下面是每一次F9时候,堆栈显示的情况

0012ECE4     77C059FC    返回到 msvcrt.77C059FC 来自 kernel32.GetModuleHandleA
0012ECE8     77BE31AC    ASCII "kernel32.dll"
0012ECEC     77C2CA20    msvcrt.77C2CA20
0012ECF0     00000000

0012EDA8     631C9C01    返回到 SHLWAPI.631C9C01 来自 kernel32.GetModuleHandleA
0012EDAC     6318D3D0    ASCII "KERNEL32.DLL"
0012EDB0     00000000
0012EDB4     63180000    SHLWAPI.63180000

0012ECD0     770FB124    返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012ECD4     771722E4    ASCII "KERNEL32.DLL"
0012ECD8     770FAD56    返回到 OLEAUT32.770FAD56 来自 OLEAUT32.770FB119
0012ECDC     77172080    OLEAUT32.77172080

0012ECCC     770FB124    返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012ECD0     771722E4    ASCII "KERNEL32.DLL"
0012ECD4     770FADAC    返回到 OLEAUT32.770FADAC 来自 OLEAUT32.770FB119
0012ECD8     77172064    OLEAUT32.77172064

0012F55C     00496073    返回到 网吧游戏.00496073 来自 kernel32.GetModuleHandleA
0012F560     00000000
0012F564     7FFDEBF8

0012C280     003C5331    返回到 003C5331 来自 kernel32.GetModuleHandleA //取消断点,Alt+F9!
0012C284     0012C3BC    ASCII "kernel32.dll"
0012C288     00000002

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
003C536E      74 06            je short 003C5376
003C5370      41               inc ecx
003C5371      83C0 0C          add eax,0C
003C5374    ^ EB F6            jmp short 003C536C
003C5376      8BC1             mov eax,ecx
003C5378      C1E0 02          shl eax,2

修改完Magic Jump之后,打开内存镜像,在00401000段F2下断!Shift+F9,直达OEP!全部是红色!

00480ABC      55               push ebp  //OEP=80ABC,LordPE纠正大小DUMP!
00480ABD      8BEC             mov ebp,esp
00480ABF      83C4 F0          add esp,-10
00480AC2      53               push ebx
00480AC3      56               push esi
00480AC4      B8 B4084800      mov eax,gamemana.004808B4
00480AC9      E8 C65DF8FF      call gamemana.00406894
00480ACE      8B1D E0224800    mov ebx,dword ptr ds:[4822E0]      ; gamemana.00483C60
00480AD4      8B35 EC224800    mov esi,dword ptr ds:[4822EC]      ; gamemana.00483D08
00480ADA      8B03             mov eax,dword ptr ds:[ebx]

OD,不要关闭,打开Import 1.6在OEP处填80ABC(00480ABC-00400000),自动搜索IAT--获取输入表--显示无效函数--13个无效指针--全部直接CUT掉

另外大家看一下OEP处的代码就应该明白这个是Delphi写的程序了

先运行下脱壳修复后的程序,看看能够不能够正常运行,再用PEID查下壳,Borland Delphi 6.0 - 7.0
2007-4-5 12:16
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
3
楼上说的我也学习过了,我试脱是成功的,请注意OD的设置和其他的问题,有时候,即使是一模一样的教程,也会得出不同的结果,楼上的朋友多加练习,不要死盯在一棵树上!
2007-4-5 14:36
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
地址是http://bbs.pediy.com/showthread.php?threadid=10131
2007-4-5 14:37
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
kernel32.OpenMutexA
kernel32.CreateMutexA
这种语句的十六进制编码应该怎么找?
2007-4-5 16:13
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
6
在OD里bp下就知道地址了。
比如bp CreateMutexA,然后查看Ctrl+B(断点),那个地址就是你系统上的。
2007-4-5 18:24
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
7
双转单用这里的法子好点:)

http://bbs.pediy.com/showthread.php?t=41185
2007-4-5 19:01
0
游客
登录 | 注册 方可回帖
返回
//