飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9207|回复: 15

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

[复制链接]
  • TA的每日心情
    开心
    2024-8-9 22:30
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-7-31 07:05:40 | 显示全部楼层 |阅读模式
    根据天草破解里的一个视频做的


       

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


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

    查壳先……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:[B150B8]              ; kernel32.LoadLibraryA
    00AF5351            8B0D 60D8B100          mov ecx,dword ptr ds:[B1D860]

    标志是 ; 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:[esp+8]

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

    0041E9DB            E8 00C2FEFF            call dumped_.0040ABE0
    0041E9E0            83C4 08                add esp,8
    0041E9E3            A3 DC8D4400            mov dword ptr ds:[448DDC],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 编辑 ]
    成果.GIF

    查重软件2.0.part1.rar

    488.28 KB, 下载次数: 65, 下载积分: 飘云币 -2 枚

    查重软件2.0.part2.rar

    290.87 KB, 下载次数: 66, 下载积分: 飘云币 -2 枚

    评分

    参与人数 1威望 +40 飘云币 +40 收起 理由
    hj2008mt + 40 + 40 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-7-31 14:42:50 | 显示全部楼层
    坐回沙发了,支持楼主。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-15 13:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-7-31 19:47:47 | 显示全部楼层
    楼主写得真是不错,适合我等菜鸟看,期待更多的文章。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-28 11:06:08 | 显示全部楼层
    穿山甲的壳不好破
    学习了,真是不错.
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2023-3-23 15:24
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    发表于 2008-8-28 16:43:02 | 显示全部楼层
    oh yeah  学习了啊//
    f12**....
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-31 00:40:23 | 显示全部楼层
    很好有学习一下了!谢谢朋友的分享!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-31 10:54:28 | 显示全部楼层
    我连菜鸟还不到/:L
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-1 13:47:32 | 显示全部楼层
    太有才了,其它的壳用ESP定律很有效,只有这个比较难。
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2023-2-28 11:00
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-9-1 14:08:24 | 显示全部楼层
    he很详细哦。
    不错。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-4 22:29:58 | 显示全部楼层
    就是啊!偶这样的菜鸟要有这样的好东东才能起飞啊!/:018 /:018
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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