手把手教你破解蘋果商店App Store上的iOS應用

更新:2020年1月19日,加入破解 iOS12.0+系統無法使用 cycript 的解決方案。

前言

廢話不多說,直接進正題。
想要破解iOS應用,你需要準備些什么:

  1. 一個已越獄的手機。(本文用的是已越獄的5s, 8.1.2)
  2. class-dump點我查看class-dump的配置方法。
  3. iFunBox。(安裝在電腦端。不是必須,本文拷貝文件用到的是這個)
  4. Cycript。(使用cydia安裝在手機端)
  5. OpenSSH、MTerminal。(使用cydia安裝在手機端,點我查看在終端使用ssh連接手機的方法)
  6. dumpdecrypted。(用來砸殼,下面有詳細介紹)

一 砸殼

這里我們用到的砸殼利器是dumpdecrypted。
1. 制作砸殼工具,即dumpdecrypted.dylib.
1). 從github上clone或下載 dumpdecrypted 源碼到本地。下載之后的目錄如圖(我把默認的目錄名”dumpdecrypted-master”改成了”dumpdecrypted”):


2). 編譯源碼獲得dumpdecrypted.dylib。方法如下:
a.打開終端,進入dumpdecrypted目錄。
b.輸入命令make。
命令執行完成后會生成一個dumpdecrypted.dylib文件,這個就是砸殼需要用到的工具。這個文件可重復使用,不需要再次生成。如下圖:


2. 把砸殼工具拷貝到待破解app的documents目錄下。
1)定位可執行文件。使用ssh連接手機,并打印所有進程。為方便準確定位到目標app,最好先關閉所有app,然后打開目標app。(盡量把終端的窗口拉寬一些,因為輸出的內容比較長,窗口窄的話內容會截斷。)如下圖:


3. 使用cycript找到目標app的documents目錄路徑。
1)輸入命令:cycript -p TargetApp進入cycript環境。
2)輸入命令:[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0],獲取documents目錄路徑。如下圖:

4. 將dumpdecrypted.dylib拷貝到documents目錄下。命令如下:
1)使用快捷鍵Ctrl-D退出cycript環境。
2)輸入命令logout,退出手機連接。
3)使用scp命令拷貝文件至手機,如圖:

5. 進行砸殼。
1)連接手機。
2)進入Documents目錄。
3)輸入砸殼命令DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable,進行砸殼。這里有兩點要注意:1是這個命令的"="號前后不能有空格,2是”=”號后的路徑要替換成真實的dumpdecrypted.dylib的路徑和可執行目標文件的路徑。如下圖:

4)砸殼成功后,會在Documents目錄下生成一個后綴為.decrypted的文件。這個就是我們用來分析的文件了。如圖:

6. 把砸殼后的文件拷貝至電腦。我是用的iFunBox,你也可以用scp的方式。選擇.decrypted文件,然后點擊“CopyToMac”,選擇一個目錄保存就可以了。如圖:

保存成功后如圖:

二 dump頭文件

破殼之后就可以進行dump了,命令為class-dump -S -s -H /path/to/TargetApp.app/Target -o /path/to/headers,兩個參數分別是砸殼后的.decrypted文件和存放所dump出來的頭文件的目錄(這個目錄可提前創建好)。效果如下圖:


看下圖可以看到,我成功把這個app的頭文件dump出來了,一共718個。

三 Cycript分析

頭文件得到之后就可以使用Cycript進行分析了。步驟如下:
1. 在手機上啟動目標app,并打開你要分析的界面。
2. 連接手機。命令:ssh root@192.168.1.25
3. 進入Cycript環境。命令:cycript -p TargetApp
4. 展示待分析界面的信息。在cy#后輸入命令:[[UIApp keyWindow] recursiveDescription].toString()
如下圖:


如圖所示,層級關系就是父子關系。比如UINavigationTransitionView: 0x125d3b060就是UIViewControllerWrapperView: 0x17018a4f的父控件。
我們可以通過控件的名字去dump出來的頭文件目錄中找到對應的頭文件進行分析。
在cycript中操縱某個對象是直接通過它的內存地址的。比如我們要獲取UIViewControllerWrapperView的父控件,需要輸入命令:[#0x17018a4f0 nextResponder],如圖:

再比如我們要修改界面中UILabel: 0x125d509a0中的文字,則輸入命令:[#0x125d509a0 setText:@"21"],如圖:

這時你再去查看手機上的界面,這個label的文字就被替換成了21。

cycript 停止維護解決辦法

如果越獄的手機系統為12.0+,cycript 停止維護,無法正常使用 cycript。解決方案在此:通過 cyrun 使用 cycript 調試。
我做的步驟如下:

  • 1.把cycript_0.9.594_iphoneos-arm.debnet.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.debnet.tateu.cyrun_1.0.5_iphoneos-arm.deb下載到 Mac 上。
    1. 通過 iFunBox 把三個 deb 文件拷貝到手機中的var 目錄下。
    1. 通過ssh 連接手機,然后執行命令進行安裝,如下:
      dpkg -i cycript_0.9.594_iphoneos-arm.deb
      dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb
    1. 執行命令cyrun -n SpringBoard -e,就會進入 cycript 環境中了,如下:
david:/var/cyrun root# cyrun -n SpringBoard -e
applicationName: SpringBoard is running (5505)
    executableName: SpringBoard
    bundleIdentifier: com.apple.springboard
    Cycript is inactive:
    Device is passcode locked
    Tweak Mode
Do you want to continue enabling Cycript (y or n)? y
Waiting for Process to close...
Waiting for SpringBoard to launch...
Waiting for Cycript to become active...
Success, you may now run
    cycript -r 127.0.0.1:8556
cy#
提示:可以把命令中的SpringBoard 替換為待破解 app 的名稱。

總結

到此為止,我們就可通過cycript結合dump出的頭文件進行分析了。如果再想深入,可以使用lldb打斷點分析,本文就不展開講了(后期會寫文章專門介紹)。還有IDA和Reveal進行界面分析,相關問題可以回復我。

感謝沙神。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。