网页链接: http://match.yuanrenxue.com/match/5
1 首先分析url,可以看到m参数像一个时间戳,我们把它进行时间戳转换,我们可以发现转换后的时间跟当前时间一致,至于后面的f参数多次分析后发现它跟m的关系是:f是m参数减去1000后把后面三位数置为0
2 url分析完后我们接着分析cookie.cookie有两个参数m跟RM4hZBv0dDon443M,用常规思维去搜搜发现根本搜不到.
3 既然搜不到,那我们就hook下.如图一通过hook我们发现函数 = ‘R’ + ‘M’ + ‘4’ + ‘h’ + ‘Z’ + ‘B’ + ‘v’ + ‘0’ + ‘d’ + ‘D’ + ‘o’ + ‘n’ + ‘4’ + ‘4’ + ‘3’ + ‘M=’ + _0x4e96b4[’_ss’] + ‘;\x20path=/’;分下这个函数我们知道RM4hZBv0dDon443M是由_0x4e96b4['ss’]生成,那么我们接着hook 下$ss(直接搜搜不到)
```javascript
// 关闭频繁日志打印
(function(){
console._log = console.log
var _log = function(arg){
}
Object.defineProperty(console, 'log', {value: _log})
})();
// hook关键参数RM4hZBv0dDon443M
(function(){
'use strict';
Object.defineProperty(document, 'cookie', {
set: function(cookie) {
if (cookie.indexOf('RM4hZBv0dDon443M') != -1){
debugger;
}
return cookie;
},
});
})();
图一
4 hook到如图二所示的位置
// hook下_$ss
(function(){
'use strict';
Object.defineProperty(window, '_$ss', {
set: function(val) {
debugger;
console.warn('hook_key', val)
return val;
},
});
})();
图二
5 我们将混淆代码替换后结果如下,分析这段代码我们可以看出要得到_0x4e96b4[“KaTeX parse error: Expected group after '_' at position 21: …须先解决_0x4e96b4['_̲pr’]跟_0x4e96b4["$qF”]
_$Ww = _$Tk["enc"]["Utf8"]["parse"](_0x4e96b4['_$pr']["toString"]()),
_0x29dd83 = _$Tk["AES"]["encrypt"](_$Ww, _0x4e96b4["_$qF"], {
'mode': _$Tk["mode"]["ECB"],
'padding': _$Tk["pad"]["Pkcs7"]
}),
_0x4e96b4["_$ss"] = _0x29dd83["toString"]();
6 先来分析_pr,一共有7处,我们都打上断点.通过断点调试我们可以发现_0x4e96b4[’_$pr’]是一个数组,每次向数组中添加由函数_0x474032生成的结果,参数为时间戳
7 接下来我们只要分析出_0x474032生成流程即可,整过过程就是一步步断点就不用继续分析了
// 分析加密前后
(function(){
var new_g = _0x474032;
_0x474032 = function(e){
var retval = new_g();
console.log("加密前的时间戳为", e, "加密后的时间戳为", retval)
return retval;
}
})();
视频分析可参考B站上大佬的分析,链接