这次有很多好东西!🎉 一起来看看。

依赖项

我们刚把所有依赖项升级到最新版本,其中一部分工作是重整用于构建依赖的构建系统。

有了这些改进,我们终于能完全从源码构建过去的 Frida 版本,解决这个长期以来令人头疼的问题。

现在调整依赖项也容易得多,例如调试问题时。假设你正在排查 Thread.backtrace() 为何无法在 Android 上正常工作,可能需要研究 libunwind 内部实现。现在构建某个特定依赖非常简单:

$ make -f Makefile.sdk.mk FRIDA_HOST=android-arm64 libunwind

如果要为本地系统构建:

$ make -f Makefile.sdk.mk libunwind

如果已经构建了 Frida,并想替换其预构建 SDK 中的 libunwind,现在可以执行:

$ make -f Makefile.sdk.mk symlinks-libunwind

随后可以继续修改“deps/libunwind”,并重新运行以下命令进行增量编译:

$ make -f Makefile.sdk.mk libunwind

iOS

现在支持 iOS 14.2。此前基本可用,但崩溃报告器集成会使 Apple 的崩溃报告器死锁,对整体系统稳定性不利。

GumJS 支持 size_t 和 ssize_t

感谢 @mame82,NativeFunction 等 API 终于支持“size_t”和“ssize_t”。跨平台 Agent 不再需要维护它们与原生类型之间的映射。太棒了!

系统 GLib 支持

Gum 终于可以使用上游版本的 GLib 构建,而且现在支持生成 GObject introspection 定义。这为今后完全自动生成语言绑定铺平了道路。

感谢 @meme 带来这些出色改进!

Windows 进程内注入

Windows 后端终于支持进程内注入。在最常见的目标进程架构相同且无需提权的情况下,现在无需先把“frida-helper-{32,64}.exe”写入临时目录并启动,即可对目标执行 attach();启动时间也因此缩短。

这项改进旨在解决一个长期问题:我们的逻辑容易触发某些端点安全产品的误报,导致注入器无法工作。确实需要启动辅助程序时仍可能遇到此类问题,但最常见的用例现在很可能可以正常工作。

Stalker ARM 改进

对于在 32 位 ARM 上使用 Stalker 的用户,它现在应比以往好用得多;此版本加入了大量修复。

字节码与 frida-tools

14.0 发布后我们意识到,QuickJS 字节码格式比预期更易变化。因此,除非应用设计为只配合某个确切 Frida 版本使用,否则不建议使用“frida-compile -b”。

发布上一版 frida-tools 时我尚未意识到这个陷阱,因此选择把 frida-trace Agent 预编译为字节码。准备 14.1 时发现错误后,我撤销了该改动并发布新版 frida-tools。

因此升级时请确保也获取其最新版本:

$ pip3 install -U frida-tools

结语

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

尽情体验吧!

14.1.0 的变更

  • 将所有依赖升级到最新版本。
  • 大幅重整依赖构建系统,今后终于支持完全从源码构建过去的 Frida 版本。
  • 将 iOS 崩溃报告器集成移植到 iOS 14.2。
  • 修复与 iOS 设备通信时的错误传播。
  • GumJS 新增“size_t”和“ssize_t”支持。感谢 @mame82!
  • 支持链接系统 GLib 和 libffi。感谢 @meme!
  • 支持 GObject Introspection。感谢 @meme!
  • 改进 Windows 后端以支持进程内注入;在架构相同且无需提权的常见情况下,可避开常见杀毒启发式并提升速度。
  • 修复 Stalker ARM 对“ldr pc, [sp], #4”的处理。
  • 修复 Stalker ARM 在 IT 块中破坏标志的问题。
  • 修复 Stalker ARM 对 IT 块中 CMN/CMP/TST 的处理。
  • 修复 ThumbWriter 指令的抑制标志。
  • 修复 Stalker ARM 排除逻辑的可靠性。
  • 修复 ARM Stalker 在 Thumb 模式下对线程执行 follow()。
  • 修复 ARM Stalker 在 Thumb 模式下的 SVC 处理。
  • 修复 ThumbRelocator 对未对齐 ADR 的处理。
  • Stalker ARM 改用运行时 VFP 特性检测。
  • 没有任何回调时拒绝 Interceptor.attach()。
  • 改进 GumJS 错误消息格式。
  • 修复 V8 调试器集成中的饥饿问题。
  • 在 V8 上的调用期间也保持 NativeCallback 存活。

14.1.1 的变更

  • 修复 CModule 中 Capstone 缺失的回归。
  • 为 32 位 ARM 添加缺失的 CModule 内置项。
  • 修复 Android/ARM64 上的 Thread.backtrace()。

14.1.2 的变更

  • 修复 Android/ARM 上的 Thread.backtrace()。

14.1.3 的变更

  • 修复 ObjC.choose();14.1.0 中的 TinyCC 升级暴露了既有错误。
  • 默认重新启用 V8。某些用例中它比 QuickJS 更合适,而且大家也非常想念它的调试器功能。
  • 为 frida-server 新增 –ignore-crashes/-C,用于禁用原生崩溃报告器集成,适用于不需要该集成或运行在尚未完全支持的前沿操作系统版本上的场景。(目前仅 iOS 和 Android 提供崩溃报告器集成。)
  • 增强 devkit,确保所有平台都公开 Capstone API。
  • 改进 devkit 示例。