工具

gxpc XPC 通信嗅探工具

受 xpcspy 启发的 macOS 命令行 XPC 嗅探工具:把 Frida 代理注入已附加或新启动的进程,记录其收发的 XPC 消息,并标出对应的 libxpc 函数、连接名、对端 PID 与进程名。代理会递归地把 xpc_object_t 字典、数组和标量值转换为可读输出,并解码二进制 plist 负载;基于 frida-go 的 Go 主程序负责选择本地、USB 或远程 Frida 设备,按名称或 PID 过滤连接,并可将跟踪结果保存到文件。它用于观察 Apple 平台应用与服务如何通过 XPC 通信,不会修改或注入消息。

使用条件与局限

  • 审阅时最新版本为 v2.2.1,发布于 2025-08-12,提供由 GoReleaser 针对 Frida 17.2.16 core devkit 链接构建的 macOS x86_64 与 arm64 压缩包;所审阅的 main 分支提交只多了一次 cobra 依赖升级(2025-09-02)。若改用 go install 安装,需要 Go、cgo,并按 frida-go 文档配置 Frida devkit;go.mod 声明 Go 1.20 和 frida-go 1.0.0。
  • 首次运行时,程序会把内嵌的 TypeScript 代理及包文件写入系统临时目录下的 gxpc 文件夹,执行 npm install 安装 frida-objc-bridge,再用 Frida 编译器编译代理,因此至少需要一次 Node.js、npm 和网络访问;之后会复用已编译的代理。分析者可按 PID、进程名或待启动的文件选择目标,设备可以是本机(-i local)、USB 设备(默认)或远程 Frida 服务;README 未说明设备配置方法,也未列出测试过的系统版本。
  • 发出的消息通过挂钩公开的 libxpc 发送、回复与通知函数获取,新建连接则通过 xpc_connection_create_mach_service 和 xpc_connection_set_event_handler 记录。接收的消息依赖私有的 _xpc_connection_call_event_handler 和 __CFBinaryPlistCreate15,代理通过调试符号解析其地址,并按机型与系统构建号把偏移缓存到用户主目录下的 gxpc.conf(或以 -c 指定的文件)。bplist16 负载仅在宿主机安装了外部 jlutil 程序时由其解码,否则交给代理自带的解析器或以 base64 输出。在所审阅的 main.go 中,--whitelistp 选项读取的是 --whitelist 的值,因此按 PID 设置白名单可能无法按文档工作。
  • 采用 MIT 许可。frida-go、Frida devkit 与 frida-objc-bridge 保留各自许可证,jlutil 是另行提供的第三方工具,不随 gxpc 分发。所审来源未确立与 REA 的关联;本次核查未安装或运行任何内容。

关于此条目

类型
工具
类别
调试与动态分析
关联
基础工具
目标
应用 · 协议

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

报告条目过时 建议修正翻译

一手来源

  1. README.md GitHub · ReverseApple/gxpc · 修订 4fad36d
  2. main.go GitHub · ReverseApple/gxpc · 修订 4fad36d
  3. script.ts GitHub · ReverseApple/gxpc · 修订 4fad36d
  4. offsets.go GitHub · ReverseApple/gxpc · 修订 4fad36d
  5. go.mod GitHub · ReverseApple/gxpc · 修订 4fad36d
  6. .goreleaser.yaml GitHub · ReverseApple/gxpc · 修订 4fad36d
  7. .github/workflows/release.yml GitHub · ReverseApple/gxpc · 修订 4fad36d
  8. LICENSE GitHub · ReverseApple/gxpc · 修订 4fad36d
  9. https://github.com/ReverseApple/gxpc/releases/tag/v2.2.1

同分区更多条目:原生二进制

原生二进制分区全部 109 项资源