Frida 17.9.4 已发布,重点修复并改进 Darwin、Apple TLS 兼容性,以及几个棘手的正确性问题:

  • darwin:把辅助程序临时文件存放在容器的 Caches 目录,而不是 ~/.Trash。xctest 沙箱禁止从 .Trash 执行,而 Caches 在所需场景中均可写且可执行。
  • darwin:用 socketpair 替换辅助程序握手所用的文件系统 socket,避免 HOME 深度嵌套(如沙箱容器内)时触及 macOS 104 字节 sun_path 限制。dyld 启动期间辅助程序崩溃现在会更可靠地表现为 PROCESS_NOT_FOUND。
  • darwin:在 installed 模式下也把辅助程序裁剪为 arm64,使用相同的通用二进制后备方案,无需发布两个产物。
  • darwin:跳过无操作的 stdio dup2() 动作。当源 fd 是从 Node 等父进程继承的 FIFO 时,posix_spawn 会以 EBADF 拒绝 dup2(fd, fd)。
  • darwin:使用 posix_spawn 返回值修复错误报告,因为它可能不更新 errno;失败不再显示为“Undefined error: 0”。
  • macos:使用 NSWorkspace 和 LaunchServices 元数据实现 applications API,并支持按 bundle 标识符启动应用。
  • build:确保 lipo 目标存在并安装通用 frida-agent.dylib,在 shared+installed 模式下正确安装 frida-agent。
  • base:在 AssetLocation 中新增平面布局后备,使未安装构建能解析放在库旁边的资源。
  • compat:父构建使用 gioapple 时,在 Apple 平台用 OpenSSL TLS 构建 frida-agent,避免向目标注入 Security、Network 和 CoreFoundation;注入器无法安全完成这种注入。
  • agent:compat 已拥有主机架构 Agent 时避免重复构建,修复 Darwin 通用 lipo 失败。
  • value:修复 Json.Reader 根节点所有权,保持解析器拥有的原始节点存活,避免 json-glib 有缺陷的节点复制行为导致子节点父指针仍指向已释放节点。
  • interceptor:为 dispatcher thunk 指针签名,修复 arm64e 上的共享 deflector。
  • tests:新增 Darwin 启动应用覆盖,并在设置未配置时容忍空的 nvram boot-args 输出。