吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14910|回复: 10
收起左侧

[分享] 一起来手脱穿山甲4.x

  [复制链接]
crackist 发表于 2012-7-19 15:12
首先申明这不是我的原创,我只是在学习过程中对网上的方法反复实践后加以自己的理解和感受,希望可以帮助各位新手朋友更好的去理解和吸收。
这是我来到吾爱发表的第二篇帖子,加入吾爱也没怎么活跃,多数时间都用到看教程和实践去了,天天泡在论坛也没多大作用,所以没怎么上。希望管理大大高抬贵手别看我没怎么活跃就把我ID给卡擦了~
新手朋友要学习,最好也找系列教程看。网上到处找这样破解教程那样破解教程脱这样壳那样壳的感觉实在学不到什么东西。这里我推荐两个比较好的教程:
  • 黑鹰破解教程 这个有五十多节课,详细讲解了很多壳的脱法和拓展思路
  • 天草破解全集 这个课程比较多,其中分为初级班,中级班,高级班。实实在在的从基础开始讲解,相信很多和我一样没基础的朋友看完也可以有很大的收获。看教程不是去取鱼,而是取“渔”。

我看教程之前,喜欢先把附件提取出来自己先搞一下,一种方法完成了看看有没有另外的方法可以达到相同的效果。要是自己是在是没办法去完成,可以看看教程中的破文,看看是不是需要什么特殊的断点,或者特别注意的函数。破文里面提到的函数也别去复制粘贴,因为我们看教程的目的是学会并吸收这一知识,而不是单单去脱掉这个壳或者破解这个软件。复制一次粘贴一次当然可以达到这个目的,但是你真的记住了吗?下次遇到相同的壳你能准确下断吗?所以把这些东西反复输入,真正记住才是我们要去做到的东西。


好了开始进入正题。
转一点对穿山甲的概述:

遇到过Armadillo的朋友应该知道,它是有点变态的。。中文意思“穿山甲”,可想而知,是很难脱的。

首先介绍一下Armadillo的一些版本以及保护方式、线程情况吧

A:版本
   1.xx--2.xx
   3.0a--3.61
   3.75
   3.78
   4.x

B:保护方式
   标准方式
   非标准方式======>Armadillo CopyMem-ll +Debug-Blocker

C:线程
   单线程
   双线程

上面三种特征都可以两两组合,或者是三三组合。
我们先用PEID查壳,得到的结果是:Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
11.jpg
  • 载入OD,设置调试选项的”异常“选项卡,勾选所有异常选项,并且添加”C000001E,E06D7363“这两个异常,不然调试的时候是跳不过去的。
  • 用插件隐藏OD。
  • 因为这个壳是个双线程的壳,会阻止调试器,所以我们在命令窗口输入:bp OpenMutexA————回车键,来把它作为一个合法的子进程。
