Reveal 逆向與使用
前言
在接觸 macOS 前就有耳聞 Reveal 這套軟體。
前幾天,一個閒來無事的下午,試用了一下 Reveal,順手將其逆向了。
本文僅為學術研究,請支持正版軟體。
關於 Reveal
Reveal 是個用於檢視 iOS App 介面結構與除錯的工具。
其可以於開發過程中動態調校應用程式的樣式,或植入第三方應用程式來查看其介面結構。
該軟體只提供 macOS 版本。
我們將使用 IDA 逆向 Reveal 找出顯示歡迎視窗的關鍵函式,並將其禁用。
軟體需求
Reveal:檢視應用程式介面結構與除錯工具。
IDA:反組譯與除錯工具,常用於逆向工程。
實作過程
下載 Reveal
官網 下載 Reveal,為了後續與設備配合,本文以 Reveal 17 為例。
禁用 Reveal 簽名驗證
-
以 IDA 開啟
Reveal.app/Contents/MacOS/Reveal
。 -
搜尋
Code Signing Verification Failed
:__text:000000010020CD57 jz short loc_10020CD61 __text:000000010020CD59 mov r12, rbx __text:000000010020CD5C jmp loc_10020CDF1 __text:000000010020CD61 ; --------------------------------------------------------------------------- __text:000000010020CD61 __text:000000010020CD61 loc_10020CD61: ; CODE XREF: sub_10020CD30+27↑j __text:000000010020CD61 inc cs:qword_100550040 __text:000000010020CD68 mov rdi, cs:classRef_IBAAnalytics __text:000000010020CD6F call sub_10000CDE0 __text:000000010020CD74 mov rsi, cs:selRef_sharedInstance ; char * __text:000000010020CD7B mov rdi, rax ; void * __text:000000010020CD7E call _objc_msgSend __text:000000010020CD83 mov rdi, rax __text:000000010020CD86 call _objc_retainAutoreleasedReturnValue __text:000000010020CD8B mov r14, rax __text:000000010020CD8E inc cs:qword_100550058 __text:000000010020CD95 lea rdi, aCodeSigningVer ; "Code Signing Verification Failed"
可以發現
loc_10020CD61
就是簽名驗證失敗的邏輯。 -
選中
10020CD59
,右鍵
→Rename
,命名為disable_sign
: -
修改
10020CD57
的轉跳邏輯:將下列組合語言:
__text:000000010020CD57 jz short loc_10020CD61
修改為:
__text:000000010020CD57 jmp short disable_sign
-
套用以上修改:
重新簽名
執行修改後的程式會閃退,因為簽名被破壞,無法通過 macOS 系統本身的簽名驗證。
-
開啟
鑰匙圈存取
→憑證輔助程式
→製作憑證
-
名稱:
Pass
,憑證類型:代碼簽名
。 -
使用終端機在 Reveal.app 所在的目錄下指令簽名:
codesign -f -s "Pass" Reveal.app
-
重簽完成。
禁用歡迎視窗
-
以 IDA 開啟
Reveal.app/Contents/Frameworks/DevMateKit.framework/Versions/A/DevMateKit
。 -
找到函式,修改為
retn
,如下:__text:0000000000032FCC __DMActivationController_runActivationWindowInMode_initialActivationInfo_withCompletionHandler__: __text:0000000000032FCC ; DATA XREF: __objc_const:00000000000D9400↓o __text:0000000000032FCC ; __unwind { __text:0000000000032FCC retn
-
重新開啟 Reveal 後,歡迎視窗沒再出現了,但上方工具列中的許多項目依然是不可用的狀態。
不過,大部分的功能都能在主界面中操作,不太影響使用。
植入設備
將 libReveal17.dylib、libReveal17.plist 放入越獄設備中以下路徑:
/Library/MobileSubstrate/DynamicLibraries
開啟設備 AppStore,可在 Reveal 中看到其介面結構。
若要更換調校對象,修改libReveal17.plist
中的Bundles
即可。