上一期我们拿到了源码,这一期重点解决“源码有了,但加密函数看不懂、key藏在哪里”的问题。通过抓包 + 动态 Hook,我们可以直接在运行时打印出明文参数、key、iv 等核心信息。
| 工具 | 用途 | 安装 / 下载方式 | 备注 |
|---|---|---|---|
| HttpCanary | 安卓抓包 | Google Play / apkpure | 真机首选 |
| PC Fiddler / Charles | PC 微信抓包 | 官网 | 需证书信任 |
| mitmproxy | 命令行抓包 | pip install mitmproxy | 高级 |
| Frida | 动态 Hook | pip install frida-tools | 核心 |
| frida-server | 手机端 | github releases | 架构需匹配 |
| r0capture | 内存明文 | github | 兜底方案 |
/data/local/tmp/chmod 755 frida-server && ./frida-server &frida-ps -U 验证console.log("[*] Hook WeChat MiniApp");
Java.perform(function () {
// AES
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.doFinal.overload('[B').implementation = function (input) {
console.log("[AES 明文]", Java.use("java.lang.String").$new(input));
return this.doFinal(input);
};
// MD5 / SHA
var MessageDigest = Java.use("java.security.MessageDigest");
MessageDigest.update.overload('[B').implementation = function (b) {
console.log("[Digest 输入]", b);
return this.update(b);
};
});
启动:
frida -U -f com.tencent.mm -l hook.js --no-pause
操作流程:
示例输出:
[AES 明文] {"phone":"13800000000","code":"123456"}
[AES key ] 0123456789abcdef0123456789abcdef
[AES iv ] fedcba9876543210
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Frida 闪退 | server 不匹配 | 换版本 |
| 无输出 | Hook 点不对 | Hook JSON / String |
| 证书抓不到 | Pinning | JustTrustMe |
| 被检测 Root | 反调试 | Magisk + Shamiko |
from Crypto.Cipher import AES
import base64, json
key = b'0123456789abcdef0123456789abcdef'
iv = b'fedcba9876543210'
cipher = AES.new(key, AES.MODE_CBC, iv)
plain = cipher.decrypt(base64.b64decode("U2FsdGVkX1+..."))
print(plain)
import requests
payload = encrypt(
{"phone":"13800000000","code":"123456"},
key, iv
)
r = requests.post(
"https://api.example.com/login",
json={"data": payload}
)
print(r.text)
下一篇:
👉 高级工具链 & 自动化解密流水线