记一次某电网e充电小程序逆向

查看 88|回复 9
作者:cs850629238   
前言
e充电小程序逆向,其中涉及国密sm2 sm3 和魔改的sm4算法加密,主要为请求头的x-evone-signature加密
废话不多说  直接开整!!!!工具使用git上的开源工具WeChatOpenDevTools,懂得都懂,最后还望大佬赐教!!!!
一.分析请求
直接看出最重要的x-ex-ex-evone-signature字段  开始xhr断点-signaturevox-evone-signature:ne-signature:
x-evone-signaturex-evone-signature


1745508176290.png (134.22 KB, 下载次数: 0)
下载附件
1
2025-4-24 23:23 上传

查看断点处,发现请求头


1745508456425.png (314.65 KB, 下载次数: 0)
下载附件
2
2025-4-24 23:27 上传



1745508642721.png (301.29 KB, 下载次数: 0)
下载附件
3
2025-4-24 23:30 上传

继续网上走  会发现异步地方


image.png (268.15 KB, 下载次数: 0)
下载附件
4
2025-4-24 23:33 上传

细心的继续往下跟,注意每一步看请求头,知道我跟踪到这个地方


1745509184466.png (257.66 KB, 下载次数: 0)
下载附件
5
2025-4-24 23:40 上传

我直接搜索-ex-evone-signature,好  成功发现加密地方!!!!


1745509260479.png (207.23 KB, 下载次数: 0)
下载附件
6
2025-4-24 23:41 上传

打上断点!!!正片开始
二.解析加密sm3
先分析一些简单的请求头,设备id为固定值,请求id为随机数 具体可直接复制v函数生成


1745509526449.png (191.63 KB, 下载次数: 0)
下载附件
7
2025-4-24 23:45 上传

经过分析sm3为标准国密


image.png (282.94 KB, 下载次数: 0)
下载附件
8
2025-4-24 23:49 上传

