微信小程序逆向的核心目标通常是:拿到源码 → 看懂页面结构 → 找到网络请求逻辑 → 分析加密/签名算法。本文针对零基础读者,从最基础的操作开始,一步一步带你完成第一次完整逆向。
重要声明:本文内容仅供学习研究、合法安全测试使用。任何用于商业竞争、黑产、侵犯用户隐私的行为均属违法,请严格遵守法律法规。
(原内容保持不变)
(原内容保持不变)
关键认知升级:
HTTPS ≠ 参数不可逆
你现在要学会的是:识别“业务层加密”,而不是去解 HTTPS
使用 Charles / Proxyman 抓包后,新手通常会看到两种情况:
✅ 情况 A:明文 JSON(低安全)
{
"phone": "138****8888",
"code": "123456"
}
✅ 情况 B:明显的业务加密(高频)
{
"data": "U2FsdGVkX1+9X6l0d7Y8W...",
"sign": "a8f1c3e9..."
}
👉 看到长 Base64 / Hex 字符串,99% 是 AES / DES / SM4
打开 app-service.js,按顺序搜索:
encrypt
AES
CryptoJS
md5
sha1
sha256
sign
新手最常见的加密函数长这样:
function encryptData(data) {
const key = getKey()
return CryptoJS.AES.encrypt(
JSON.stringify(data),
key,
{ mode: CryptoJS.mode.CBC }
).toString()
}
✅ 判断要点:
wx.request 前调用哪怕你暂时不会 Hook,也可以先验证算法正确性。
const CryptoJS = require('crypto-js')
const cipher = 'U2FsdGVkX1+9X6l0...'
const key = 'testkey12345678'
const bytes = CryptoJS.AES.decrypt(cipher, key)
console.log(bytes.toString(CryptoJS.enc.Utf8))
如果能还原 JSON,说明:
✅ 算法确认
✅ 模式确认
✅ 参数结构确认
剩下的只是“key 从哪里来”
❌ 不需要 Root
❌ 不需要 Frida
❌ 不需要 Hook HTTPS
❌ 不需要破解 TLS
你现在的目标只有一个:
能看懂:哪些参数是业务加密,哪些函数负责加密
下一篇文章我们将进入 Frida Hook 阶段,
你将第一次在真机上看到:
👉 “加密前的明文,是如何被直接打印出来的”