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