使用 Terminal 进行 LLDB 调试(0x00)

0x00 环境

  1. Terminal -- bash 或者 zsh
  2. 一部越狱的 iPhone
  3. WiFi 或者 USB (我用的是 WiFi)
  4. Xcode

0x01 iPhone 准备

打开 Cydia, 搜索 OpenSSH 插件, 安装

0x02 Mac 准备

首先在 Xcode 上运行一个工程或者安装一个 App 在你的越狱 iPhone 上, 这样的话在你的 iPhone 上就有了一个叫 debugserver 的二进制文件, 这个就是我们使用 LLDB 的关键

然后打开 Terminal, 使用 ssh 直联 iPhone, 我使用的是 WiFi, 想用 usb 的使用 usbmuxd

# 回车后需要输入密码, 初始密码是 alpine
$ ssh [email protected](iPhone 的 ip 地址)

# 初始密码是 alpine

0x03 对 debugserver 操作

  • 新开一个 Terminal 窗口进行一下操作, 操作完成不用关闭窗口
  • 将 debugserver 从 iPhone 拷贝至 Mac
$ cd ~
# 注意要 ip 地址
$ scp root@iOSIP:/Developer/usr/bin/debugserver ~/debugserver
  • debugserver 瘦身
# 这里的 arm64 根绝你的越狱机型来填入
$ lipo -thin arm64 debugserver -output debugserver
  • debugserver 添加 task_for_pid 权限
$ cd ~
$ curl -o ent.xml http://7xibfi.com1.z0.glb.clouddn.com/uploads/default/668/c134605bb19a433f.xml
#  -S 选项与 ent.xml 之间是没有空格的
$ /opt/theos/bin/ldid -Sent.xml debugserver
  • 经过处理的 debugserver 拷回 iPhone
$ scp ~/debugserver root@iOSIP:/usr/bin/debugserver

# 这里之所以把处理过的 debugserver 存放在iOS的 /usr/bin/ 下
# 而没有覆盖 /Developer/usr/bin/ 下的原版 debugserver 
# 一是因为原版 debugserver 是不可写的, 无法覆盖
# 二是因为 /usr/bin/ 下的命令无须输入全路径就可以执行
# 即在任意目录下运行 debugserver 都可启动处理过的 debugserver

0x04 初步测试

  • 处理完以上的, 来测试一下, 在连接 iPhone 的 Terminal 中输入下面
# 1234 是 iPhone 提供的端口号, SpringBoard 就是我们要进行 LLDB 调试的 APP 
$ debugserver *:1234 -a "SpringBoard"
监听1234端口
  • 此时会静止在这里, 手机开机什么的都不管用, 其实没有死机, 是代码正在攻击SpringBoard, 我们接着做下一步, (可以通过结束程序(Control + c), 重启手机, 恢复手机, 但没必要, 此时手机正在运行, 没有任何问题)

  • 在上面操作后的 Terminal 中输入

$ lldb
$(lldb) process connect connect://iOSIP:1234
使用 Terminal 进行 LLDB 调试(0x00)_第1张图片
结果如图
  • 到这里我就可以开始我的 LLDB 之旅了~尝试一下, 发现有些东西提示未定义, 直接使用 UIView 也不行(会提示没有 UIView 这个命令, 需要使用 LLDB 的命令来操作), 就连 chisel 命令也可以在终端中使用很方便快捷


    使用 Terminal 进行 LLDB 调试(0x00)_第2张图片

PS: 补充几个命令

// 查询进程
ps aux | grep (进程名称, 也就是包的名字, 例如微信就是, WeChat)
// 杀死进程, 939就是目标的进程号, -9 为参数彻底杀死
kill -9 939 

你可能感兴趣的:(使用 Terminal 进行 LLDB 调试(0x00))