-
-
[转帖]【银行逆向百例】04小程序逆向之腾讯VMP加固静态分析+Yakit Codec模块编写
-
发表于: 2025-6-3 10:17 183
-
“ 这是一场试炼 ”
01
—
环境版本
环境:
电脑,Windows 11 专业版 23H2
软件:
微信,Windows 3.9.12.51
unveilr,2.0.1
vscode,1.98.2
02
—
操作步骤
1、使用yakit抓包发现请求加密,多次刷新值不变化
773K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2&6j5h3E0D9j5h3&6Y4i4K6u0W2j5$3!0E0i4K6u0r3
2、微信设置-打开文件夹获取路径
3、删掉目录下全部文件
C:\Users\zhangsan\Documents\WeChat Files\Applet
4、刷新小程序,使用unveilr反编译目标__APP__.wxapkg
5、vscode查看反编译后的__APP__
dfeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8$3c8W2i4K6u0W2N6X3W2K6N6h3q4D9M7%4c8#2k6r3W2G2i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0%4L8X3I4G2j5h3b7`.
03
—
请求加密
6、搜索encryptData关键字,
encryptData=a,a与AesEncrypt有关
{ key: "getRequest", value: function (e) { var a = l.AesEncrypt(JSON.stringify(e)); return { encryptData: a, sign: l.SHA256(a + t.default.AESKEY), tranCode: "00000", version: "v1", }; }, },
7、搜索AesEncrypt关键字,发现key和iv与n.default有关
{ key: "AesEncrypt", value: function (e) { var t = a.enc.Utf8.parse(e); return a.AES.encrypt(t, a.enc.Base64.parse(n.default.AESKEY), { iv: a.enc.Base64.parse(n.default.AESIV), mode: a.mode.CBC, padding: a.pad.Pkcs7, }).ciphertext.toString(a.enc.Base64); }, },
8、搜索n =,发现n与外部文件966.js有关
9、进入966.js,发现关键字
__TENCENT_CHAOS_VM,判断为腾讯加固混淆VMP
10、搜索AESKEY关键字,发现创建了一个对象,存放AESKEY 和AESIV
11、所有对象值都混淆编码放在了一个字符串中,包括AESKEY 和AESIV
12、创建1.js文件,将966.js放在同级目录下,运行后发现输出了AESKEY和AESIV
const config = require('./966.js');console.log(config.default);
13、将AESKEY和AESIV填入Yakit的Codec模块中,成功解密
14、新建一个AES对称加密模块,并保存为encryptData
04
—
请求加签
15、搜索sign关键字,拼接
encryptData+AESKEY,然后SHA256进行哈希
a = encryptData = l.AesEncrypt(JSON.stringify(data)),t.default.AESKEY =s92xxx
16、编写用于签名的Codec模块,在加密的基础后插入临时Codec插件用于拼接AESKEY
// codec plugin /* Codec Plugin 可以支持在 Codec 中自定义编码解码,自定义 Bypass 与字符串处理函数 函数定义非常简单 func(i: string) string */ handle = func(origin /*string*/) { // AESKEY 的 Base64 编码字符串 var AESKEY_b64 = ""; // 拼接 origin 和 AESKEY_b64 return origin + AESKEY_b64; }
17、再插入SHA256,输出结果与数据包一致,保存为sign模块
05
—
测试效果
18、创建临时字典,格式为13步解密得到的明文手机号
19、不修改sign的情况下,设置14步保存的Codec模块encryptData自动加密发包,提示请求报文验签失败
"encryptData": "{{codecflow(encryptData|{{file:line(D:\Tools\Setup\Yakit\yakit-projects\temp\tmp1515337536.txt)}})}}",
20、设置17步保存的Codec模块sign自动签名发包,返回第一步正常抓包一致返回结果,加密签名成功绕过
赞赏
- [原创]【银行逆向百例】09小程序逆向之禁用调试模式+动态密钥+JsRpc+Yakit hijackSaveHTTPFlow热加载 68
- [原创]【银行逆向百例】08小程序逆向之JsRpc+Yakit hijackSaveHTTPFlow热加载实现明文流量显示 277
- [原创]【银行逆向百例】07小程序逆向之微信开发者工具反编译修复分包内容缺失+登录失败openid替换 193
- [转帖]【银行逆向百例】06小程序逆向之WeChatOpenDevTools-Python开启Devtools+跟踪调用堆栈 112
- [转帖]【银行逆向百例】05小程序逆向之微信开发者工具反编译修复插件未授权+WXSS+WXML格式错误 87