# gxpc XPC 通信嗅探工具

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

- 类型：工具
- 目标：应用 · 协议
- 类别：调试与动态分析
- 关联：基础工具
- 来源复核于：2026-10-20
- 收录于：2026-11-02
- 原始资源：<https://github.com/ReverseApple/gxpc>
- 一手来源：<https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/README.md>
- 目录页面：<https://awesomerea.org/zh/resources/gxpc/>
- 记录 JSON：<https://awesomerea.org/resources/gxpc/record.json>
- 英文版：[English](https://awesomerea.org/resources/gxpc/index.md)

## 使用条件与局限

- 审阅时最新版本为 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 分发。

## 一手来源

1. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/README.md>
2. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/main.go>
3. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/script.ts>
4. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/offsets.go>
5. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/go.mod>
6. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/.goreleaser.yaml>
7. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/.github/workflows/release.yml>
8. <https://github.com/ReverseApple/gxpc/blob/4fad36db87126c0b29b987472b5863206fb77ac2/LICENSE>
9. <https://github.com/ReverseApple/gxpc/releases/tag/v2.2.1>

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

- [Manticore 符号执行工具](https://awesomerea.org/zh/resources/manticore/index.md) · 工具
- [Ghidra Ninja Ghidra 脚本合集](https://awesomerea.org/zh/resources/ghidra-ninja-scripts/index.md) · 工具
- [FindCrypt Ghidra 版密码常量识别脚本](https://awesomerea.org/zh/resources/findcrypt-ghidra/index.md) · 工具
- [Binary Refinery 二进制数据转换工具集](https://awesomerea.org/zh/resources/binary-refinery/index.md) · 工具
- [AngryGhidra Ghidra 符号执行插件](https://awesomerea.org/zh/resources/angryghidra/index.md) · 工具
- [fpicker Frida 插桩与覆盖率采集套件](https://awesomerea.org/zh/resources/fpicker/index.md) · 工具

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
