iOS基础类

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

具体场景为:由于接口数据进行了gzip加密后返回,在使用抓包工具进行观察时很不方便,特使用proxyman的脚本功能改写

image.png

一、对接口返回的gzip加密的数据使用proxyman自动解密查看

操作步骤:
1、添加脚本
脚本->脚本列表->+->设置规则->编写内容->保存

image.png

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;
}
上一篇下一篇

猜你喜欢

热点阅读