为迎接 Apple 发布 macOS 11,Frida 12.11 来了!此版本完全兼容 macOS 11 Beta 3,而且现在还支持 Apple 芯片上的 macOS。太棒了!

值得一提的是,我们没有止步于 arm64,还支持 arm64e。该 ABI 仍在变化,因此如果你拥有 Developer Transition Kit(DTK)并想尝试,需要禁用 SIP,再添加一个启动参数:

$ sudo nvram boot-args="-arm64e_preview_abi"

考虑到各平台如此出色地趋于统一,我们实际上可能已经支持越狱的 iOS 14。等公开越狱工具出现后即可确认;至少支持它应该不需要太多工作。

正在探索 DTK 的用户可以像往常一样获取 CLI 工具和 Python 绑定:

$ pip3 install frida-tools

顺便一提,我们刚发布了 CryptoShark 0.2.0,非常推荐尝试。目前唯一的限制是只提供 macOS/x86_64 二进制文件;借助 Rosetta,它能在 macOS/arm64 上运行,但无法附加到“Local System”设备上的进程。

解决方法很简单:从我们的发布页获取 frida-server 二进制文件并启动,然后让 CryptoShark 连接“Local Socket”设备。如果想在一台系统上运行 CryptoShark,并附加到另一台系统的进程,也可使用本地 SSH 端口转发:

$ ssh -L 27042:127.0.0.1:27042 dtk

此版本还有许多令人兴奋的变化,请务必查看下面的变更日志。

尽情体验吧!

12.11.0 的变更

  • 新增 macOS 11 和 Apple 芯片支持。
  • 在 Darwin 上将辅助进程守护进程化。感谢 @mrmacete!
  • 在 Linux 上将辅助进程守护进程化。
  • 修复使用 usbmuxd 时不可靠的 iOS 设备处理。感谢 @mrmacete!
  • 修复 i/macOS frida-helper 提前退出时的无限等待。
  • 为 Android spawn() 新增“uid”选项以指定用户 ID。感谢 @sowdust!
  • 支持最新版 checkra1n 越狱。感谢 @Hexploitable 协助!
  • 提升 Stalker ARM 稳定性。
  • 修复 Interceptor arm64 后端错误路径中的泄漏。
  • 修复无 RWX 页面系统上 memcpy() 附近的拦截。
  • 修复 Darwin/arm64e 上 CpuContext 指针的编码。
  • 始终在 Darwin/arm64 上剥离回溯项。
  • 修复大端系统上的 Linux 架构检测。
  • 修复 ARM BE8 上 Capstone 的字节序配置。

12.11.1 的变更

  • 处理使用不同 ptrauth 密钥的 i/macOS 目标。
  • 修复大端系统上的 Linux CPU 类型检测。
  • 修复 Linux/ARM-BE8 上的早期插桩。
  • 修复向因 SIGTTIN 或 SIGTTOU 阻塞的 Linux 进程注入。

12.11.2 的变更

  • 修复 macOS 11/x86_64 上 Stalker 的 thread_exit 探测。
  • 修复 macOS 11/x86_64 上导出解析缓慢的问题。
  • 修复 ARM 上 CModule 对 Capstone 头文件的支持。
  • 在 ARM 的 CModule 运行时中新增 ArmWriter。
  • qml:支持指定要使用的脚本运行时。

12.11.3 的变更

  • 修复 V8 运行时中 ModuleMap.values() 的原型。
  • qml:将 DetachReason 枚举与当前 Frida API 同步。
  • qml:修复 Device 生命周期逻辑。

12.11.4 的变更

  • 修复 macOS 11 beta 3 上的注入器,并停止支持更早的 beta。
  • 移除 macOS 11 beta 3 已使其多余的辅助进程变通方案。
  • 修复 i/macOS introspection 模块处理。

12.11.5 的变更

  • 修复 macOS 11 和 iOS 14 上使用 dyld 现代代码路径的进程早期插桩。
  • 使用 VMThread::execute() 安装新方法,使 JVM 方法拦截更安全;它会阻塞所有 Java 线程,从而能更安全地拦截热点方法。感谢 @0xraaz!
  • ARM Relocator 新增 SUB 指令支持,提高在 32 位 ARM 上使用 Interceptor 和 Stalker 的可靠性。
  • qml:添加缺失的 include,修复 GCC 构建。

12.11.6 的变更

  • 将未越狱 iOS 注入器移植到新的 arm64e ABI,因此现在即使在 A12+ 设备上,也完全支持 iOS 14 beta 3 的未越狱模式。

