th3-bl1nd3r/burp-polyproto
GitHub: th3-bl1nd3r/burp-polyproto
一款 Burp Suite 扩展,能自动剥离多层传输编码与内容编码(gRPC、压缩、protobuf 等),为安全测试提供可读且可编辑的 API 流量树状视图。
Stars: 0 | Forks: 0
# PolyProto
**一款适用于 Burp Suite 的厂商无关 API 流量解码器。**



PolyProto 为每个 HTTP 请求/响应和 WebSocket 消息添加了一个 **Decoded** 标签页,它会自动检测并将整个堆栈——传输层帧、压缩和正文格式——剥离为一个可读且**可编辑**的树状结构。它由用户管理的**规则引擎**驱动,因此特定于厂商的行为是*数据*,而不是代码。专为逆向工程和渗透测试在现代移动/Web API 隐藏在多层编码之后的 payload 而构建。
## 它的功能
对于任何消息,**Decoded** 标签页都会自动剥离以下各层:
| 层级 | 覆盖范围 |
|---|---|
| **传输层帧** | HTTP 分块、gRPC(5字节前缀)、gRPC-Web(`+text` base64 + trailer)、字节跳动 **Frontier** WebSocket 帧 |
| **内容编码 (Content-encoding)** | gzip、deflate(zlib + raw)、**brotli**、**zstd**,以及用于 Frontier payload 的 IM `__lz4` 块 |
| **正文格式** | protobuf、JSON、form-urlencoded、**form + embedded-JSON** (GraphQL)、XML |
- **可折叠的 protobuf 树**,具有按 token 着色的功能、`bytes[N]` 芯片标记,以及 varint 上的实时时间戳提示。
- **右键点击 → 将此字段解码为** protobuf / gzip / base64 / utf-8 —— 将一个不透明的 blob 就地转换为子树。另外支持复制值 / 十六进制 / 字段路径。
- **编辑 + 重放 (Replay)**:切换到文本视图,进行编辑,使用 `Ctrl/Cmd+Z` 撤销/重做,并从 Repeater 发送 —— PolyProto 会穿透**每一层**(重新压缩、重新分块、重新组帧)进行重新编码。Brotli / dictionary-zstd 将回退为 identity 并丢弃编码头。
- **查找栏**,用于搜索*已解码*的文本。
## 安装
**从发布版本安装:** 从 [Releases](../../releases) 下载 `polyproto.jar`,然后在 Burp 中 →
**Extensions → Add → Java** → 选择该 jar 包。
**从源码构建:**
```
gradle shadowJar # -> build/libs/polyproto.jar (bundles brotli + aircompressor, ~0.5 MB)
```
需要 JDK 17。Montoya API 为 `compileOnly`(由 Burp 在运行时提供);纯 Java 解码器(`org.brotli:dec`、`io.airlift:aircompressor`)被打包到 shadow jar 中。
## 规则
所有特定于厂商的内容都是一个 JSON 规则(内置 `builtins.json`,持久化保存到 Burp 首选项,可在 **PolyProto** suite 标签页中编辑)。规则匹配 host / path / method / header / content-type,并且可以:
- **强制使用 pipeline** (`["dechunk?","gzip?","protobuf"]`) 或将其保留为 `auto`,
- 应用 **schema pack**(protobuf 字段名称),
- **重写请求头**(例如,击败专有的 `Accept-Encoding`,以便服务器回复 gzip),
- 重新计算**签名**(默认关闭 —— 即“它到底被检查了吗?”测试),
- 提取**标签**(例如 GraphQL 操作名称)并显示在标签页上。
内置规则重现了旧的 TikTok + Meta 工具,添加了通用的 gRPC/gRPC-Web 以及自动 catch-all。
## 架构
一个 JSON 规则集 → 最高优先级的匹配选择一个由可逆 `Stage` 组成的 pipeline(`framing → coding → format`) → 可编辑文本;`encode` 会反转记录的 trace。Auto-detect 只是最低优先级的规则。完整设计请参阅 [DESIGN.md](DESIGN.md)。
```
core/ engine, pipeline, detector, message model
stage/ reversible codecs (framing / coding / format)
rule/ rule model, registry, JSON codec, label extractor
pack/ schema/envelope registry + vendor packs (field names)
frontier/ Frontier WebSocket Frame / FrameText
ui/ colored CodeView + find/undo, ProtoTreeView, Rules tab
burp/ extension entry, Montoya adapters, editors, HTTP handler
```
## 尚未(完全)覆盖
Connect-RPC / Twirp 组帧;MessagePack / CBOR 正文;brotli 和 dictionary-zstd 的忠实重新压缩(需要原生库);Thrift / FlatBuffers(需要 schema)。所有这些都可以作为新的 `Stage` 轻松添加 —— 欢迎 PR。
## 免责声明
PolyProto 是一款**防御/研究**工具,仅用于**授权的**安全测试 —— 您自己的应用程序、具有明确范围的漏洞赏金计划、CTF 或实验室环境。它**不隶属于、也不受** TikTok、字节跳动、Meta、Google 或任何其他厂商**认可或赞助**。内置的包是基于公开逆向工程得出的 protobuf **字段名称覆盖层**;它们不包含任何专有代码或凭证。您需自行负责遵守适用于您解码的任何流量的服务条款和法律法规。
## 许可证
[MIT](LICENSE) © 2026 Trần Gia Nghĩa ([@th3-bl1nd3r](https://github.com/th3-bl1nd3r))
标签:API逆向分析, Burp Suite插件, JS文件枚举, Python工具, 后台面板检测, 域名枚举, 数据解码, 网络流量分析