新版本带来了 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_threadHook,使 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。
oleavr