https://match.yuanrenxue.com/match/2
加密方式为cookie中的m值
cookie的话直接进行hook即可。
Hook代码
油猴:
// ==UserScript==
// @name 一行
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://*/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
Object.defineProperty(document, 'cookie', {
set: function(val) {
debugger ;return val;
},
});
}
)();
其中@run-at
为设置注入时机
, 如果时机不对是捕捉不到m值的。
因为页面分为两次请求
第一次返回js代码
并设置cookie
,后面页面接口都带着第一次返回的cookie。
但是第一次页面中返回值为空。所以看不到hook不到cookie
。
油猴
中@run-at
设置为document-start
手动hook
时, 打上script断点标签
。到达生成cookie代码页
,在Console
中输入hook代码。关闭script断点即可。
// 代码
document[$dbsm_0x42c3(qqLQOq, iOiqII) + $dbsm_0x42c3(q1IoqQ, QQlLlq)] = _0x5500bb['\x4e\x74\x44' + '\x72\x43'](_0x5500bb[$dbsm_0x42c3(qqqQoq, oqQiiO) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(Ioo0ql, olq0Oq) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(qOIqQi, OOqIQi) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(Q1qoqQ, lILOOq) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(qOO1Q0, oiqlQQ) + '\x72\x44'](Ql1OO0, _0x5500bb['\x7a\x76\x67' + '\x6c\x77'](_0x3c9ca8)), Qoqq0I), _0x5500bb[$dbsm_0x42c3(iqOiQ0, QOiq0Q) + '\x47\x6b'](_0x313b78, _0x160e3a)), lOo0QQ), _0x160e3a), _0x5500bb[$dbsm_0x42c3(qiOOiO, liQIoQ) + '\x4e\x5a']),
// 得出简易看懂的cookie生成
document['cookie'] =
_0x5500bb['NtD' + 'rC']
(_0x5500bb['KGB' + 'me']
(_0x5500bb['KGB' + 'me']
(_0x5500bb['mQK' + 'rD']
(_0x5500bb['mQK' + 'rD']
(_0x5500bb['mQK' + 'rD']
(''), '='),
_0x5500bb['wWb' + 'Gk'](_0x313b78, _0x160e3a)), '|'), _0x160e3a),
'; path=/')
// 再次简化
_0x5500bb['wWb' + 'Gk'](_0x313b78, _0x160e3a))
// 控制台输入_0x5500bb['wWb' + 'Gk']发现调用的_0x313b78 参数为_0x160e3a, 即补全_0x313b78即可
_0x313b78
把_0x313b78
考下来缺啥补啥。
function _0xdad69f(_0x160e3a, _0x3818c5) {
if (_0x5500bb['\x4b\x4e\x71' + '\x5a\x49'](_0x5500bb['\x77\x4c\x4b' + '\x4a\x73'], _0x5500bb['\x77\x4c\x4b' + '\x4a\x73'])) {
document[$dbsm_0x42c3(qqLQOq, iOiqII) + $dbsm_0x42c3(q1IoqQ, QQlLlq)] = _0x5500bb['\x4e\x74\x44' + '\x72\x43'](_0x5500bb[$dbsm_0x42c3(qqqQoq, oqQiiO) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(Ioo0ql, olq0Oq) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(qOIqQi, OOqIQi) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(Q1qoqQ, lILOOq) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(qOO1Q0, oiqlQQ) + '\x72\x44'](Ql1OO0, _0x5500bb['\x7a\x76\x67' + '\x6c\x77'](_0x3c9ca8)), Qoqq0I), _0x5500bb[$dbsm_0x42c3(iqOiQ0, QOiq0Q) + '\x47\x6b'](_0x313b78, _0x160e3a)), lOo0QQ), _0x160e3a), _0x5500bb[$dbsm_0x42c3(qiOOiO, liQIoQ) + '\x4e\x5a']),
location[$dbsm_0x42c3(I0oIiq, OqoQOi) + $dbsm_0x42c3(qqqoQo, oq10Oo)]();
} else {
return debuggerProtection;
}
}
十六进制混淆
, 运行会导致一些问题, 如对象中函数对应的key乱码
情况 所以$dbsm_0x123c
应该进行解码
代码卡死
, 类似于sojson
, 正则判断是否格式化
, 这种直接对相应函数不进行格式化
即可, 也可在相应位置打上debugge
r进行分析跳过
console被重写
, 在测试过程使用console.log()报错
。此情况应该为代码逻辑中有代码将console重写
。在js文件首行将console进行赋值
使用即可。mylog = console
, 使用mylog.log()
即可太长不贴了