[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這個函...