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