F9,如果前面准备工作做完应该是来到这么一个位置的附近。
7C80EABB > 8BFF mov edi,edi
7C80EABD 55 push ebp
7C80EABE 8BEC mov ebp,esp
7C80EAC0 51 push ecx
7C80EAC1 51 push ecx
7C80EAC2 837D 10 00 cmp dword ptr ss:[ebp+0x10],0x0
7C80EAC6 56 push esi
7C80EAC7 0F84 A7550300 je kernel32.7C844074
7C80EACD 64:A1 18000000 mov eax,dword ptr fs:[0x18]
7C80EAD3 FF75 10 push dword ptr ss:[ebp+0x10]
7C80EAD6 8DB0 F80B0000 lea esi,dword ptr ds:[eax+0xBF8]
7C80EADC 8D45 F8 lea eax,dword ptr ss:[ebp-0x8]
7C80EADF 50 push eax
4.我们在这里不要删除断点,跳转(Ctrl+G)来到00401000,这个时候这里是一片空数据。我们注意堆栈窗口,代码如下:
0012F710   007EF29B  /CALL 到 OpenMutexA 来自 FlyWoool.007EF295
0012F714   001F0001  |Access = 1F0001
0012F718   00000000  |Inheritable = FALSE
0012F71C   0012FDA0  \MutexName = "FE0::DA47D45903"
5.我们在00401000这里开始输入以下指令并且将”用NOP填充“勾上:
pushad
pushfd
push 0012FDA0                            //这里的地址是我们堆栈里”MutexName“一项前面的地址,自己看下就明白了
xor eax,eax
push eax
push eax
call kernel32.CreateMutexA
popfd
popad
jmp kernel32.OpenMutexA
6.输入完以后,我们选上刚刚添加的这一段指令,右键——”此处新建EIP“,F9执行。再次来到
7C80EABB >  8BFF            mov edi,edi
7C80EABD    55              push ebp
7C80EABE    8BEC            mov ebp,esp
7C80EAC0    51              push ecx
7C80EAC1    51              push ecx
7C80EAC2    837D 10 00      cmp dword ptr ss:[ebp+0x10],0x0
7C80EAC6    56              push esi
7C80EAC7    0F84 A7550300   je kernel32.7C844074
7C80EACD    64:A1 18000000  mov eax,dword ptr fs:[0x18]
7C80EAD3    FF75 10         push dword ptr ss:[ebp+0x10]
7C80EAD6    8DB0 F80B0000   lea esi,dword ptr ds:[eax+0xBF8]
7C80EADC    8D45 F8         lea eax,dword ptr ss:[ebp-0x8]
7C80EADF    50              push eax
这个地方断下,此时我们的OpenMutexA断点任务就完成了,取消断点再次来到00401000把刚才添加的指令撤销掉,也就是还原成空数据。为什么要这样做?这里也引用原文的一段话好了。
为何要这样做?我发现程序在下面会依据原先的代码进行解码,
以前下 硬件断点 操作没有修改原代码,所以解码正确。
而直接修改Magic Jump后改变了原先的代码,导致解码不正确而异常出错!
现在我们在解码以前恢复原先的代码,因此就不会再出错了!
7.添加下一个断点:he OutputDebugStringA   ,下好断点后F9运行,来到此处,这里我上个图。
123.jpg
可以看到很多奇怪的字符串%s
我们把数据窗口设置为”长型“—”地址“
我们在堆栈的那一串%s上面右键——在数据窗口跟随。
我们来到数据窗口,在第一个地址上面右键— 二进制—使用00填充
F9运行,再次重复刚才的操作。
两次00填充数据窗口的第一个地址后,我们这个断点的工作也完成了,取消硬件断点。

8.取消上一个断点后,接下来的一个断点是:he GetModuleHandleA+5
下好断点,F9寻找最佳返回时机可以到达magic jump,什么时候是最佳返回时机?我们注意堆栈。
过了
001292A8 |010C6AC2 返回到 010C6AC2 来自 kernel32.GetModuleHandleA
001292AC |010DBD6C ASCII "kernel32.dll"
001292B0 |010DDDAC ASCII "VirtualAlloc"                                            //注意这里
来到的地方是

001292A8  |010C6ADF  返回到 010C6ADF 来自 kernel32.GetModuleHandleA
001292AC  |010DBD6C  ASCII "kernel32.dll"
001292B0  |010DDDA0  ASCII "VirtualFree"
这两个函数连续出现的下一次F9断下的地方
0012900C  |010B5A99  返回到 010B5A99 来自 kernel32.GetModuleHandleA
00129010  |0012915C  ASCII "kernel32.dll"
这里就是最佳返回时机,此处我们取消硬件断点,ALT+F9返回。
来到这里:
<blockquote><blockquote>010B5A99    8B0D 6C500E01   mov     ecx, dword ptr ds:[0x10E506C]
此处我已经注明了Magic Jump,至于怎么找呢?我们只要找到这附近跳转跨度很大的一个JE就可以确定下了。
修改JE为JMP,在我们修改的Magic Jump上面跟随下来,找到下面的
010B5C14   /EB 03           jmp     short 010B5C19
010B5C16   |D6              salc
010B5C17   |D6              salc
在两个Salc的上一个地址下”硬件执行断点“,这里也就是0010B5C14这个地址。
F9执行到我们下的断点这里。到了这里断下以后,取消硬件断点,特别注意的是我们还要回到上面的Magic Jump的地址,撤销所选地址修改将代码还原,原因我上面也已经标注了,忘记的可以上翻看下,要真正的理解到脑子里。

