1、开篇
本人研究解密已经有10来年了,从未间断,可一直没有什么长进,
除了当年在DOS下脱个壳,解密个水浒1,什么三国1之类。看看
周围的人都在搞什么.net,java之类,NE,PE,PPC,asm之类,大家
都在出书,什么大全,那个秘诀之类,感觉自己已经落后了许多,
Windows已经被大家玩烂了,什么壳估计也存不了1年,什么狗2年
也要升级,关键是有系统级调试工具,而且资料也很齐全,执行文件格式
等相当齐全。我就把以前看过的一些资料整理一下,加上自己的一点
理解拿出来,让大家也熟悉其它的系统。先谈一下MAC吧,如果说错了
欢迎跟贴指正。
2、MAC就是苹果机,现在可能是昨日黄花了,没办法他是一个封闭的操作系统
熟悉他必须有苹果机,一般的新机都要1W,二手机都要5K,而且软件多数
都是正版,一套上W,这也限制了它的普及以及国内应用,如果向深入研究
当然最好有一部MAC,当然是废话了。
3、苹果机的调试工具一般都是收费的,而且还需要两台,我可没有多余$,买一台
已经让老婆骂了(//sigh)。所以就只好用那个破macsbug了,这个工具我稍后讲
先讲一下我破mac的一般流程,用我的PC(Win2K)没办法,还是Win2k的软件多,
先讲一下静态破解的吧
PC上面安装PC MACLAN,和苹果机网络共享的软件,可以方便存取MAC上的文件
比如有一个**软件(说了要被起诉的哦)
执行无狗就弹出对话框然后退出,有狗才能正常运行,(这是废话一堆)
用IDA4。30正式版本,btw demo还不行,不能反编译PPC格式,打开这个执行文件,
seg000:00010168 .ExitToShell: # CODE XREF: sub_128568+B0p
seg000:00010168 # sub_144828+80p ...
seg000:00010168
seg000:00010168 .set arg_14, 0x14
seg000:00010168
seg000:00010168 lwz r12, TC_ExitToShell # ExitToShell
seg000:0001016C stw rtoc, arg_14(sp)
seg000:00010170 lwz r0, 0(r12)
seg000:00010174 lwz rtoc, 4(r12)
seg000:00010178 mtctr r0
seg000:0001017C bctr
seg000:0001017C # End of function .ExitToShell
退出一般都调用ExitToShell函数就和WIndows调用CloseWindow...只类差不多
那么看那个地方调用了呢
sub_128568
sub_144828
sub_16ea98
....
....
总共有7处,不多,一处处修改
seg000:00128618 loc_128618: # CODE XREF: sub_128568+84j
seg000:00128618 bl .ExitToShell
seg000:0012861C lwz rtoc, 0x40+var_2C(sp)
找到类似上面的地方把
bl .ExitToShell
替换成60000000 就是NOP了,当你改到001809C8这个地方,哦程序终于不退出了,但是那个
讨厌的对话框还在,
seg000:001809BC
seg000:001809BC mflr r0
seg000:001809C0 stw r0, arg_8(sp)
seg000:001809C4 stwu sp, var_38(sp)
seg000:001809C8 bl .ExitToShell
seg000:001809CC lwz rtoc, 0x38+var_24(sp)
seg000:001809D0 lwz r0, 0x38+arg_8(sp)
seg000:001809D4 addic sp, sp, 0x38
seg000:001809D8 mtlr r0
seg000:001809DC blr
那还要检查哪里调用了001809BC,一看是下面的
-------------------------
seg000:0012CDE0 cmplw cr1, r29, r31
seg000:0012CDE4 bne cr1, loc_12CE04 # 检查狗
seg000:0012CDE4 #
seg000:0012CDE8 mr r3, r31
seg000:0012CDEC li r4, 1
seg000:0012CDF0 bl sub_12CB58 对话框
seg000:0012CDF4 nop
seg000:0012CDF8 bl sub_1809BC 退出
seg000:0012CDFC nop
seg000:0012CE00 b loc_12CE48
seg000:0012CE04 # 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
seg000:0012CE04
seg000:0012CE04 loc_12CE04: # CODE XREF: seg000:0012CDDCj
seg000:0012CE04 # seg000:0012CDE4j
seg000:0012CE04 cmpwi r30, 0x3E9
seg000:0012CE08 bne loc_12CE30
seg000:0012CE0C cmplw cr1, r29, r31
seg000:0012CE10 bne cr1, loc_12CE30
seg000:0012CE14 mr r3, r31
seg000:0012CE18 li r4, 1
seg000:0012CE1C bl sub_12CB58 对话框
seg000:0012CE20 nop
seg000:0012CE24 bl sub_1809BC 退出
seg000:0012CE28 nop
讲到这里,大家就知道了把0012CDF0,0012CDF8,0012CE1C,0012CE24都修改为NOP就OK了
现在程序能够进入并且能够执行大部分的功能了。
其实就和PC里面的断点原理差不多,而且苹果机一般都没有壳,所以作起来相对容易一些
当然也看你对系统的熟悉程度了,如果大家喜欢,我就接着写。