这次是一个大型版本,包含安全加固、平台修复和多项 API 打磨。非常感谢 @hsorbo 和 @SamSunNV 的贡献。

主要变化包括:

  • spawn-gating:使其具备故障安全能力并限定作用域。系统级 Linux eBPF spawn gater 现在需通过新的 SpawnGatingScope 显式启用;所有会挂起进程的 gater 共享一个看门狗,若捕获的进程挂起过久,就禁用 gating 并恢复全部进程。这样可避免客户端消失或停止恢复 spawn 时卡死全系统的进程创建。
  • spawn-gating:在 HostSession 上新增 spawn_gating_disabled(reason) 信号并向上传递到 Device,使客户端知道看门狗何时介入。
  • python:根据 Frida GIR 自动生成 Python 绑定,并通过新的 frida.aio 包支持 asyncio。
  • swift:根据 Frida GIR 自动生成 Swift 绑定。
  • auth:关闭认证通道前刷新待发送的 INVALID_ARGUMENT 回复,使客户端可靠看到令牌被拒绝,而不是连接直接关闭。
  • fruity:在执行 threaded 和 chained fixup 前应用各段保护,修复 arm64e 上的上传注入。可写数据段因此能无故障地接收重定位和认证后的指针,同时仍避免任何 rwx 映射。感谢 @hsorbo!
  • darwin:生成带 exec-segment 字段和非空标识符的现代 SHA-256 CodeDirectory,使现代 iOS 重新支持 CodeSegment 实现。实现会先探测现代形式,必要时回退到旧形式,并缓存可用策略。
  • darwin:通过修补暂存页面在运行时探测 CodeSegment 支持,不再依赖 XNU 版本猜测这种因内核而异的行为。
  • gumjs:在 iOS 上避开 macOS 专用 MAP_JIT 路径,改用 Gum 自身的 JIT 分配路径,使 V8 能在 iOS 应用沙箱内执行 JIT。
  • darwin:在 add-image 桩经 resident notifier handler 指针跳转前为其签名,修复 arm64e attach 崩溃。
  • darwin-mapper:对 threaded bind 跳过存储;解析后的目标已位于链处理器符号表中,而默认段/偏移可能指向只读 __TEXT。感谢 @hsorbo!
  • arm64-writer:新增 PACIA 和 MOVK 指令生成器,可用于内联签名指针和在生成代码中构建 ptrauth discriminator。感谢 @hsorbo!
  • x86:在 Stalker 中保留 AVX-512 状态。在 AVX-512 主机上保存并恢复 zmm0-15 的上半部分、zmm16-31 和 k0-k7 opmask 寄存器,修复跟踪使用 EVEX 的 libc 例程时的崩溃。
  • x86:新增 AVX-512 CPU 特性检测,以及 Stalker 保存寄存器所需的 writer 生成器。
  • x86:在 CpuContext 中公开 XMM 寄存器;可用时以实时保存区为后端,并新增 gum_cpu_context_copy() 和 boxed 类型以安全持久化。感谢 @hsorbo 带来的愉快协作!
  • interceptor:模块卸载时丢弃 Hook,不再尝试恢复已取消映射内存中的函数序言。感谢 @SamSunNV!
  • module-registry:修复程序头未映射在 ELF 头旁边的模块(如 libgit2)的 ELF 范围计算。尽可能根据程序头计算,仅在必要时回退到 /proc/self/maps。
  • memory:完成内部调用方到 gum_memory_allocate() 和 gum_memory_free() 的迁移,并移除旧 gum_alloc_n_pages() 系列。
  • windows:展开 <arch>、在各架构目录中查找辅助程序,并由管理器生成唯一 rendezvous 名称传给所有辅助服务,以修复已安装资源中的辅助程序发现。
  • windows:改进 MSVC 交叉构建:保持 arm64->x86 构建为交叉构建;各编译器使用自己的 include 和库路径;为原生构建机工具保留环境中的 INCLUDE/LIB。
  • build:通过新的 glib.wrap 预先解析 GLib;根据 GLib 变体确定树内载荷;为交叉构建配置原生语言;避免把父构建机选项转发到 compat 构建。
  • deps:使用当前 GitHub Actions Xcode 重建预构建包,采用更新后的 arm64e ABI。
  • compiler/barebone:将 @types/frida-gum 升级到 19.10.0。
  • tests:字节码测试在丢弃最后一个引用前先卸载脚本,修复负载下偶发的拆卸竞态。感谢 @hsorbo!