動態(tài)調試其它APP的兩種姿勢:
1. 拿到可執(zhí)行文件動態(tài)調試APP,有兩種方案:
1.1 通過開發(fā)證書簽名,修改應用的權限文件,用Xcode直接Attach應用進程ID:
Code signing Entitlements中有一項很重要的key值,就是get-task-allow,
get-task-allow決定了這個app能否被Xcode調試。一般來說,上架了的程序,這個key值為空,默認為NO。
步驟:
1. ldid -e ./wework > ./wework.plist
2. 修改wework.plist 中的 get-task-allow:YES
3. ldid -Swework.plist ./wework
4. chmod 755 ./wework
5. 用開發(fā)證書重新打包并安裝至越獄機上
1.1.1 我以企業(yè)微信為例子:

Xocde Attach wework進程
1.1.2 通過Xcode調試工具看UI界面:
由此可見:
1. 企業(yè)微信登錄所在的控制器是:WWKWeChatLoginViewController
2. 點擊微信登錄按鈕調用的方法是:loginButtonClicked:

通過Xcode查看界面UI
1.1.3 通過Hopper Disassembler工具查看loginButtonClicked:在內存中具體位置

Hopper Disassembler工具查看函數(shù)具體的內存地址
1.1.4 由于使用了ASLR技術,斷點得加上一段偏移
breakpoint set - a 時得加上這一段偏移
image list -o -f | grep wework
breakpoint set -a 0x00000001009f8a88(hopper里的方法地址)+0x00000000000e4000(地址偏移)

斷點打印成功
1.2 通過Debugserver + Reveal + LLDB調試APP:
1.2.1 我以調試微信APP為例
步驟:
1. 先開個命令行轉發(fā)端口: python tcprelay.py -t 22:10010
2. 再開個命令行轉發(fā)端口: python tcprelay.py -t 10011:10011
3. 開個命令行登錄手機:
3.1 ssh root@localhost -p 10010
3.2 debugserver *:10011 -a "WeChat"
4. 開個命令行登錄手機:
4.1 ssh root@localhost -p 10010
4.2 實用cycript調試應用
5. 開個命令行使用LLDB:
5.1 lldb
5.2 process connect connect://localhost:10011

成功Attch 上微信APP
1.2.2 通過Reveal找到需要調試的視圖

WechatIMG432.png
1.2.3 找到點擊聲音鎖登錄調用的函數(shù)onLastUserVoicePrintLogin:

點擊聲音鎖登錄調用的函數(shù)
1.2.4 通過Hopper Disassembler工具查看onLastUserVoicePrintLogin:在內存中具體位置

Hopper Disassembler工具查看onLastUserVoicePrintLogin:在內存中具體位置
1.2.5 由于使用了ALSR技術,所以斷點應該這樣打:
image list -o -f | grep WeChat
breakpoint set -a 0x000000010245e318(hopper里的方法地址)+0x00000000000f4000(地址偏移)

斷點打印成功