0x00

设备:iPhone8

系统:iOS16.5.1

整设备前看下 https://appledb.dev/ 对照表格找到合适越狱的版本和机型。

palera1n越狱

越狱步骤很简单,按照 https://ios.cfw.guide/installing-palera1n/ 一步步来就行,额外要注意的必须要用usb-lightning(如下图),不然像巴斯一样以为手机坏了,导致进不去 DFU_Mode

Untitled

palera1n 初始化时让设置 mobile 用户的 sudo 密码,为了方便使用接下来的工具,建议修改下 root 密码:sudo passwd root

Untitled

palera1n 默认使用 Sileo 作为包管理,默认安装 ssh-server。

砸壳

分析 AppStore 下载的 App 得先砸壳,这次我尝试了新工具 https://github.com/ChiChou/bagbak 是基于frida的,先在设备上启动 frida-server,rootless模式下的无法用Slieo安装frida-server,我直接使用该作者另一个工具 https://github.com/ChiChou/fruity-frida 用来部署。

# 启动 frida-server
run-frida-server
# 列出 App
bagbak -l
# 砸!
bagbak <bundle_id>

0x01 - LLDB

lldb远程调试原理如下,在 iOS 上运行需要对 debugserver 有些小小的改动。

Untitled

  1. 拷贝debugserver
# 挂载DeveloperDiskImage.dmg
## {ios_version} 随意选个版本
hdiutil attach /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/{ios_version}/DeveloperDiskImage.dmg
# 拷贝 debugserver
cp /Volumes/DeveloperDiskImage/usr/bin/debugserver ./
# 卸载 DeveloperDiskImage
hdiutil unmount /Volumes/DeveloperDiskImage/
  1. 修改权限

导出原权限: ldid -e debugserver >> entitlements.xml

去除权限:

com.apple.security.network.server
com.apple.security.network.client
seatbelt-profiles

新增权限:

com.apple.system-task-ports
get-task-allow
platform-application
run-unsigned-code
task_for_pid-allow

完整entitlements.xml

<?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>com.apple.backboardd.launchapplications</key>
    <true/>
    <key>com.apple.backboardd.debugapplications</key>
    <true/>
    <key>com.apple.frontboard.launchapplications</key>
    <true/>
    <key>com.apple.frontboard.debugapplications</key>
    <true/>
    <key>com.apple.private.logging.diagnostic</key>
    <true/>
    <key>com.apple.private.memorystatus</key>
    <true/>
    <key>com.apple.private.cs.debugger</key>
    <true/>
    <key>com.apple.system-task-ports</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>platform-application</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
</dict>
</plist>
  1. 重签名 codesign -s - --entitlements entitlements.xml -f debugserver
  2. 拷贝至 iPhone scp -P 2222 debugserver [[email protected]](<mailto:[email protected]>):/var/jb/bin

简单演示

Untitled

挖坑:准备学习下lldb调试的高级技巧!

0x02 - Xcode

lldb是Xcode里有内置的调试器,使用Xcode更方便调试可以查看UI层级、内存层级等。

Untitled

真机调试

Xcode调试真机得确保支持目标设备iOS版本,巴斯的Xcode版本为13.4.1恰好不支持 16.5.1 ,从 https://github.com/filsv/iOSDeviceSupport 下载 16.5 拷贝到目录下:mv 16.5 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/16.5.1 (确保小版本号一致。

再次打开 XcodeWindowsDevices and Simulators 就能看到如下界面:

Untitled

创建项目

Untitled

**简单演示:**选择真机设备,先测试下HelloWorld项目:

Untitled

遇到如下问题,在越狱设备上操作:设置通用VPN与设备管理→信任测试的App就行。

Untitled

远程附加调试

还记得上面的砸壳好的App吗,使用 iOS App Signer 工具对其重签名(Provisoning Profile 改为刚新建项目所生成的签名文件:

Untitled

Devices and Simulators 界面点击 + 安装重签名的 App 到设备上:

Untitled

在设备上启动App,在XcodeDebugAttach to Process 选择进程开始调试。

Untitled

直接启动调试

在项目的 Build Phases 选项出添加 Run Scriptcp -rf "${SRCROOT}/testBebuger.app" "${BUILT_PRODUCTS_DIR}/”

Untitled

https://github.com/tobefuturer/restore-symbol

0x03 - Frida

目标设备运行frida-server 后,就可以用 frida-trace 追踪函数…等,简单演示:

Untitled

0x04 - 总结

记录下 iOS App 动态调试的操作流水账。


Powered by Kali-Team