Frida 17.10.0 已发布,为 Gum 内部机制带来大量新能力,并打磨了许多棱角。

主要变化:

  • gum:为生成代码新增通用展开代理。Interceptor 创建时即获得展开支持,使异常和回溯可穿过跳板传播;Stalker 则在 Darwin 和 Linux 上改为始终执行 PC 转换。
  • core:将 Darwin 展开机制迁移到 Gum 新的通用 UnwindBroker 和 UnwindSectionsProvider API;旧 UnwindSitter 现在只注册入侵者范围。
  • interceptor:用可组合选项结构替换旧 attach 标志,覆盖暂存寄存器选择、在线/离线场景、重定位策略、替换数据和监听器数据。
  • gumjs:向 JavaScript 公开新的 Interceptor 插桩选项;attach()、replace() 和 replaceFast() 现在可接收包含目标和新插桩配置的选项对象。
  • interceptor:支持自定义重定向生成器和进程级默认选项。调用方可提供写入被 Hook 函数序言的指令序列,使 Hook 点更难预测。
  • gumjs:在 QuickJS 和 V8 运行时中公开自定义重定向生成器、重定向空间提示和默认 Interceptor 选项。
  • interceptor:修复异常或 longjmp() 越过被 Hook 调用后发生的挂起。现在会正确回收未到达 on-leave 跳板的调用帧,防止 gum_interceptor_flush() 永久自旋。
  • unwind-broker:支持 32 位 ARM EH ABI,包括 ARM 特有的 personality 和 exidx 处理。
  • unwind-broker:通过原始展开例程读取 throw 和 resume 指令指针,修复经过 Stalker 代码的异常处理。
  • stalker-x86:在 Android 上启用展开支持,与 arm64 后端一致。
  • stalker-arm64:不再要求就近分配 slab,代码和数据 slab 可分配在任意位置。
  • memory:代码补丁完成后恢复页面保护;除非原本为 RWX,否则重新收紧为 RX。
  • exceptor:新增仅处理器模式,安装 Frida 信号处理器但不 Hook signal() 和 sigaction()。
  • module-registry:允许在 ELF 和 Darwin 上自定义 RTLD 通知器偏移,有助于提高 Frida 隐蔽性。
  • core:通过 SessionOptions 公开 Agent 功能开关和链接器通知器偏移,包括 exceptor 模式、展开代理、退出监视器和线程挂起监视器设置。
  • base:修复使用 frida-1.0/<arch>/ 的已安装布局中的资源解析;此前探测的路径仍包含字面量 <arch> 标记。
  • devkit:使 Gum 示例与新的 attach 选项同步。
  • deps:将依赖升级到 20260531,包括 Capstone d536b15,并把 @types/frida-gum 更新到 19.3.0。