CustomCrypto Burp自定义加解密工具
背景
在进行 App、Web 或小程序测试时,经常遇到流量加密导致无法直接分析的问题。
常见的处理方式有两种:
- 手动提取:提取加解密字段,手动复制并执行解密操作。
- Hook 函数:Hook 加解密函数,在调用时进行动态加解密。
Warning
上述方法均存在局限性:前者需要反复复制字段,效率低下;后者难以复用,每次需重新调用,维护成本高。
CustomCrypto
CustomCrypto 是一款强大的加解密代理工具,支持将 Burp 拦截的流量转发至任意位置进行加解密处理。
Note
支持通过命令行调用任意语言的加解密脚本(如 Node.js、PHP、Java 等),针对不同站点可配置不同的加解密方案。
使用方法

配置说明
插件安装后,主要配置项包括 需要监控的网址 和 需要执行的命令。
| 配置项 | 说明 |
|---|---|
| 需要监控的网址 | 指定需要进行加解密的 URL。例如仅对 http://localhost/login 进行加解密则填入该地址;若整站均需处理,建议配置根路径。必须包含 http:// 或 https:// 协议头。 |
| 需要执行的命令 | 通过命令行调用任意语言的加解密脚本。 |
脚本命令示例:
node /your/path/crypto.jsjava -jar crypto.jarTip
Java 示例需先编译为 Class 文件或 Jar 包后调用。虽然支持运行时编译,但会显著降低响应速度,不建议使用。
配置完成后,请点击 保存 按钮使配置生效。
脚本交互协议
系统调用脚本的标准格式如下:
php crypto.php 2 abcdefjhijklmnopq....参数说明
第一个参数:请求类型
Burp 定义了四种请求阶段:
const REQUEST_RECEIVE = "0"; // Burp 收到请求(显示在 Log 或拦截界面)const REQUEST_SEND = "1"; // Burp 发出请求(拦截后重新发送)const RESPONSE_RECEIVE = "2"; // Burp 收到响应(显示在 Log 或拦截界面)const RESPONSE_SEND = "3"; // Burp 发出响应(返回给客户端)第二个参数:数据载荷
需要进行加解密的数据 Body,以 urlencoded(base64encode(body)) 的形式传递,因此在脚本中处理前需先进行解码。
Note
目前不支持 GET 参数解密。鉴于加密数据通常通过 POST 传递,此限制影响较小。
Warning
若在 REQUEST_RECEIVE 或 RESPONSE_RECEIVE 阶段进行了加解密操作,后续阶段接收到的 Body 将是修改后的值。
简而言之:若接收阶段执行了解密,发送阶段则必须执行加密,以确保服务器或客户端接收到正确的数据。
Burp 流量生命周期示意如下:

PHP 示例脚本
<?phpconst REQUEST_RECEIVE = "0"; // 收到请求const REQUEST_SEND = "1"; // 发出请求const RESPONSE_RECEIVE = "2"; // 收到响应const RESPONSE_SEND = "3"; // 发出响应if (sizeof($argv) !== 3) { throw new Exception("错误:至少需要两个参数!");}// 判断是否为加密阶段(只有发出阶段才需要加密)$isEncryption = ($argv[1] == REQUEST_SEND || $argv[1] == RESPONSE_SEND);// 获取并解码数据$data = base64_decode(urldecode($argv[2]));// 加密函数function encode($d) { // TODO: 替换为实际的加密逻辑 return base64_encode($d);}// 解密函数function decode($d) { // TODO: 替换为实际的解密逻辑 return base64_decode($d);}if ($isEncryption) { echo encode($data);} else { echo decode($data);}示例场景
Web 前端流量加解密
提取前端加解密脚本为
crypto.js,目标网址为http://example.com/login。套用 CustomCrypto 脚本模板。
在 需要监控的网址 处填写:
http://example.com/login。在 需要执行的命令 处填写:
node crypto.js。点击 保存。
刷新网页并重新发包即可。
Tip
示例脚本中对返回页面数据进行了 Base64 编码处理。

App 流量加解密
Note
目前暂未提供 App 专用脚本模板。
根据加解密复杂度,可选择以下方案:
| 场景 | 推荐方案 |
|---|---|
| 复杂加解密 | 使用 Frida 或 Xposed 植入代码,启动本地 HTTP 服务,由该服务主动调用 App 中的加解密逻辑 |
| 公开算法(RSA、SM2 等) | 在本地实现对应逻辑,或将原 App 的加解密类拷贝至本地 Java 文件中编译使用 |
通用步骤:
按上述方案准备本地加解密逻辑。
套用 CustomCrypto 脚本模板(支持 Python/PHP/Java 等)。
在 需要监控的网址 处填写目标 URL(如
http://example.com/login)。在 需要执行的命令 处填写脚本命令(如
php crypto.php)。点击 保存。
返回 App 重新发包即可。
局限性
Warning
由于增加了四步加解密流程,Web 页面的响应速度可能会有所延迟(通常慢几秒)。
故障排查
检查 需要监控的网址 是否完整,必须包含 http:// 或 https:// 协议头。同时确认 Burp 的拦截功能已开启。
确保命令行中指定的解释器(如 node、php、java)已正确安装且路径无误。可以通过终端直接运行命令来验证。
检查数据解码顺序是否正确:应为先 urldecode 再 base64_decode。
目前仅支持 POST Body 的加解密。GET 参数通常用于查询而非敏感数据,若确实需要可自行修改源码扩展。
本文已加密,请输入访问密码