本版本的主要主题是操作系统支持:我们修复了 Android 12 上的一些粗糙之处,并引入对 Android 13 的初步支持。在开发 frida-java-bridge 时,我还发现自己需要 JVM 专用后端中的一些 JVMTI 代码。这些部分现在已经共享,JVM 专用代码也更加完善,并全新支持 JDK 17。

我们还提高了多处的稳定性,并让 CodeWriter API 更容易安全使用。可移植性也得到改善:基于 QuickJS 的 JavaScript 运行时终于能在小端构建机器上交叉编译为大端目标,反之亦然。

要了解更多信息,请务必查看下方的变更日志。

祝使用愉快!

变更日志

  • linux:处理 ptrace() 期间的伪信号。
  • android:添加 Android 12+ 上 system_server 缺失的 SELinux 规则。
  • android:修复真实设备上的 Android 13 检测。
  • android:处理 Android 13 中新的链接器内部实现。
  • java:改进 Java.enumerateMethods() 的错误消息。感谢 @jpstotz!
  • java:(android) 处理内联的 GetOatQuickMethodHeader()。
  • java:(android) 改进对非 Google Android 12+ ROM 的支持。
  • java:(android) 修复 Android >= 12 上的 Java.choose()。
  • java:(android) 添加 Android 13 支持。
  • java:(android) 修复 x64 重编译逻辑中 threadReg 被破坏的问题。
  • java:(android) 解释 Java.deoptimizeBootImage() 不可用的原因。
  • java:(android) 通过 api.jvmti 公开 JVMTI。
  • java:(android) 改进操作系统功能相关的错误消息。
  • java:(jvm) 添加 JDK 17 的基本支持。
  • java:(jvm) 为 thread_from_jni_environment() 添加后备方案。
  • java:(jvm) 修复 withJvmThread() 前序/后序逻辑中的释放后使用。
  • java:(jvm) 改进 InstanceKlass 偏移检测。
  • code-writer:添加 flush_on_destroy 选项。
  • gumjs:禁用 CodeWriter 的 flush_on_destroy 选项。这样一来,writer 在被垃圾回收时不会再向内存写入,因此使用更安全。到那时,目标内存可能已不可写,或可能已归其他代码所有。
  • gumjs:必要时嵌入字节序交换后的 QuickJS 字节码。这意味着 GumJS 可以跨大小端交叉编译。
  • gumjs:修复 Instruction 复制逻辑中的二次释放。
  • gumjs:修复 Relocator 指令访问器。
  • gumjs:在 reset() 和 dispose() 时刷新 CodeWriter。
  • gumjs:改进 NativePointer#strip() 以支持 ARM TBI。
  • gumjs:让 Instruction 包装器在零拷贝模式下更安全。
  • gumjs:修复 QuickJS 运行时中的 Relocator 泄漏。
  • quickjs:修复对字节序交换输出的支持。同时将 QuickJS 升级到最新上游版本,并包含 Unicode 14 更新。