首页
社区
课程
招聘
[转帖]【银行逆向百例】04小程序逆向之腾讯VMP加固静态分析+Yakit Codec模块编写
发表于: 2025-6-3 10:17 183

[转帖]【银行逆向百例】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自动签名发包,返回第一步正常抓包一致返回结果,加密签名成功绕过

                    图片




                    [培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

                    收藏
                    免费 0
                    支持
                    分享
                    最新回复 (0)
                    游客
                    登录 | 注册 方可回帖
                    返回