前言

在接觸 macOS 前就有耳聞 Reveal 這套軟體。

前幾天,一個閒來無事的下午,試用了一下 Reveal,順手將其逆向了。

本文僅為學術研究,請支持正版軟體。


關於 Reveal

Reveal 是個用於檢視 iOS App 介面結構與除錯的工具。

其可以於開發過程中動態調校應用程式的樣式,或植入第三方應用程式來查看其介面結構。

該軟體只提供 macOS 版本。

我們將使用 IDA 逆向 Reveal 找出顯示歡迎視窗的關鍵函式,並將其禁用。


軟體需求

Reveal:檢視應用程式介面結構與除錯工具。

IDA:反組譯與除錯工具,常用於逆向工程。


實作過程

下載 Reveal

官網 下載 Reveal,為了後續與設備配合,本文以 Reveal 17 為例。


禁用 Reveal 簽名驗證

  1. 以 IDA 開啟Reveal.app/Contents/MacOS/Reveal

  2. 搜尋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就是簽名驗證失敗的邏輯。

  3. 選中10020CD59右鍵Rename,命名為disable_sign

  4. 修改10020CD57的轉跳邏輯:

    將下列組合語言:

    __text:000000010020CD57                 jz      short loc_10020CD61
    

    修改為:

    __text:000000010020CD57                 jmp      short disable_sign
    
  5. 套用以上修改:


重新簽名

執行修改後的程式會閃退,因為簽名被破壞,無法通過 macOS 系統本身的簽名驗證。

  1. 開啟鑰匙圈存取憑證輔助程式製作憑證

  2. 名稱:Pass,憑證類型:代碼簽名

  3. 使用終端機在 Reveal.app 所在的目錄下指令簽名:

    codesign -f -s "Pass"  Reveal.app
    
  4. 重簽完成。


禁用歡迎視窗

  1. 以 IDA 開啟Reveal.app/Contents/Frameworks/DevMateKit.framework/Versions/A/DevMateKit

  2. 找到函式,修改為retn,如下:

    __text:0000000000032FCC __DMActivationController_runActivationWindowInMode_initialActivationInfo_withCompletionHandler__:
    __text:0000000000032FCC                                         ; DATA XREF: __objc_const:00000000000D9400↓o
    __text:0000000000032FCC ; __unwind {
    __text:0000000000032FCC                 retn
    
  3. 重新開啟 Reveal 後,歡迎視窗沒再出現了,但上方工具列中的許多項目依然是不可用的狀態。

    不過,大部分的功能都能在主界面中操作,不太影響使用。


植入設備

libReveal17.dyliblibReveal17.plist 放入越獄設備中以下路徑:

/Library/MobileSubstrate/DynamicLibraries

開啟設備 AppStore,可在 Reveal 中看到其介面結構。

若要更換調校對象,修改libReveal17.plist中的Bundles即可。