9.确定上一个硬件断点已经取消掉以后,我们ALT+M打开内存镜像,在00401000上面下断,shift+F9运行,来到此处。
010D0324    8B0C3A          mov     ecx, dword ptr ds:[edx+edi]
010D0327    5B              pop     ebx
010D0328    03D7            add     edx, edi
010D032A    A1 A4100E01     mov     eax, dword ptr ds:[0x10E10A4]
010D032F    3148 70         xor     dword ptr ds:[eax+0x70], ecx
010D0332    A1 A4100E01     mov     eax, dword ptr ds:[0x10E10A4]
010D0337    3148 70         xor     dword ptr ds:[eax+0x70], ecx
010D033A    A1 A4100E01     mov     eax, dword ptr ds:[0x10E10A4]
010D033F    8B16            mov     edx, dword ptr ds:[esi]
010D0341    8B88 84000000   mov     ecx, dword ptr ds:[eax+0x84]
010D0347    3348 60         xor     ecx, dword ptr ds:[eax+0x60]
010D034A    3348 34         xor     ecx, dword ptr ds:[eax+0x34]
010D034D    030D BC100E01   add     ecx, dword ptr ds:[0x10E10BC]    ; FlyWoool.00400000
010D0353    85D2            test    edx, edx
010D0355    75 1E           jnz     short 010D0375
010D0357    8B90 88000000   mov     edx, dword ptr ds:[eax+0x88]
010D035D    FF76 18         push    dword ptr ds:[esi+0x18]
010D0360    3390 84000000   xor     edx, dword ptr ds:[eax+0x84]
010D0366    FF76 14         push    dword ptr ds:[esi+0x14]
010D0369    3350 40         xor     edx, dword ptr ds:[eax+0x40]
010D036C    FF76 10         push    dword ptr ds:[esi+0x10]
010D036F    2BCA            sub     ecx, edx
来到此处我们离胜利就不远了,F8单步走,直到CALL ECX,F7跟进。
234.jpg
呵呵到达OEP了,因为解密的原因所以OEP是红色的,正常情况不用怕。打开LordPE脱壳把。
纠正镜像大小—完整脱壳。
脱壳完毕后我们打开Import REC进行修复。
填入OEP地址”B79A6“,我们OD里面的地址是加了基址00400000的,所以我们在Import REC里面填入OEP地址应该是004B79A6 - 00400000 = B79A6
填好OEP——自动查找IAT(IAT AutoSearch)——获取资源(Get Imports)——显示无效(ShowInvald)
这里我们不用什么等级去修复,直接剪切(cut thunk(s))——修复(Fix Dump)——选择刚刚我们LordPE保存下的文件
完成后查壳
22.jpg
已经脱掉,然后运行也是没问题的。
OK就到这里了~谢谢阅读~给分给分

免费评分

参与人数 3热心值 +3 收起 理由
治愈先生 + 1 鼓励转贴优秀软件安全工具和文档!
Ruin + 1 鼓励转贴优秀软件安全工具和文档!
Sound + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| crackist 发表于 2012-7-19 19:21
Sound 发表于 2012-7-19 16:27
穿山甲还是不错的.

楼主的签名图好霸气 看的很眼熟

眼熟就对了
Sound 发表于 2012-7-19 16:27
穿山甲还是不错的.

楼主的签名图好霸气 看的很眼熟
小淫仙 发表于 2013-7-24 14:03
Ruin 发表于 2012-7-20 16:34
穿山甲 版本诡异
 楼主| crackist 发表于 2013-8-6 00:44
Stimulants 发表于 2013-7-24 14:03
奇怪啊,为什么三人行(天草)不在论坛呢

小雨细无声 发表于 2013-8-6 10:03
穿山甲很经典,还继续更新。
hlkiller 发表于 2013-8-6 21:22
很不错的脱文。收藏学习了,等会去试验下
wu0687050 发表于 2013-8-7 00:29
好牛啊 看了就不敢动了
菜菜菜鸟 发表于 2015-4-1 20:34
呵呵呵,这就是三人行的啊。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-17 08:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表