iOS

本页为社区译文;如有疑义,请以英文原文为准。 英文原文

Frida 支持两种运行模式,具体取决于你的 iOS 设备是否已越狱。

目录

  1. 已越狱
  2. 未越狱

已越狱

这是功能最强大的配置,因为它能让你非常轻松地对系统服务和应用进行插桩。

本教程将展示如何在 iOS 设备上进行函数跟踪。

设置 iOS 设备

启动 Cydia,依次进入 Manage -> Sources -> Edit -> Add,然后输入 https://build.frida.re,添加 Frida 的软件源。现在应该能够找到并安装 Frida 软件包,它允许 Frida 将 JavaScript 注入 iOS 设备上运行的应用。此过程通过 USB 进行,因此需要准备好 USB 线,不过暂时还不必连接。

快速冒烟测试

现在回到 Windows 或 macOS 系统,确认基本功能正常。运行:

$ frida-ps -U
使用基于 Linux 的操作系统?

从 Frida 6.0.9 开始已集成 usbmuxd,因此 -U 可以正常工作。 对于更早的 Frida 版本,可以使用 WiFi,并在两端的 localhost:27042 之间建立 SSH 隧道,然后使用 -R 代替 -U。

除非你已经连接设备,否则应该会看到以下消息:

Waiting for USB device to appear...

连接设备后,应该会看到类似下面的进程列表:

 PID NAME
 488 Clock
 116 Facebook
 312 IRCCloud
1711 LinkedIn
…

很好,一切就绪!

跟踪 Twitter 应用中的加密调用

好了,来做点有趣的事。在设备上启动 Twitter 应用,确保它保持在前台且设备不会进入睡眠,然后回到桌面端并运行:

$ frida-trace -U -i "CCCryptorCreate*" Twitter
Uploading data...
CCCryptorCreate: Auto-generated handler …/CCCryptorCreate.js
CCCryptorCreateFromData: Auto-generated handler …/CCCryptorCreateFromData.js
CCCryptorCreateWithMode: Auto-generated handler …/CCCryptorCreateWithMode.js
CCCryptorCreateFromDataWithMode: Auto-generated handler …/CCCryptorCreateFromDataWithMode.js
Started tracing 4 functions. Press Ctrl+C to stop.

CCryptorCreate 及其相关函数属于 Apple 的 libcommonCrypt.dylib,许多应用会使用它们处理加密、解密、哈希等操作。

刷新 Twitter 信息流,或以其他方式操作界面以产生网络流量,你应该会看到类似下面的输出:

3979 ms	CCCryptorCreate()
3982 ms	CCCryptorCreateWithMode()
3983 ms	CCCryptorCreate()
3983 ms	CCCryptorCreateWithMode()

现在,你可以一边阅读 man CCryptorCreate,一边实时编辑前述 JavaScript 文件,逐步深入探索 iOS 应用。

未越狱

Frida 能够对可调试应用进行插桩;从 Frida 12.7.12 开始,它会自动注入 Gadget。

只需注意以下几项要求:

  • iOS 设备最好运行 iOS 13 或更高版本。对更早版本的支持被视为实验性功能。
  • 必须挂载 Developer Disk Image。Xcode 发现通过 USB 连接的 iOS 设备后会自动挂载它,你也可以使用 ideviceimagemounter 手动完成。
  • 用户缓存目录中必须存在最新版 Gadget。在 macOS 上,其路径是 ~/.cache/frida/gadget-ios.dylib;你也可以尝试附加到可调试应用,再从错误消息中确认确切路径。

构建自己的工具

虽然 frida、frida-trace 等 CLI 工具确实非常有用,但有时你可能想利用强大的 Frida API 构建自己的工具。为此,我们建议阅读函数和消息章节;凡是看到 frida.attach() 的地方,只需将它替换为 frida.get_usb_device().attach()。