https://match.yuanrenxue.cn/match/2https://match.yuanrenxue.cn/match/2
一、反debugger
打开f12刷新网页来到一个无限debugger,往上跟一步发现是一个构造器生成的debugger,那就直接用油猴hookdeconstructor,轻松跳过debugger。
// ==UserScript==
// @name hookdebugger
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://match.yuanrenxue.cn/match/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=yuanrenxue.cn
// @grant none
// @run-at document-start
// ==/UserScript==
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function() {
if(arguments && typeof arguments[0]==='string'){
if(arguments[0].indexOf("debugger")!=-1){
return function(){}
}
}
return Function.prototype.__constructor_back.apply(this,arguments);
}
二、逆向点分析
标题为混淆动态cookie,那肯定与cookie有关,清除cookie翻页对比cookie,可以看出cookie里的m值在变化,那就是它了。
三、cookie:m值逆向
逆向cookie,那太好办了,直接油猴hookcookie。
// ==UserScript==
// @name Hook Cookie
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @include https://match.yuanrenxue.cn/match/2
// @grant none
// @run-at document-start
// ==/UserScript==
(function () {
let cookieCache = "";
Object.defineProperty(document, "cookie", {
set: function (val) {
console.log("Hook set cookie => ", val);
if (val.indexOf("m=") !== -1) {
debugger;
}
cookieCache = val;
return val;
},
get: function () {
return cookieCache;
}
});
})();
开开心心的来hookcookie,结果。。。
网页一直在跳转,这个1023593还一直在增加,怎么回事,卡死了!看来hookcookie暂时没法用了。
接下来分析下网络发包情况,重开浏览器,关掉hookcookie,清空网络包,删除cookie里的m键值,刷新网页,观察发包情况发现第一个‘2’不包含cookie的m值,第二个‘2’包就有m值,会不会是第一包定义了m值,但是第一个‘2’包的响应数据看不到。
用fidder抓包或者python请求可以发现其返回的是一个混淆的js代码。用猿人学的采集工具解混淆看看,简单的读下代码。
,重点是中间的这个自执行函数。搜document(ob混淆一般无法混淆window、document之类的环境),就一处,在最后,简单的读下最后几行就会明白,原来是设置了cookie.m后重新加载页面,怪不得发了再次‘2’包。
至此逆向位置找到,开始调试代码。(先把这重载页面的location["reload"]()删除。)
可以看出后三个节点是两个函数,一个函数调用,正是生成m值得地方,把这三个代码扣下来缺啥补啥。
如果补上缺的函数后调试出现卡死情况,一般都是进行了格式监测,直接把刚补的函数进行代码压缩后再补进来。在线 JS/CSS/HTML 压缩OSCHINA.NET在线工具,ostools为开发设计人员提供在线工具,提供jsbin在线 CSS、JS 调试,在线 Java API文档,在线 PHP API文档,在线 Node.js API文档,Less CSS编译器,MarkDown编译器等其他在线工具https://tool.oschina.net/jscompress
全部补完代码和环境后,没有报错,但是打印生成的m值,却卡死来,那不用想肯定是改写了console.log,那就在开始定义个变量接收console.log,比如console_log=console.log,用console_log(cookie_m),来打印m,轻松拿到数据,剩下的就是py调用了。
整体来说其实这题还是比较简单的,一个反调试debugger,还有个反hook_cookie,的,然后就是一个ob混淆的js代码。搞定了这些,剩下的就是扣代码缺什么补什么了,补代码的过程中,有个格式校验,还有个重写来console.log,这都是小问题。