这次是一个大型版本,包含安全加固、平台修复和多项 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!
oleavr