中文 | English
Cursor IDE gRPC 中间人流量分析工具。可以解密 TLS、反序列化 protobuf、实时展示 AI 对话产生的RPC请求和响应。
Cursor 和后端的通信全是 gRPC,走的 Connect Protocol,body 是二进制 protobuf。用 Burp 或 Fiddler 抓到的都是一堆看不懂的二进制。官方也没公开 proto 定义,想看 AI 对话的具体内容很麻烦。
这个工具能把流量解密成可读的 JSON,还能实时看到 streaming 的每一帧。
Cursor 逆向笔记 1 —— 我是如何拦截解析 Cursor 的 gRPC 通信流量的
- MITM 代理:在 Cursor 和 api2.cursor.sh 之间插一层,用自签 CA 解密 TLS
- Proto 提取:从 Cursor 客户端的 JS 代码里提取出 proto 定义(藏在
protobuf-es编译产物里) - 实时解析:解析 Connect Protocol 的 envelope framing,反序列化每一帧 protobuf
- WebUI 展示:用 WebSocket 实时推送到前端,四栏布局展示服务树、调用列表、帧列表、详情
go run ./cmd/proxy默认监听 localhost:8080(HTTP 代理)和 localhost:9090(WebUI + WebSocket)。
设置环境变量让 Cursor 走代理并信任自签 CA:
# Windows
set HTTP_PROXY=http://localhost:8080
set HTTPS_PROXY=http://localhost:8080
set NODE_EXTRA_CA_CERTS=C:\path\to\ca.crt
# macOS/Linux
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080
export NODE_EXTRA_CA_CERTS=/path/to/ca.crtCA 证书在首次启动时自动生成,位置是 ~/.cursor-tap/ca.crt。
cd web
npm install
npm run dev打开 http://localhost:3000 就能看到流量了。
├── cmd/proxy/ # 代理入口
├── internal/
│ ├── ca/ # CA 证书管理,动态签发
│ ├── proxy/ # HTTP CONNECT 代理
│ └── httpstream/ # gRPC 解析核心
│ ├── grpc.go # protobuf 反序列化
│ ├── parser.go # Connect Protocol 解析
│ └── recorder.go # 流量记录
├── cursor_proto/ # 提取出来的 proto 定义
└── web/ # Next.js 前端
AiService/RunSSE:AI 对话的主通道,包括 AI 思考、文本生成、工具调用BidiService/BidiAppend:用户消息和工具执行结果AiService/StreamCpp:代码补全请求和建议CppService/RecordCppFate:补全结果的接受/拒绝反馈AiService/Batch:用户行为上报- 其他几十个 RPC 方法...
