談談mac機器和Sun的解密

看雪資料發表於2004-06-07

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   spsp, 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裡面的斷點原理差不多,而且蘋果機一般都沒有殼,所以作起來相對容易一些
當然也看你對系統的熟悉程度了,如果大家喜歡,我就接著寫。

相關文章