ProxyPin 中文文档 下载 App

ProxyPin AES 请求体解密 自动还原加密数据

为什么请求体需要加密

App 厂商对 API 通信做加密的常见原因:

常见的加密方式:

算法模式
AES-128CBC / ECB / GCM
AES-256CBC / GCM
DESCBC(老项目)
RSA通常只加密密钥

AES 是最常用的对称加密。

ProxyPin 的自动解密能力

ProxyPin 内置了 AES 请求体自动解密功能。配置好加密参数后:

  1. App 发出加密的请求(Body 是密文,通常 base64 编码)
  2. ProxyPin 拦截 → base64 解码 → AES 解密
  3. 请求列表中直接显示解密后的明文
  4. 修改明文后,ProxyPin 自动重新加密再发出

配置解密规则

进入「我的」→「请求解密」(或工具箱 → AES 解密):

配置项说明

参数说明示例
匹配域名正则,哪些请求需要解密secure\.api\.example\.com
算法AES 模式AES/CBC/PKCS7Padding
Key加密密钥(十六进制或 base64)0123456789abcdef...
IV初始向量(CBC 模式必须)abcdef0123456789
Base64请求体是否需要先 base64 解码是
作用对象解密请求体 / 响应体 / 两者请求体

配置示例

假设目标 App 用 AES/CBC/PKCS7Padding,密钥 32字节AES256Key!,IV 1234567890123456:

匹配域名:api.myapp.com
算法:AES/CBC/PKCS7Padding
Key:bXktc3VwZXItc2VjcmV0LTMyLWNoYXJhY3Rlci1rZXkh
IV:MTIzNDU2Nzg5MDEyMzQ1Ng==(或直接十六进制)
Base64 解码:是
作用对象:请求体

如何找到加密参数

ProxyPin 解密需要 Key 和 IV,但 App 一般不会在明文里暴露这些值。获取方式:

方式一:逆向 App

用 jadx / apktool 反编译 APK,搜索加密相关的类(AES、Cipher、SecretKeySpec 等),找到密钥硬编码位置。

方式二:Hook 运行时

用 Frida / Xposed Hook App 的加密函数,在运行时 dump 出 Key 和 IV:

// Frida Hook AES 加密
Java.perform(function() {
  var Cipher = Java.use("javax.crypto.Cipher");
  Cipher.doFinal.overload('[B').implementation = function(input) {
    console.log('AES Input:', input);
    var result = this.doFinal(input);
    console.log('AES Output:', result);
    return result;
  };
});

方式三:从 App 内置配置提取

有些 App 会把密钥放在 assets 目录下的配置文件里,直接解压 APK 就能看到。

实战流程

  1. 用 ProxyPin 抓包,找到加密的请求(Body 看起来是 base64 密文)
  2. 逆向或 Hook 得到 Key 和 IV
  3. 在 ProxyPin 中配置解密规则
  4. 刷新 App,再次抓包 → 明文显示

安全研究场景

AES 解密功能在以下场景特别有用: