这次底层发生了巨大变化。我们的所有依赖都已升级到最新最好的版本。让我们看看亮点。

V8 7.0

Frida 之前依赖的 V8 版本是 6.2.2,现已升级到 7.0.242。迁移到如此新的版本意味着 V8 调试器 API 已消失,并被最新 Node.js 也在使用的新 Inspector API 取代。它特别棒的一点是,Google Chrome 的 Inspector 原生支持它。

要开始使用,只需通过调用 session.enable_jit(),然后调用 session.enable_debugger(),告诉 Frida 使用 V8。

或者,使用 CLI 工具时:

$ frida-trace --enable-jit --debug -f /bin/cat -i read

然后在 Google Chrome 中右键单击并选择“检查”,再单击 Inspector 左上角的绿色 Node.js 图标。就这么简单,现在你已在调试 Frida 脚本。这意味着你可以使用带自动补全的实用控制台、暂停/继续、单步执行、断点、性能分析和堆快照。它非常方便的原因在于,服务器侦听在主机上,因此你可以对代表 USB 连接 Android 设备上某个进程的会话调用 enable_debugger(),一切都能以同样的方式工作。

它看起来是这样的:

控制台 性能分析器 堆快照

不过请注意,目前我们的预构建 iOS 二进制文件中并不包含 V8;但由于 V8 现在已能在没有 RWX 页的情况下运行,应该可以让它再次在 iOS 上运行。我们还计划在幕后桥接 Duktape 的二进制调试器协议,让调试在 Duktape 上也能“开箱即用”,尽管功能集可能会略有缩减。

Process.id

知道 agent 所在进程的 PID 通常很有用,尤其是在预加载模式下。因此,现在无需使用 NativeFunction 去调用 getpid() 之类的函数,直接使用全新的 Process.id 属性就简单多了。

还有其他内容吗?

没有其他新功能,但有一些非常不错的错误修复。感谢 mrmacete,我们现在可以附加到 iOS 11.x 上的 com.apple.WebKit.* 进程。此外,感谢 viniciusmarangoni,本版本还为 frida-java 带来了两项好东西:修复一个 Android 8.0 回归问题,并添加正确对 system_server 进行插桩的能力。

祝使用愉快!