克魔助手
全部文章

不越狱,在 iOS 上能做到哪一步?

4 分钟阅读设备入门

搜索「如何在 iPhone 上查看某项信息」,靠前的结果往往会建议您先越狱。有时这确实是唯一的方法,但更多时候,这只是早年的经验之谈:系统早已开放了受支持的通道,这条建议却仍在被反复转述。

弄清这条界线很有必要,因为越狱设备并不适合用于测量:它运行的软件与用户不同,无法通过完整性校验,内存行为也不同,而且无法再回到发布流程中。

受信任的电脑能获取什么

当设备解锁并信任一台电脑后,iOS 会通过这条连接开放一组服务。电脑为设备备份、安装 App、在访达中显示设备,用的都是这些服务。通过它们,您可以获取:

  • 性能计数器:每个进程的 CPU、内存、GPU、帧呈现、网络字节数、能耗归因
  • 系统与应用的实时日志
  • 崩溃报告,包括 jetsam 和看门狗终止
  • 应用沙盒:App 自身的 Documents、Library、tmp 目录
  • 已安装应用:列出、安装、卸载、启动、终止
  • 设备信息:UDID、存储、电池健康度与循环次数、各类序列号
  • 描述文件:列出、安装、删除
  • 屏幕截图
  • 虚拟定位
  • 备份:完整备份或部分备份
  • 使用与耗电记录,可回溯数月

覆盖范围相当广,且没有任何一项需要改动设备。

真正的限制在哪里

越狱实际带来的能力比通常认为的少得多,而且大多与「测量」无关:

  • 读取其他 App 的沙盒。 沙盒由内核强制执行。这才是真正的限制,也是应当存在的限制。
  • 对任意进程进行 hook 或打补丁。 即在运行时修改不属于您的代码。
  • 绕过平台安全校验,例如证书绑定、完整性证明、越狱检测。
  • 超出设备开放范围的完整文件系统访问。
  • 内核级插桩。

请注意这份清单中没有的内容:开发者要理解自己的 App 为什么慢、为什么泄漏、为什么崩溃、为什么向磁盘写入了错误内容,所需的几乎一切都不在其中。

为什么「先越狱」的说法一直存在

原因有三,都属于历史遗留。

设备服务多年来缺少完善的文档,因此基于它们的工具很少,基于越狱的工具却随处可见。这条建议在写下时是正确的,而搜索结果会长期留存。此外,「越狱」听起来像是解锁,而「系统本来就开放了这项能力」听起来像是限制,前者更容易让人接受。

少有人提及的代价

越狱设备并不适合作为得出结论的依据:

  1. 它与用户的设备不同。 运行时环境、保护机制,有时连性能特征都不同。在上面测得的内存数据,并不是用户实际遇到的数据。
  2. 它无法进入发布流程。 这台设备将永久退出测试流程。
  3. 每次系统更新都会失效。 测试机被固定在越狱工具支持的 iOS 版本上,而这通常不是用户正在使用的版本。
  4. 完整性校验会失败。 所有进行校验的功能,例如支付、DRM、企业策略,都会表现异常或直接拒绝运行,导致 App 中的一整类功能无法测试。
  5. 这是一项安全决策,而做出决策的设备可能并不属于您。

结论

如果您的问题是我的 App 为什么会这样,受支持的通道几乎一定能够覆盖,而且可以在一台原装设备上完成,事后还能交还给测试同事。

如果您的问题是其他 App 在做什么,答案就是沙盒,这是有意为之的设计:阻止您读取他人沙盒的边界,同样阻止了所有人读取您的沙盒。

值得注意的是,第二个问题往往本身就问错了。多数时候,它是某个可以直接测量的问题的替代说法:竞品 App 的性能表现(可以测量)、网络上发生了什么(需要抓包)、某项操作耗电多少(可在历史记录中查看)。为了回答它而越狱,相当于放着更合适的工具不用,选择了一个更差的工具。