dujiaoshu 发表于 2008-7-31 07:05:40

真真正正的菜鸟级的破解教程--穿山甲3.00a - 3.61脱壳并破解学习笔记

根据天草破解里的一个视频做的


   

高手做的教程似乎都是针对差不多入门水平的菜鸟做的,好多关键的地方都是一句话带过,菜鸟晕糊糊的,一旦发问,高手一句话,看书去,补好基础再来!!噎个半死………………


这个教程是我对照着天草的一个破解教程做出来的,因为俺也是一菜鸟啊,所以特别的理解菜鸟的水平和心理,感觉做的足够详细,应该让你清清楚楚,明明白白,照猫画出老虎来……至少,要比高手做的浅显的太多了,如果还是画不出来,那就还对着视频教程看吧,也怪我功夫差……

查壳先……Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks    低版本的穿山甲



首先 下 bp GetModuleHandleA+* 断点,其中GetModuleHandleA这个函数是高手们总结出来的针对穿山甲的一个断点函数,大家不要问原理,记清楚就行了,恩,尤其要记得各个字母的大小写,其实很简单,函数们几乎都是英文字母或者其缩写构成的,每个字母的开头就是大写,也就是说,英文好的就特别好理解。英文不好的就只要靠死记硬背了。这里不由得想说一下,天草肯定学历不高,好多英文字母差不多都是按汉语拼音念的,不过他能有这个水平,不得不佩服他。其中*为一常数,如1,3 5,6等等,因为穿山甲一直升级的,它会对GetModuleHandleA这个函数进行检测,加一个常数就可以跳过这个检测,另外,这样的下断法好像只能xp下才可以,2000已验证不行,2003估计也不行。


然后多次shift+f9(不是不停的按,是按一次就停一下看od反应),到有一次od停下很慢的时候,就到magic jump了(所谓magic jump,直接翻译就是魔法跳转,什么意思呢?按照我的也许不太准确的理解就是,穿山甲这样的加密壳会把ITA混乱,某个跳转就是其混乱之前的最后一个跳转,就称为magic jump),另一个显著标志是程序停下来的时候是返回到系统 kernel32领空的。

然后清除断点(按F2即可),alt+f9执行到用户代码,看到如下:
00AF534A            50                     push eax
00AF534B            FF15 B850B100          call dword ptr ds:            ; kernel32.LoadLibraryA
00AF5351            8B0D 60D8B100          mov ecx,dword ptr ds:

标志是 ; kernel32.LoadLibraryA


往下找je跳转,一般有2个,但是一般第一个跳的更远,把它改成jmp,然后命令行下断:bp CreateThread,回车,shift+f9运行,这个时候会因为有好多异常,需要不少时间,要耐心等待,最开始的时候我不晓得,老是以为是程序死掉了,就一次又一次的关掉od重来,浪费了好多时间。


停下来之后,再次f2清除断点,之后就f8走,看到有call edi,就f7进去,这就是oep了。

00434A94            55                     push ebp
00434A95            8BEC                   mov ebp,esp
00434A97            6A FF                  push -1
00434A99            68 08D84300            push gz_LibIn.0043D808
00434A9E            68 844C4300            push gz_LibIn.00434C84                  ; jmp to msvcrt._except_handler3



脱壳的时候最好用lordpe,因为我多次用插件ollydump脱,总是死。

然后ImportREC修复,oep地址虽然是00434A94,但是修复的时候并不能填写这个,可以用插件ollydump找到那个“-->修改”后的值,然后自动查找ITA,再点“显示无效的”,按经验,少于20个无效的就直接cut(剪切)掉,然后点“修复转储文件”。


再次peid查壳,结果显示穿山甲1.xx-2.xx的壳,天草解释说那是因为穿山甲1.xx的标志和c++差不多,误报的,可以用fi查就比较准确了。




至于破解倒是好简单的,附下他的破解过程:

0041E8E0下断(这里是说脱过壳的程序)

0041E9DB   E8 00C2FEFF   call DUMPED_.0040ABE0            ; 进去


0040ADFB   33C0            xor eax,eax//修改成or eax,eax


不过我在试验的时候,发现这里下断并没有断下来,就直接运行了,也许是各人的电脑地址不同吧。大家按套路自己来破解一下吧,我们学的是技术,不是动作。后来发现是,必须跟着程序走才可以断下来,直接下断再运行是不行的,这个道理如同此一时,彼一时的道理。具体的破解步骤看我下面的纪录吧。

