某项目前端js解密
字数 1217 2025-08-29 08:31:35

某项目前端JS加密参数分析与解密教程

前言

在进行某项目测试时,发现所有数据包都是加密的,本文将详细解析如何通过前端JS调试找到加密方式并实现解密。

一、接口参数分析

抓取短信接口数据包,发现以下5个参数:

  1. bizData - 主要加密内容,包含业务数据
  2. encryptKey - 加密相关密钥
  3. timestamp - 时间戳
  4. signature - 签名验证
  5. Key - 加密密钥

二、bizData参数解密

1. 定位加密代码

通过开发者工具全局搜索"bizData"参数,找到相关加密代码。分析发现:

  • n变量是加密后的结果
  • e变量是加密前的明文
  • 加密方式为AES

2. 分析AES加密细节

关键加密代码分析:

// AES加密配置
$e.key = t; // 密钥
Be = Ie.a.enc.Utf8.parse('1234567812345678'); // IV偏移量固定为1234567812345678
// 加密模式为CBC

确定加密参数:

  • 加密算法:AES
  • 加密模式:CBC
  • 填充方式:未明确说明,通常为PKCS7
  • IV偏移量:1234567812345678
  • 密钥:变量t的值(需进一步追踪)

3. 追踪密钥生成

通过代码追踪,找到密钥t的定义位置,确认密钥生成方式。

4. 解密验证

使用AES解密工具验证:

  • 输入加密的bizData
  • 密钥:找到的t
  • IV:1234567812345678
  • 模式:AES-CBC

成功解密出原始数据。

三、signature签名分析

1. 定位签名生成代码

全局搜索"signature"参数,找到签名生成位置:

s = 签名结果
a = 签名前的原始数据

2. 分析签名生成方式

签名算法为SHA256,原始数据a的构成:

a = encryptKey + signMethod + timestamp + bizData + salt

其中:

  • signMethod - 签名方法(如"SHA256")
  • salt - 可能的盐值(需在代码中查找)

3. 签名验证

使用SHA256工具对拼接字符串进行加密,验证结果与接口中的signature一致。

四、完整加解密流程

1. 加密流程

  1. 准备业务数据明文
  2. 使用AES-CBC加密,密钥为t,IV为1234567812345678
  3. 生成签名:拼接encryptKey + signMethod + timestamp + bizData + salt
  4. 对拼接字符串进行SHA256加密得到signature
  5. 构造完整请求参数

2. 解密流程

  1. 获取响应中的bizData
  2. 使用相同的AES参数解密
  3. 验证签名(如需)

五、自动化脚本编写建议

提供Python实现示例:

import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

# AES解密
def decrypt_bizdata(encrypted_data, key):
    iv = b'1234567812345678'
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
    decrypted = unpad(cipher.decrypt(encrypted_data), AES.block_size)
    return decrypted.decode('utf-8')

# 生成签名
def generate_signature(encryptKey, signMethod, timestamp, bizData, salt):
    raw_str = f"{encryptKey}{signMethod}{timestamp}{bizData}{salt}"
    return hashlib.sha256(raw_str.encode('utf-8')).hexdigest()

# 使用示例
key = "获取到的密钥t"
encrypted_data = "从接口获取的bizData"
print(decrypt_bizdata(encrypted_data, key))

六、注意事项

  1. 密钥t可能是动态生成的,需要分析其生成逻辑
  2. salt值需要在代码中查找确认
  3. 时间戳参与签名,需保证客户端和服务端时间同步
  4. 修改请求参数后必须重新生成签名
  5. 注意编码问题,确保所有字符串统一使用UTF-8

七、调试技巧

  1. 使用浏览器开发者工具的"搜索所有文件"功能快速定位关键代码
  2. 在疑似加密函数处设置断点,观察变量变化
  3. 使用console.log()输出中间值辅助分析
  4. 注意代码中的常量定义(如IV值)
  5. 跟踪函数调用栈理解完整加密流程

通过以上步骤,可以完整分析前端加密逻辑并实现加解密过程。

某项目前端JS加密参数分析与解密教程 前言 在进行某项目测试时,发现所有数据包都是加密的,本文将详细解析如何通过前端JS调试找到加密方式并实现解密。 一、接口参数分析 抓取短信接口数据包,发现以下5个参数: bizData - 主要加密内容,包含业务数据 encryptKey - 加密相关密钥 timestamp - 时间戳 signature - 签名验证 Key - 加密密钥 二、bizData参数解密 1. 定位加密代码 通过开发者工具全局搜索"bizData"参数,找到相关加密代码。分析发现: n 变量是加密后的结果 e 变量是加密前的明文 加密方式为AES 2. 分析AES加密细节 关键加密代码分析: 确定加密参数: 加密算法:AES 加密模式:CBC 填充方式:未明确说明,通常为PKCS7 IV偏移量:1234567812345678 密钥:变量 t 的值(需进一步追踪) 3. 追踪密钥生成 通过代码追踪,找到密钥 t 的定义位置,确认密钥生成方式。 4. 解密验证 使用AES解密工具验证: 输入加密的bizData 密钥:找到的 t 值 IV:1234567812345678 模式:AES-CBC 成功解密出原始数据。 三、signature签名分析 1. 定位签名生成代码 全局搜索"signature"参数,找到签名生成位置: 2. 分析签名生成方式 签名算法为SHA256,原始数据 a 的构成: 其中: signMethod - 签名方法(如"SHA256") salt - 可能的盐值(需在代码中查找) 3. 签名验证 使用SHA256工具对拼接字符串进行加密,验证结果与接口中的signature一致。 四、完整加解密流程 1. 加密流程 准备业务数据明文 使用AES-CBC加密,密钥为 t ,IV为1234567812345678 生成签名:拼接encryptKey + signMethod + timestamp + bizData + salt 对拼接字符串进行SHA256加密得到signature 构造完整请求参数 2. 解密流程 获取响应中的bizData 使用相同的AES参数解密 验证签名(如需) 五、自动化脚本编写建议 提供Python实现示例: 六、注意事项 密钥 t 可能是动态生成的,需要分析其生成逻辑 salt值需要在代码中查找确认 时间戳参与签名,需保证客户端和服务端时间同步 修改请求参数后必须重新生成签名 注意编码问题,确保所有字符串统一使用UTF-8 七、调试技巧 使用浏览器开发者工具的"搜索所有文件"功能快速定位关键代码 在疑似加密函数处设置断点,观察变量变化 使用console.log()输出中间值辅助分析 注意代码中的常量定义(如IV值) 跟踪函数调用栈理解完整加密流程 通过以上步骤,可以完整分析前端加密逻辑并实现加解密过程。