proxyman抓包工具使用
2023-01-04 本文已影响0人
独孤流
https://proxyman.io/
优点:免费
、使用js灵活改写请求或返回
日常抓包操作
抓包工具Proxyman的安装及配置
proxyman 抓包安装使用一条龙
手把手教你用iPhone在Mac上抓包 proxyman
使用poxyman对请求或响应进行改写
参考:
前端解密后端传过来的gzip加密数据
proxyman脚本功能
巧用Proxyman Scripting 编写信息收集脚本
https://github.com/testivy/information-gathering-script
image.png具体场景为:由于接口数据进行了gzip加密后返回,在使用抓包工具进行观察时很不方便,特使用proxyman的
脚本功能改写
一、对接口返回的gzip加密的数据使用proxyman自动解密查看
操作步骤:
1、添加脚本
脚本
->脚本列表
->+
->设置规则
->编写内容
->保存
2、设置规则和代码
image.png
3、生效后的效果
image.png
完整脚本(简化版)
// Addons List: https://docs.proxyman.io/scripting/addons
// ~/Library/Application Support/com.proxyman.NSProxy/addons
// /Users/xxx/Library/Application Support/com.proxyman.NSProxy/addons
//const pako = require("@addons/libs/pako.js");
//const {atob} = require("@addons/libs/atob.js");
const Pako = require("@addons/Pako.js");
async function onRequest(context, url, request) {
// console.log(request);
console.log(url);
// Done
return request;
}
async function onResponse(context, url, request, response) {
// Update Body
var body = response.body;
var b64Data = body["data"]
if (b64Data) {
if (typeof b64Data == 'string') {
// 只对base64字符串的内容进行gzip解密
let strDataText = Pako.ungzip(b64Data);
// 对解密的字符串设置成json格式
let strDataJson = JSON.parse(strDataText)
body.gzipData = strDataJson;
// comment只能展示字符串
response.comment = strDataText
} else {
// 如果已经是json格式了,直接使用
response.comment = JSON.stringify(b64Data)
body.gzipData = b64Data;
}
}
response.body = body;
// Done
return response;
}
二、对接口返回的RSA、AES 加密的数据使用proxyman自动解密查看
参考:前端 crypto-js aes 加解密
完整代码:
// Addons List: https://docs.proxyman.io/scripting/addons
const CryptoJS = require('@addons/CryptoJS.js'); //引用AES源码js
const key = "1234123412ABCDEF"; //十六位十六进制数作为密钥
const iv = 'ABCDEF1234123412'; //十六位十六进制数作为密钥偏移量
async function onRequest(context, url, request) {
// console.log(request);
console.log(url);
// Done
return request;
}
async function onResponse(context, url, request, response) {
let originText = "{'name':'james','age':18}"
let encryptText = CryptoJS.encryptAES(originText,key);
let decryptText = CryptoJS.decryptAES(encryptText,key);
let jsonTxt = {"originText":originText,
"encryptText":encryptText,
"decryptText":decryptText}
let comment = response.comment
let extraComment = "originText: "
+ originText+"\r\n encryptText: "
+ encryptText+"\r\n decryptText: "
+ decryptText
if (comment) {
response.comment = response.comment + "\r\n " + extraComment
}else {
response.comment = extraComment
}
var body = response.body;
body.aesData = jsonTxt
response.body = body
// Done
return response;
}