某团mtgsig1.1 && H5guard加密算法剖析

仅供研究学习使用。
今天带来的是某团headers中mtgsig参数的逆向。
目标站:商家后台登陆 --> 传送门
目前大部分h5的算法都更新至1.2了 只有商家版后台还多为1.1的。


废话不多说直接开干

在这里插入图片描述

mtgsig: {"a1":"1.1","a2":1741916388817,"a3":"z0u89y82y7xw599w021x55v507v835448057y35v7uw9795864z8z9zu","a5":"Th0orxZzYh0ZXe+pBUBrPj+76C/HwcrP","a6":"h1.5z8Lbkh4D/SJax6K/k+Zd9u+3R4tPZU3wbPUHiGt/LyvmIf/fUTjT3yqkuOjCpsY7HzaCmgkUvrWOaiSyB/Rpz166brpcXHldVTwITgaT47mFCZCtQerceGUDaFEU2Dp7dECDUFJjS3UFV0A81ULHxY2ZwrOvOasJZo+K+ht4ftU0B2MxsfeFQxKhH2jVswdorFMpx7yAXHT4qvGC19d5RXEcNMv/YD6Ar4j2dozKkjED2isCXXDSmnTFejxYJ1OHatJaeoyBUynvqQTJvnTW9APzB81UWQq7MUx36uaaCjoiuvMCJYMkJg96JwSheMRB38a36cOnLa7oE0LQksGOwApM+N420Xkyxw2a89mh4SNqXGKeNeTjJAWf5in4+HVC7L39K56s1gpHnsPl1H9PQA==","x0":4,"d1":"44339d845fc1562ef39a80651bf2cbae"}

这里抓包后可以清晰看到 mtgsig明显是一个加密参数,根据经验先瞄一眼a1 a2 …a6
其中
a1: 版本号
a2: 时间戳
a3: cookie相关
a5: 未知
a6:未知
x0:固定值
d1: 未知字符串取md5


这里先从js入手 可以从network中看到

在这里插入图片描述
在这里插入图片描述

这里看到整个js是一个自运行函数 其中算法部分基本上都是混淆加密了 且有控制流在里面

在这里插入图片描述

控制台打印可以看到 window.H5guard这个被赋值了 所以这里我们就可以考虑利用补环境来完成。

这里贴一部分需要检测的环境

const jsdom = require("jsdom");
const {JSDOM} = jsdom;
const dom = new JSDOM("<!DOCTYPE html><p>Hello world</p>", {
    url: ["https://h5.waimai.meituan.com/waimai/mindex/home", "https://verify.meituan.com/v2/web/general_page"],
    runScripts: 'dangerously',
    resources: 'usable',
    fetchOptions: {
        credentials: 'include'
    },
})
const {
    performance, PerformanceObserver,
} = require('perf_hooks');
 
window = dom.window;
Window = dom.window;
self = window.self
document = window.document
navigator = window.navigator = {}
Navigator = window.Navigator = {}
navigator['userAgent'] = ''
location = window.location
sessionStorage = window.sessionStorage
XMLHttpRequest = window.XMLHttpRequest;
document.cookie = ''
screen = {
    "availWidth": 391,
    "availHeight": 855,
    "width": 391,
    "height": 855,
    "colorDepth": 24,
    "pixelDepth": 24,
    "availLeft": 0,
    "availTop": 0,
    "orientation": {},
    "onchange": null,
    "isExtended": false
}
 
location = {
    "ancestorOrigins": {},
    "href": "",
    "origin": "https://h5.waimai.meituan.com",
    "protocol": "https:",
    "host": "h5.waimai.meituan.com",
    "hostname": "h5.waimai.meituan.com",
    "port": "",
    "pathname": "/waimai/mindex/home",
    "search": "",
    "hash": ""
}

实际上也可以自己把代码拷下来在nodejs里面运行 缺什么补什么即可

setInterval = function(){
    return this
}

还有最好再重写一下setInterval方法 因为不重写可能程序不会自己终止。


接下来就是找明文的入参了

在这里插入图片描述

从这里跟进去就可以看到了

在这里插入图片描述

我们直接把hO的各项值复制下来 拿到nodejs里面去跑

在这里插入图片描述

这里可以看到 能够出值 但是这个a3明显不是我们想要的 浏览器上是纯字符串 而我们拿到的是时间戳+字符串格式

所以这里返回到第一步 我们看看H5guard.js的启动器

在这里插入图片描述

我们拷贝下来放到nodejs里面 先做一个init处理后再进行调用

在这里插入图片描述

至此逆向部分就结束了 我们拿到python中做校验

在这里插入图片描述

Ending

Github传送门

持续更新ing (欢迎各种star与fork)

如有权益问题可以发私信联系我删除

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值