上代码
[JavaScript] 纯文本查看 复制代码const sm3 = require('sm-crypto').sm3;
function get_evone_signature(json_data){
        json_data = { ’自行获取‘
}
        t = {
        "x-evone-auth-ticket": "",
        "x-evone-device": "1abd8fc0f61a44a2912194c9f8f8dad3",
        "x-evone-meta-appid": "ecdwx",
        "x-evone-version": "3.4.3",
        "x-evone-api": "1.0.0",
        "x-evone-request-id": get_request_id(),
        "x-evone-profile": "1",
        "x-evone-area": "360700",
        "x-evone-request-timeInterval": (new Date).getTime()
    }
        var a = (new Date).getTime();
        a;
        var n = a + "evone"
          , r = {
                "__strings__": [],
                append: function (e) {
                    this.__strings__.push(e)
                },
                toString: function () {
                    return this.__strings__.join("")
                }
            }
        var o = JSON.stringify(json_data)
        r.append("POST"),
        r.append("\n"),
        r.append("application/json;charset=UTF-8"),
        r.append("\n"),
        r.append(n),
        r.append("\n"),
        r.append(w(t)),
        r.append("\n");
        var s = Buffer.from(o).toString('base64')
          , i = sm3(s);
        r.append(i.toUpperCase()),
        r.append("\n"),
        r.append(a);
这里做了一连串的字符串拼接生成r,在这里可以发现这里有一个u的生成  怎么来的喃  走进去发现又一个国密  好家伙!!!


1745510227211.png (318.04 KB, 下载次数: 0)
下载附件
9
2025-4-24 23:57 上传

三.第二个国密sm2
寻找y函数,跟进来发现是一个sm2加密,经过分析其中的key为固定值  加密的是时间戳加上evone


1745510429385.png (128.47 KB, 下载次数: 0)
下载附件
10
2025-4-25 00:01 上传

盘它  上代码,直接拿过来
[JavaScript] 纯文本查看 复制代码function get2a() {
            return i.s2a1 + i.s2a2 + i.s2a3 + i.s2a4
        }
function y(e) {
    var t = get2a();
    // console.log(t);
    var n = doEncrypt(e, t);
    return "04".concat(n)
}
注意上面的sm2为标准加密可以直接换成sm2,楼主的doEncrypt是直接扒js的  因为当时怕它魔改  所以才扒下来的,你们可以用标准库里的  这里就不过多阐述了.......
重头戏来了  那就是最后一部分sm4魔改国密!!!!
四.sm4魔改国密
这部分本来想着是标准国密的,后来打脸了,可把楼主小白磨惨了,本坚持着就要干到底的精神  直接开整!!!!!
p是m函数  对上面拼接的r进行处理加密,跟踪
这里可以看出是sm4 cbc模式加密,而且经过分析key和iv为固定值


1745510921342.png (144.9 KB, 下载次数: 0)
下载附件
11
2025-4-25 00:08 上传



1745511029447.png (29.55 KB, 下载次数: 0)
下载附件
12
2025-4-25 00:10 上传



image.png (222.29 KB, 下载次数: 0)
下载附件
13
2025-4-25 00:12 上传

接下来就算全拉到本地,直接把整个加密体系拉下来到本地运行了,
其中还缺少一些函数 需要自己补,这个就不用多说了  相信现在通过人工智能  都可以很快补齐..........
最后的最后  忙活了大半天   最终还是返回的200响应码!但是一激动  一看没有数据返回   哭死.....................


image.png (128.11 KB, 下载次数: 0)
下载附件
14
2025-4-25 00:17 上传

经过我反复的检查json_data请求体和请求头的各个参数都没有问题   但是最终还是返回没有数据,要么就算json提交 返回401!!!!
最后的最后  附上代码   解密不易   本小白   还望大声能帮小弟   解一解  到底哪里出了问题!万分感谢 !!!!!
最终还是淹没了   没有一点头绪..............

encrpty_request.zip
(10.23 KB, 下载次数: 12)
2025-4-25 00:21 上传
点击文件名下载附件
15
下载积分: 吾爱币 -1 CB

下载次数, 下载附件

cs850629238
OP
  

如果确认参数什么的都没有问题,试一下
1. 在wx的浏览器中修改请求成代码生成的,看看请求是不是正常
2. 在wx浏览器中生成的参数使用代码提交,看看是不是正常
图上看不到你header有没有补全,目测如果算法是正确的话,
可能就是ja3甚至是ja4指纹
archspire   


涛之雨 发表于 2025-4-25 20:55
如果确认参数什么的都没有问题,试一下
1. 在wx的浏览器中修改请求成代码生成的,看看请求是不是正常
2.  ...

大佬 ! 我已经上传了代码   你可能帮忙看看不   里面的headers都补全了  甚至时间戳  什么的都补全了


局部截取_20250425_213802.png (86.7 KB, 下载次数: 0)
下载附件
2025-4-25 21:38 上传

cs850629238
OP
  

小程序版本是怎么回退的,我下了devtools支持的好几个版本的微信,小程序版本都是11581
675568   


archspire 发表于 2025-4-25 17:43
小程序版本是怎么回退的,我下了devtools支持的好几个版本的微信,小程序版本都是11581

直接修改版本  修改文件  你要是安装的版本是老板 一直11581   你可以直接修改小程序版本的文件  然后再启动
archspire   

好厉害 学习下大佬
cs850629238
OP
  


cs850629238 发表于 2025-4-25 18:18
直接修改版本  修改文件  你要是安装的版本是老板 一直11581   你可以直接修改小程序版本的文件  然后再 ...

光把11581这个文件名给改成以前版本号,再打开微信又给我生成个了11581
nitian0963   


archspire 发表于 2025-4-25 20:49
光把11581这个文件名给改成以前版本号,再打开微信又给我生成个了11581

多试几次  改完后 用工具打开  
hdws8   

好厉害 学习下大佬
hdws8   

厉害了,我的佬,学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部