[OSX][ASM]OSX上對已購買軟體逆向,破解Apple Store購買驗證手法

本文靈感來自專拆OSX的大神發布的影片
不過我沒有用OTX那個工具也不想記Hex & Opcode的轉換XD
這邊我選擇使用Hopper Disassembler v3版本作為整個破解手法的核心工具

另外,影片中有用簽章工具去重簽,但我沒有XD,如果你很執著想讓破解完後的軟體可以跑在別人的OSX環境上(沒有開啟允許非Apple Store的選項狀況下)還是得做重新簽章的動作唷

已購買拔除驗證的程式

有跟那個大神要來了同樣的一支程式拔掉了Recept檔案(內紀錄了Mac碼、購買人資訊...等)。跟大神要回來的檔案開啟後會像這樣:
在影片中提及173(0xAD)就是當開發者使用Apple Store提供的Framework時發現驗證檔案有問題時會用173這個編號當作訊息回覆給系統然後call exit來結束程式,程式結束後OSX系統就會顯示如上圖的訊息來告知使用者這個程式不可使用。

分析過程

這邊我選用Hopper Disassembler v3來開啟這個軟體中的exec(核心執行文件)
接著Hopper就會幫你停在EP這邊囉。
那麼接下來怎麼找到程式在做檢測是否有問題來發送173並且退出的點?

這邊我使用了Hopper內的搜尋(command+F)然後搜尋0xAD。
可以看到第一個找到的點在這裡0x100029db0,接著後面call了got__objc_msgSend
這就是第一個檢測點,而且應該是程式內開發者自己設計的檢測點
這邊使用Hopper內的反組譯功能可以看到這段回推obj-c程式碼如下:
反白處為我們找到的第一個173訊號設定點,這邊開發者使用了FileExistsAtPath的API做呼叫,如果返回值是0(購買權限檔案不存在)便會回傳173訊息給系統。
所以為了阻止這種惡劣的打小報告行為(?)我在0x100029da5上的test al,al這邊做的一個BYTE的檢測之後有個jne  0x100029dbe下一個強跳,就可以避免開發者設計的173回傳回去給系統了,使用Hopper內建的Assembler Instruction功能修改為jmp就可以了。

接著我們繼續搜索0xAD可以看到第二個點:
在0x1000f4aa6這個函數很直接的就exit(0xAD)
我們可以往上捲一點,可以看到:
可以看到箭頭指向到會呼叫到exit(0xAD)有兩個點,第一個點是在0x10004fa8d上的jne,把它nop掉即可。
接著往上找(沿著左邊那個箭頭)誰呼叫了0x10004faa6,
可以往上翻到這個位置(那條粗藍色的就是連到剛剛的exit(0xAD) ):

為了避免被呼叫到exit(0xAD),網上找到0x10004f96d底下那個je讓它下一個強跳即可。
(可以根據箭頭看到那裡做強跳會直接跳到exit(0xAD)之後)

最後使用Hopper來生產出新的exec並且覆蓋回去原始的exec
登愣~ε-(´∀`; )
原本害羞內向不給開的程式就破解掉Apple Store購買驗證囉

熱門文章