小程序安全 | 对某次渗透项目加密密文进行解密
字数 816 2025-08-06 18:08:01
小程序AES加密参数分析与解密实战
1. 背景概述
在渗透测试项目中,小程序往往比主站资产站点更少受到关注,维护程度可能不及核心站点,因此容易存在较多安全问题。当发现小程序参数被加密时,需要通过反编译获取前端代码,分析加密逻辑。
2. 反编译小程序
2.1 获取前端代码
- 使用反编译工具获取小程序前端代码
- 主要关注
app.js文件,它包含小程序核心功能代码 - 其他js文件多为第三方库
2.2 定位加密函数
在反编译后的代码中搜索常见加密关键字:
encryptdecryptcryptoAES
3. 加密算法分析
3.1 加密函数定位
在A6F17FD27F6C38AFC09717D525323F76.js文件中找到加密函数:
r.encrypt = function(t, e, i) {
return function(t, e, i) {
var n = r.enc.Utf8.parse(t);
return r.AES.encrypt(n, e, {
iv: i,
mode: r.mode.CBC,
padding: r.pad.Pkcs7
}).ciphertext.toString().toUpperCase();
}(t, e, i);
}
3.2 解密函数定位
同文件中找到解密函数:
r.decrypt = function(t, e, i) {
return function(t, e, i) {
var n = r.enc.Hex.parse(t),
s = r.enc.Base64.stringify(n);
return r.AES.decrypt(s, e, {
iv: i,
mode: r.mode.CBC,
padding: r.pad.Pkcs7
}).toString(r.enc.Utf8).toString();
}(t, e, i);
}
3.3 加密参数分析
- 加密算法:AES
- 加密模式:CBC
- 填充方式:PKCS7
- 参数说明:
t:明文数据e:密钥i:初始化向量(IV)
4. 密钥与IV获取
4.1 查找密钥
- 在
1F03AD467F6C38AF7965C541D7123F76.js文件中查找key关键字 - 定位到实际的密钥和IV值
4.2 关键点
- 密钥和IV通常硬编码在JS文件中
- 可能通过字符串拼接或简单变换处理
- 需要完整跟踪变量赋值过程
5. 解密实战
5.1 解密流程
- 获取加密参数(从抓包数据)
- 使用找到的密钥和IV
- 调用解密函数或自行实现解密逻辑
5.2 解密实现
可以使用以下方法之一:
- 直接调用小程序解密函数
- 使用Python实现相同逻辑:
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
def decrypt(ciphertext, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = cipher.decrypt(base64.b64decode(ciphertext))
return unpad(decrypted, AES.block_size).decode('utf-8')
6. 后续渗透测试
成功解密参数后,可以:
- 分析参数结构和含义
- 尝试参数篡改和注入
- 进行常规的Web渗透测试
7. 防御建议
对于小程序开发者:
- 避免在前端硬编码密钥
- 使用更安全的通信方案
- 定期更新和检查安全措施
对于安全测试人员:
- 关注小程序与主站的差异
- 重视反编译和静态分析
- 完整跟踪加密解密流程