新版本带来了 Gum/GumJS 中全新的代码形态分析工具箱、大量 Linux 注入器 加固与清理修复、大幅提升 Windows arm64 稳定性的工作,以及 Gum 和 Core 各处已有文档说明的公共 API。

亮点:

  • gum:添加原生控制流图模块,包括基于解析器的图构建、 Cooper-Harvey-Kennedy 支配节点算法,以及按最近优先顺序枚举支配位置。
  • gumjs:添加 ControlFlowGraph 和 BasicBlock。
  • gum:添加 Process.find_function_range()。它不需要符号,因此也适用于 已剥离符号的二进制文件。
  • gumjs:添加 Process.findFunctionRange()。
  • interceptor:添加按函数和按监听器刷新,使调用方能够等待自己的 Hook 排空,而不会被无关的待处理工作阻塞。
  • linux:当采样 PC 落在很小的系统调用包装函数中时,通过遍历栈来寻找 可 Hook 的触发点,从而提高多线程目标中的注入器可靠性。
  • linux:通过 /proc/<pid>/fd 而不是 /proc/self/fd 加载 agent, 使附加的调试器解析出的对象路径与目标进程一致。
  • linux:以与安装对称的方式恢复被修补的触发函数,避免另一个线程执行 写入到一半的序言时产生竞态。
  • linux:捕获 libbpf 诊断信息并将其包含在抛出的错误中,不再泄漏到 stderr。
  • linux:使用实际的 bootstrap stub 确定触发候选项大小,避免无谓拒绝 体积较小但频繁执行的 libc 例程。
  • linux:当缺少权限导致 eBPF/perf 采样不可用时,回退为轮询 /proc/<pid>/task/<tid>/syscall。
  • linux:在清理时排空线程注册表,修复卸载期间线程频繁变化所导致的 use-after-free。
  • linux:使用新的 CFG 机制重定位 start_thread Hook,使 Hook 落在安全的 支配指令上,而不是覆盖仍在使用的调用位置。
  • linux:通过反复进行锚点探测和锁交叉检查,直到两者结果一致,增强高频线程 变化情况下的 pthread 布局检测。
  • x86:使 can_relocate() 能够感知重定位场景,拒绝那些必须跨越调用或 类系统调用指令的在线重定位。
  • meson:构建捆绑的 Capstone 时启用所有架构,与预构建 SDK 保持一致, 让跨架构反汇编随处可用。
  • stalker:修复代码 slab 相距超过 128 MB 时远距离 backpatch 尾声丢失 BL 的问题;该问题会破坏栈并导致崩溃,在 Windows arm64 的宽广地址空间中暴露。
  • stalker:检测 Windows 上的线程退出,从而不再跟踪正在终止的线程进入 ntdll 的清理流程。
  • exceptor:在 Windows arm64 上通过 RtlRestoreContext() 而不是 longjmp() 恢复执行,修复崩溃恢复;后者的栈展开会拒绝我们的合成帧并终止进程。
  • gdb:修复 iOS debugserver 等 LLDB stub 上的寄存器访问;此前会表现为 “Failed to attach: invalid integer value: E03”。
  • gum:为公共 API 编写文档:Interceptor、Stalker、Exceptor、Module、 ModuleMap、ModuleRegistry、MemoryMap、MemoryAccessMonitor 和 DarwinGrafter。
  • core:为公共 API 编写文档,并将 Vala 文档注释注入 GIR。
  • ci:发布 GObject 内省数据。
  • ci:添加 windows-arm64 原生任务。
  • barebone/compiler:将 @types/frida-gum 升级到 19.6.0。