感觉收获是比最原始的爆破更进一步,这里xor eax,eax//修改成or eax,eax是用到标志位的破解法,比那种直接改jmp之类的要好,因为改jmp经常会有这种情况,就是你随便输入,点注册,显示注册成功,但是一旦关闭程序,重新运行又要你注册了。而这样改,有什么不同,大家自己都试验一下吧…………


另外学了一招:f12**


od载入,运行,f12暂停,然后点k键(可不是键盘上的那个k键,是od界面上的那个),找到调用注册失败对话框,双击,往下找到段尾的retn,下断,然后f9继续运行,弹出注册失败对话框,点确定,就停在了那个retn上了,下面一个f8就返回到程序领空了(有的时候也许还会再有几行代码再返回的),之后就是细细的找关键跳了。最好删除所有断点,以免干扰。快捷键alt+b,选中断点,按delete。或者右键选删除。
返回到了这里:0041EA74

0041EA6F            E8 CA5A0100            call <jmp.&mfc42.#1200>
0041EA74            8D4C24 08            lea ecx,dword ptr ss:

上面有一call,不用说,就是调用那个注册失败的对话框了!我们往上找看看有哪个跳转可以跳过这个对话框的。如下:

0041E9DB            E8 00C2FEFF            call dumped_.0040ABE0
0041E9E0            83C4 08                add esp,8
0041E9E3            A3 DC8D4400            mov dword ptr ds:,eax
0041E9E8            85C0                   test eax,eax
0041E9EA            6A 00                  push 0
0041E9EC            6A 00                  push 0
0041E9EE            74 6F                  je short dumped_.0041EA5F

0041E9EE可以跳过注册失败的对话框,那么一般经验,它上面的一个call应该就是关键call,在上面下断,f9运行,再次点注册,断下,f7跟进去,一般来说,不管下面的段有多长, 大部分都是算法,最关键的就是最后返回一个标志,经验的说,一般最常见的就是返回eax或者ebx的值为1或者0,1就是注册版,0就是未注册,我见过的还有返回3和5的,分别代表硬盘和光盘,这个是用在游戏的破解,即光盘版转硬盘版。或者返回一系列数字,分别代表各种注册类型,如单用户版,工作站版等等的。当然另外一个常见的是返回AL,BL等等的值,这个也不明白的话,那你一定得先去补习一点最基本的 汇编知识了。我就直接找到这一段的段尾,即retn。然后往上瞅瞅,看到了好东西:

0040ADFB            33C0                   xor eax,eax

xor eax,eax,表示清零的意思,也就是说,eax的值就为0了。换句话说就是,如果执行了这句,那么程序就返回为未注册版了,所以这里就是破解的关键地,简单的方法有两种,一,xor eax,eax改为or eax,eax,or与xor相反,所以eax返回为1。二、或者直接给eax赋值,改为mov eax,1
总之不管你用什么方法,让eax的值变成1就可以了。


ok,保存,注册一下看看,输入什么都注册成功了。




花费了一个上午,终于第一次学会了脱穿山甲的壳了,虽然是标准的单进程,并且是低版本的,而且还是照猫画老虎的,但是,毕竟是一个进步了。



还有,天草的破解纪录和视频教程中所用到的函数居然大部分都不一样,奇怪啊。照他那个破解纪录都别想脱好,要不是对着教程一步步的照做了好多遍,我还学不会呢。附带程序,大家自己练手吧。

[ 本帖最后由 dujiaoshu 于 2008-7-31 07:08 编辑 ]

jsj731 发表于 2008-7-31 14:42:50

坐回沙发了,支持楼主。

hggg 发表于 2008-7-31 19:47:47

楼主写得真是不错,适合我等菜鸟看,期待更多的文章。

雲飛揚 发表于 2008-8-28 11:06:08

穿山甲的壳不好破
学习了,真是不错.

修一明 发表于 2008-8-28 16:43:02

oh yeah学习了啊//
f12**....

jjccnn168 发表于 2008-8-31 00:40:23

很好有学习一下了!谢谢朋友的分享!

hhmmys 发表于 2008-8-31 10:54:28

我连菜鸟还不到/:L

vrwqq 发表于 2008-9-1 13:47:32

太有才了,其它的壳用ESP定律很有效,只有这个比较难。

laniv 发表于 2008-9-1 14:08:24

he很详细哦。
不错。

fuehrer 发表于 2008-9-4 22:29:58

就是啊!偶这样的菜鸟要有这样的好东东才能起飞啊!/:018 /:018
页: [1] 2
查看完整版本: 真真正正的菜鸟级的破解教程--穿山甲3.00a - 3.61脱壳并破解学习笔记