12.11.7 的变更

  • 改进 Linux 和 QNX 上的 libc 检测。感谢 @demantz!
  • 修复 libdwarf 后端的符号大小检查,使 Linux 调试符号解析更可靠。
  • 修复脆弱的 Android Activity 启动逻辑。感谢 @muhzii!
  • 清除 kAccFastInterpreterToInterpreterInvoke 标志,提高 Android Java Hook 可靠性。感谢 @deroko!
  • 防止在 $dispose() 后使用 Java 包装器,使此类危险错误更易发现。
  • 改进 frida-qml 构建系统并支持独立使用。

12.11.8 的变更

  • 支持 Apple 芯片上的 macOS 11 beta 4。

12.11.9 的变更

  • 支持使用 Xcode 12 开发者磁盘映像的未越狱 iOS。

12.11.10 的变更

  • node:修复 IOStream 的 WriteOperation 泄漏。感谢 @mrmacete!
  • qml:支持列出应用。
  • qml:在各模型上公开“count”属性。
  • 修复“add sb, pc, r4”的 ARM 重定位。
  • 修复“add ip, pc, #4, #12”的 ARM 重定位。
  • 修复 Rn 位于寄存器列表中时 ARM writer 对 LDMIA 的支持。

12.11.11 的变更

  • 支持 Android R 上的不透明 JNI ID,以支持可调试应用。感谢 @muhzii!
  • qml:支持启动进程。
  • qml:在 Linux 上使用 devkit 链接时加入缺失的库。
  • qml:修复 Linux 上的静态链接。
  • qml:优化启动过程,不再等待 enumerate_devices()。

12.11.12 的变更

  • 在 i/macOS 早期插桩期间初始化 CoreFoundation。感谢 @mrmacete!
  • Stalker 支持 NULL EventSink。感谢 @meme!
  • node:提供 Electron v10 和 v11 预构建包;下个版本将停止提供 v9 预构建包。
  • qml:新增 post(QJsonArray)。

12.11.13 的变更

  • 修复 Android 11/arm64 上的 ART 内部结构探测。感谢 @enovella_!
  • 暂时不压缩地构建 V8 的 GumJS 运行时,因为还需改进 frida-compile 以使用最新版 terser。

12.11.14 的变更

  • frida-compile 已升级到最新版 terser,现在压缩构建 V8 的 GumJS 运行时。

12.11.15 的变更

  • 支持 iOS 14.x 安全 DTX。感谢 @mrmacete!
  • 修复 Android 11 上的 Java.deoptimizeEverything()。感谢 @Gh0u1L5!

12.11.16 的变更

  • 修复 Arm64Relocator.can_relocate() 的 arm64e 支持。感谢 @mrmacete!
  • 为 Stalker.follow() 新增“onEvent”选项,允许在原生代码中同步处理事件,通常使用 CModule 实现。可用于自定义过滤或队列逻辑以提升性能,或牺牲性能换取可靠事件传递。
  • 向 EventSink 公开 Stalker 的实时 CpuContext,可通过“onEvent”回调和 Gum C API 访问。
  • 在 CModule 运行时中新增 Spinlock。

12.11.17 的变更

  • 在未越狱 iOS 上通过 LLDB 终止进程,尽可能避免使用 ProcessControl。此前行为会让 debugserver 处于异常状态,已终止应用有时仍显示为运行中,导致后续 spawn() 的早期插桩失败。感谢 @mrmacete!
  • 允许 instrumentation 字段检测妥善失败,修复旧版 Android API 上的 Java 桥接初始化;旧 API 本就不需要它。
  • 略微减少每个脚本的 Duktape 内存用量,无需驻留脚本源码字符串。

12.11.18 的变更

  • 在未越狱 iOS 上检测最前端应用时跳过应用扩展。此前应用扩展有时会成为首个匹配进程,随后抛出“Unable to resolve bundle path to bundle ID”。感谢 @mrmacete!
  • 改进 Android ART 在 x86/x86_64 上的插桩偏移检测。感谢 @Gh0u1L5!
  • 修复 Android 7.1–8.1 上的 JDWP 初始化失败。感谢 @Gh0u1L5!
  • 修复 libdwarf 后端的最近符号逻辑。
  • 修复基于 Duktape 的运行时参数解析逻辑中的泄漏:解析后续参数出错时,已收集的内存范围数组会泄漏。