好友
阅读权限10
听众
最后登录1970-1-1
|
88688
发表于 2009-10-1 09:49
菜鸟也脱穿山甲4.x (适合新手练习)
这是个查找具有相同的属性的文件的小软件,你是否经常下载许多资料,是否有过下载重复的时候。查找重复文件可以清除相同的文件.在深度和宝藏网有破解版的.今天我不是破解它,而是来脱掉大名鼎鼎的穿山甲4.x.遇到过Armadillo的朋友应该知道,它是有点变态的。。中文意思“穿山甲”,可想而知,是很难脱的。
首先介绍一下Armadillo的一些版本以及保护方式、线程情况吧!
1:版本
1.xx--2.xx
3.0a--3.61
3.75
3.78
4.x
2:保护方式
标准方式
非标准方式======>Armadillo CopyMem-ll +Debug-Blocker
3:线程
单线程
双线程
上面三种特征都可以两两组合,或者是三三组合。。变化方式之多,可见一斑!下面我将做下总结!希望能够起到抛砖引玉的作用!
保护方式判断:如果你用脱标准壳的方法去脱不行的话,那么就很有可能是非标准版。
线程的判断:运行程序,打开系统的任务管理器,看看有几个同名进程。当燃最多是两个,不会有三个.目前国内有许多游戏外挂都是用它来加密的...
————————————————————————————————————————————
脱壳前的准备:▲
1、OD设置忽略所有的异常,用隐藏插件隐藏OD!▲
2、思想准备:Armadillo对断点的检测非常严格,所以我们在设置断点的时候要尽量去使用“硬件执行”▲
3、概念准备:使用PEID的Armadillo的版本检测一般没那么准确,fi的版本检测还是要强一些
4、Magic Jump:跳转的跨越段一般比较大!(返回时机一定要对!)
5:返回的时机:1、返回的地址是系统领空
2、Shift+F9过程当中,时间缓冲比较大才停下(得自己体会一下)▲
都准备好咯吧!那大家就跟我来脱掉它吧!
————————————————————————————————————————————
一: 首先用PEID来查壳:Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
OD载入:
00473000 > 60 pushad
00473001 E8 00000000 call SearchRe.00473006
00473006 5D pop ebp
00473007 50 push eax
00473008 51 push ecx
00473009 0FCA bswap edx
0047300B F7D2 not edx
0047300D 9C pushfd
0047300E F7D2 not edx
00473010 0FCA bswap edx
00473012 EB 0F jmp short SearchRe.00473023
00473014 B9 EB0FB8EB mov ecx,EBB80FEB
这是入口,不要动,在命令窗口输入:bp OpenMutexA 意思就是双变单(使程序把自己当成子进程运行)
SHIFT+F9运行后,停在了这里:0047C5C3 F0: prefix lock:
0047C5C4 F0:C7 ??? ; 未知命令
0047C5C6 C8 64678F enter 6764,8F
0047C5CA 06 push es
0047C5CB 0000 add byte ptr ds:[eax],al
0047C5CD 83C4 04 add esp,4
0047C5D0 C3 retn
0047C5D1 03C5 add eax,ebp
0047C5D3 C3 retn
0047C5D4 B9 EA7A0000 mov ecx,7AEA
0047C5D9 C3 retn
0047C5DA B8 661A0000 mov eax,1A66
0047C5DF C3 retn
大家注意到OD的左下角了没有啊?看看那里有什么提示,看到了吧!提示有异常,这时打开OD的选项菜单:异常→添加最近异常→确定→钩选“同时忽略以下指定的....”→确定。就OK 了.
这时再来SHIFT+F9运行:
7C80EA1B > 8BFF mov edi,edi
7C80EA1D 55 push ebp
7C80EA1E 8BEC mov ebp,esp
7C80EA20 51 push ecx
7C80EA21 51 push ecx
7C80EA22 837D 10 00 cmp dword ptr ss:[ebp+10],0
7C80EA26 56 push esi
7C80EA27 0F84 66530300 je kernel32.7C843D93
7C80EA2D 64:A1 18000000 mov eax,dword ptr fs:[18]
7C80EA33 FF75 10 push dword ptr ss:[ebp+10]
7C80EA36 8DB0 F80B0000 lea esi,dword ptr ds:[eax+BF8]
7C80EA3C 8D45 F8 lea eax,dword ptr ss:[ebp-8]
7C80EA3F 50 push eax
(看一下是你们运行后是不是停在这里,如果没有的话,那就是刚刚哪步没照我说的做吧!从新来过吧....)
前面下的BP断点先不要管它,按CTRL+G,输入:00401000 (确定)回车,来到一处空白的代码处:
00401000 0000 add byte ptr ds:[eax],al
00401002 0000 add byte ptr ds:[eax],al
00401004 0000 add byte ptr ds:[eax],al
00401006 0000 add byte ptr ds:[eax],al
00401008 0000 add byte ptr ds:[eax],al
0040100A 0000 add byte ptr ds:[eax],al
0040100C 0000 add byte ptr ds:[eax],al
0040100E 0000 add byte ptr ds:[eax],al
00401010 0000 add byte ptr ds:[eax],al
00401012 0000 add byte ptr ds:[eax],al
00401014 0000 add byte ptr ds:[eax],al
00401016 0000 add byte ptr ds:[eax],al
00401018 0000 add byte ptr ds:[eax],al
0040101A 0000 add byte ptr ds:[eax],al
看一下自己的哦!反汇编栏双击00401000反汇编栏,在弹出的窗口输入:如下
pushad
pushfd
push 13FDB0
xor eax,eax
push eax
push eax
call kernel32.CreateMutexA
popfd
popad
jmp kernel32.OpenMutexA
输入后:
00401000 60 pushad
00401001 9C pushfd
00401002 68 B0FD1300 push 13FDB0 ; ASCII "944::DA79836537"
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 2FD9407C call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 - E9 04DA407C jmp kernel32.OpenMutexA
00401017 90 nop
注意:只是反汇编栏的代码.截图01..右键→在此处新建EIP,提示:是.
然后F9直接运行.返回这里:
7C80EA1B > 8BFF mov edi,edi
7C80EA1D 55 push ebp
7C80EA1E 8BEC mov ebp,esp
7C80EA20 51 push ecx
7C80EA21 51 push ecx
7C80EA22 837D 10 00 cmp dword ptr ss:[ebp+10],0
7C80EA26 56 push esi
7C80EA27 0F84 66530300 je kernel32.7C843D93
7C80EA2D 64:A1 18000000 mov eax,dword ptr fs:[18]
7C80EA33 FF75 10 push dword ptr ss:[ebp+10]
取消前面下的断点.再CTRL+G来到00401000处,选上我们前面修改的,点右键→撤消全部修改,让它们变回原来的样子.
这样,下的第一个断点的任务就完成了.
————————————————————————————————————---——————
二:避开Anti(OD的一个漏洞,穿山甲就是用这个漏洞来反调式器的) 命令:he OutputDebugStringA
SHIFT+F9运行后断在这里:
7C859D78 > 68 34020000 push 234
7C859D7D 68 A0A0857C push kernel32.7C85A0A0
7C859D82 E8 3F87FAFF call kernel32.7C8024C6
7C859D87 A1 CC46887C mov eax,dword ptr ds:[7C8846CC]
7C859D8C 8945 E4 mov dword ptr ss:[ebp-1C],eax
7C859D8F 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
7C859D92 898D C4FDFFFF mov dword ptr ss:[ebp-23C],ecx
7C859D98 8365 FC 00 and dword ptr ss:[ebp-4],0
7C859D9C 8BC1 mov eax,ecx
7C859D9E 8D70 01 lea esi,dword ptr ds:[eax+1]
我们看堆栽:
0013DC68 00451917 /CALL 到 OutputDebugStringA 来自 SearchRe.00451914
0013DC6C 003E09D8 \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
0013DC70 00000004
0013DC74 00000000
0013DC78 0045FC43 SearchRe.0045FC43
0013DC7C 50000061
在这些“%s%s%s%s%s%s%s%s%s.......”点右键→数据窗口中跟随→到左下角的那个数据窗口出来的第一行点右键→二进制→使用00填充
再F9运行.在这些“%s%s%s%s%s%s%s%s%s.......”点右键→数据窗口中跟随→到左下角的那个数据窗口的第一行点右键→二进制→使用00填充
删除此断点!
————————————————————————-
字数太多.接下楼
[ 本帖最后由 Colaud 于 2008-8-10 18:50 编辑 ]
附件
Colaud穿山甲1.jpg (109.94 KB)
2008-8-10 18:45
Colaud 穿山甲2.jpg (136.62 KB)
2008-8-10 18:50 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|