5.0 KiB
5.0 KiB
最终报告模板
验证通过!现在输出最终结果。
JS 逆向分析完成 <任务名称>
分析结果
- 加密函数:
<函数路径> - 加密方式:
<算法/编码/组合> - 入口路径:
<页面入口或运行时路径> - 置信度:
高(网络请求 + 运行时 Hook 双重验证)
验证结果
| 测试 | 输入 | 输出 |
|---|---|---|
| JSRPC | <plaintext> |
<ciphertext/signature> |
| Flask 代理 | <original body> |
<transformed body> |
验证命令
curl -sS --get \
--data-urlencode group=<group> \
--data-urlencode action=<action> \
--data-urlencode 'param={"parameter":"<parameter>","value":"<plaintext>"}' \
http://127.0.0.1:12080/go
预期结果必须包含明文、最终请求体、密文/签名和最终业务响应。
将上述真实返回保存为 artifacts/jsrpc_smoke.json 后,必须执行:
python3 scripts/validate_browser_evidence.py \
--input artifacts/jsrpc_smoke.json \
--output artifacts/browser_evidence.json
只有 browser_evidence.json 中 passed=true 时,才能在报告中写“验证通过”。如果保存了桥接连接、tabId 和 documentId,追加 --require-session。
Flask 代理验证
curl --noproxy '*' -sS -X POST http://127.0.0.1:<flask_port>/<route> \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'dataBody=<完整的原始 URL-encoded 请求体>' \
--data-urlencode 'dataHeaders=<可选的请求头 JSON>'
预期结果必须返回代理改写后的请求体,其中目标字段已完成加密或签名;如果配置了响应透传,还应包含最终业务响应。
Burp“请求数据包/响应数据包”整包模式还必须单独验证:
curl --noproxy '*' -sS -X POST http://127.0.0.1:<flask_port>/encode \
-H 'Content-Type: application/octet-stream' \
--data-binary $'POST /path HTTP/1.1\\r\\nHost: target\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\n\\r\\npassword=plaintext'
预期返回完整 HTTP 报文,目标字段已替换且 Content-Length 已同步。外层 application/octet-stream 不代表目标 body 是二进制;代理必须识别内层 HTTP 报文的 Content-Type。
Burp autoDecoder 页面配置
以下 <flask_port> 必须替换为 artifacts/flask_status.json 中服务实际返回的 port。如果默认端口被占用,服务管理器会自动选择备用端口。
请求体加密
- 加密接口:
http://127.0.0.1:<flask_port>/encode。 - 可以同时配置加密接口和解密接口;当前测试时选择“请求数据包”,不要同时选择“响应数据包”。两者是互斥方向。
- 原始数据包区域粘贴完整 HTTP 请求,不要只粘贴 body。
- “处理请求头”:仅当签名或加密依赖请求头时勾选,否则不勾选。
- “请求 base64 编码”:只有请求体进入接口前需要 Base64 编码时勾选。
- “请求自动 base64 解码”:只有接口需要先自动还原 Base64 请求体时勾选。
- “Proxy、Repeater 等模块真实调试”:需要在 Burp Proxy/Repeater 联调时勾选,否则不勾选。
响应体解密
- 解密接口:
http://127.0.0.1:<flask_port>/decode(可与加密接口同时配置)。 - 取消选择“请求数据包”,改为选择“响应数据包”,不能同时选择两个方向。
- 原始数据包区域粘贴完整 HTTP 响应,不要只粘贴 body。
- “处理响应头”:仅当响应解密依赖响应头时勾选,否则不勾选。
- “响应 base64 编码”:只有响应体进入接口前需要 Base64 编码时勾选。
- “响应自动 base64 解码”:只有接口返回 Base64、需要还原二进制响应时勾选。
- 响应方向传递
requestorresponse=response;请求方向传递requestorresponse=request。
启用请求头或响应头处理时,接口必须返回 请求头 + "\\r\\n\\r\\n\\r\\n\\r\\n" + 改写后的请求/响应体。
关闭服务命令
kill $(lsof -t -i:12080)
kill $(lsof -t -i:<flask_port>)
Burp autoDecoder 配置
- 加密接口:
http://127.0.0.1:<flask_port>/encode - 解密接口:
http://127.0.0.1:<flask_port>/decode(可与加密接口同时配置) - HTTP 方法:
POST - 表单字段:
dataBody、dataHeaders - 生成后必须通过
python3 scripts/check_delivery_contract.py --proxy generated/flask_proxy.py --output artifacts/delivery_contract.json。 jsrpc.base_url无论配置为http://127.0.0.1:12080还是带/go的完整地址,最终请求只能包含一次/go。
生成的产物
analysis_result.jsongenerated/jsrpc_inject.jsgenerated/flask_proxy.pygenerated/burp-autodecoder.mdartifacts/validation_report.jsonartifacts/browser_evidence.json
对抗分析追加
- 对抗类型:
<反调试/反 Hook/环境检测/动态加载> - 探针健康:
<丢失补丁/重建错误/丢弃事件> - 差分结论:
<观察结果/干预结果>