08-1-iOS逆向之動態調試App

一、什麼是動態調試

  • 將程序運行起來,通過下斷點、打印等方式,查看參數、返回值、函數調用流程等

二、Xcode的動態調試原理

在這裏插入圖片描述

  • 關於GCC、LLVM、 GDB、LLDB

    • Xcode的編譯器發展歷程: GCCLLVM
    • Xcode的調試器發展歷程: GDBLLDB
  • debugserver 一開始存放在 Mac 的 Xcode 裏面

    • /Applications/Xcode.app/Contents/Developer/Platforms/iPhone0S.platform/De viceSupport/9.1/DeveloperDisklmage.dmg/usr/bin/debugserver
      在這裏插入圖片描述
  • 當Xcode識別到手機設備時,Xcode會自動將debugserver安裝到iPhone上

    • /Developer/usr/bin/debugserver
    • 注意: 這個文件夾是隻讀屬性
      在這裏插入圖片描述
  • Xcode調試的侷限性

    • 一般情況下,只能調試通過Xcode安裝的APP

三、動態調試任意APP

在這裏插入圖片描述

3.1 debugserver的權限問題

  • 默認情況下,/Developer/usr/bin/debugserver缺少一定的權限,只能調試通過Xcode安裝的
    APP,無法調試其他APP (比如來自App Store的APP)

  • 如果希望調試其他APP,需要對debugserver重新簽名,簽上2個調試相關的權限

    • get-task-allow
    • task_for_pid-allow

3.2 如何給debugserver簽上權限

  • iPhone上的/Developer/目錄是隻讀的,無法直接對/Developer/usr/bin/debugserver文件籤
    名,需要先把 debugserver 複製到Mac
  • 通過Idid命令導出文件以前的簽名權限
ldid -e debugserver > debugserver.entitlements
  • debugserver.entitlements 文件加上 get-task-allowtask_for_pid-allow 權限
    在這裏插入圖片描述
  • 通過Idid命令重新簽名
ldid -Sdebugserver.entitlements debugserver
  • 將已經簽好權限的 debugserver 放到 /usr/bin目錄,便於找到debugserver指令
  • 關於權限的簽名,也可以使用codesign
# 查看權限信息
$ codesign -d --entitlements - debugserver

# 簽名權限
$ codesign -f -s - --entitlements debugserver.entitlements debugserver

# 或者簡寫爲
$ codesign -fs- --entitlements debugserver .entitlements debugserver

3.3 讓debugserver附加到某個APP進程

在這裏插入圖片描述

$ debugserver *:端口號 -a 進程
  • *:端口號
    • 使用iPhone的某個端口啓動debugserver服務 (只要不是保留端口號就行)
  • a進程
    • 輸入APP的進程信息(進程ID或者進程名稱)

在這裏插入圖片描述

3.4 在Mac上啓動LLDB,遠程連接iPhone上的debugserver服務

在這裏插入圖片描述

  • 啓動LLDB
~ » lldb                                                            
(lldb)
  • 連接debugsever服務
(lldb) process connect connect://手機IP地址:debugserver服務端口號
# 這裏用的是手機的10011端口映射電腦的10011端口, 這樣就可以直接使用電腦的10011端口了
process connect connect://localhost:10011

在這裏插入圖片描述

  • 使用LLDB的c(continue)命令讓程序繼續運行
(lldb) c
  • 接下來就可以使用LLDB命令調試App了

3.5 通過debugserver 啓動 APP

$ debugserver -x auto *:端口號 APP的可執行文件路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章