使用 xia0LLDB + debugserver 调试 iOS 已砸壳应用

1,715 阅读2分钟

一、配置 debugserver

  • 两个都已配置可以直接进入第三步
  1. Xcode中debugserver的位置:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/14.4,此处需要将 14.4 修改为与你手机系统版本相同; image.png

  2. 双击 DeveloperDiskImage.dmg 查看 debugserver 位置:/usr/bin/debugserverimage.png

  3. 找到该文件后,后面就需要将处理一下,拷贝到手机目录中;

  4. 通过 Xcode 创建一个 sample.plist 文件,并将以下内容拷贝进去;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.springboard.debugapplications</key>
	<true/>
	<key>run-unsigned-code</key>
	<true/>
	<key>get-task-allow</key>
	<true/>
	<key>task_for_pid-allow</key>
	<true/>
</dict>
</plist>
  1. 保存后将 debugserver 重签名, codesign -s - --entitlements en.plist -f debugserver
  2. 输入此命令给 debugserver 瘦身,此处需要将 arm64 修改为你当前手机的cpu架构,lipo -thin arm64 debugserver -output debugserver
  3. debugserver 拷贝到手机中, scp -r -P2222 /Users/xx/Desktop/debugserver root@localhost:/usr/bin/,将 /Users/xx/Desktop/debugserver 替换为自己电脑中的 debugserver路径,这里需要将手机用 usb 与电脑连接。

二、安装xia0LLDB

  1. 在终端执行命令,git clone https://github.com/4ch12dy/xia0LLDB.git && cd xia0LLDB && ./install.sh

三、调试步骤

  • 注意需要全程将手机用USB连接电脑, wifi 调试太慢。
  1. 首先开一个终端进行两个端口转发:iproxy 2222 22iproxy 1234 1111(将iPhone的1111端口映射到Mac的1234端口),如下图状态为成功状态; image.png image.png

  2. 第二个终端输入 ssh -p 2222 root@localhost(默认密码为 alpine),直接通过以下命令启动已砸壳或第三方APP:debugserver localhost:1111 -x backboard [app路径],(第三方APP需要先启动 APP,然后通过 ps -A 命令查看APP名字,通过 cd /usr/bin && ./debugserver 127.0.0.1:1111 -a "[App名字]"执行); image.png image.png

  3. 已砸壳的APP 将自动运行,此时在第三个终端输入 lldb,等lldb启动后,输入命令连接:process connect connect://localhost:1234;

image.png

  1. 至此调试连接成功,先后执行 croc debugme c 命令,开始调试。 image.png image.png

另附常用 lldb 命令

// 查看地址
image list -o -f
// 查看类内地址
po [className _shortMethodDescription]
// 设置断点
br s -a 0x452C96
// 删除所有断点
br del 
// 禁用第3个断点(启用en)
br dis 3

-c 用来设置断点条件
-o 来设置单次断点