第2题
分析和hook cookie
前面就不多赘述,cookie的关键参数是m 然后hook住,不会的百度,我这边用fildder,hook代码
(function () {
'use strict';
var cookieTemp = '';
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('m') != -1) {
debugger;
}
console.log('Hook捕获到cookie设置->', val);
cookieTemp = val;
return val;
},
get: function () {
return cookieTemp;
},
});
})();
回溯扣代码
通过hook右边堆栈上一步就是cookie,然后把后面核心代码拿出来,只要m= 后面那部分 _0x45cda2[$dbsm_0x1c35('\x30\x78\x34\x34\x33', '\x33\x69\x57\x66') + '\x6e\x70'](_0x4e1677, _0x1c63fe) + '\x7c' + _0x1c63fe
,然后把多余函数不要了改成手动加起来 一个中文竖线和时间戳
把扣下来的代码在改写一下,第一个函数其实是接受两个参数,第一个作为函数第二个作为参数,参数是时间戳改写完代码 m = _0x4e1677(time) + '|' + time
然后开始扣这个_0x4e1677函数
真正的开始
最好先把代码全部都复制下来保存到本地文件然后格式化,方便好找代码,而且网站卡了刷新之后变量名会变,后面扣起来更加麻烦。也可以替换文件使得代码永远不变而且还可以自己在里面打debugger后面再说。
保存本地或者浏览器搜索然后扣代码,扣一个就运行,少什么补什么 时间戳time = Date['parse'](new Date())
然后这里说 $dbsm_0x1c35
未定义,然后继续搜索,这里这个函数会用到上面那个大数组,所以一起扣下来,中间这个匿名函数也要一起拿下来
然后这里运行报下面这个错,好像是什么格式化检测的(更改源代码中正则检测部分应该也行暂时没试),最快最好就是我们也压缩代码,用工具或者百度在线压缩都可以压缩我们扣下来的就好,然后继续扣,这里_0x45cda2被赋值为_0x389b71,而_0x389b71在上面被定义并赋予了很多函数,反正都用得上,就先全部扣了,报错后面再解决,不然这么多等下一个一个扣麻烦,不建议。从他被定义开始一直扣 var _0x389b71 = {};
后面就是报那个函数没定义就扣哪一个。或者说其实你扣着扣着发现其实下面中间这些函数都用得上,也可以全部拿走,注意中间有一行不是函数不知道用不用得上先不要扣,没用上的pycharm也会提示可以删掉
然后运行发现卡了,不动了啥的,压缩一下,然后会报一个函数未定义,继续回去扣,扣完运行报navigator未定义,直接在前面定义为空{} 就行,看后面报什么错补什么,这一题其实都没有用上
history未定义
然后最关键的来了,这里我参考了别人的博客,找了好久。报这个history,然后补环境也没有用,全局搜索也没有这个history关键字,还报在第六行之前都没事。就很迷,看下面是一个eval虚拟机在捣鬼
全局搜这个eval,只有一个匹配,不用怀疑,就是他在捣的鬼,因为这里压缩过了,不过看这一行开头就行,他是属于这个_0x1bf552函数,可以吧这个函数重新格式一下,然后直接给这一行给他删掉,重新扣获取
最后大功告成,也可以把时间戳写死然后和请求那里对比一下是不是一样的。
写在最后
其实代码里面还有一些坑,只不过这样子扣这个代码没有走进去。比如里面有try语句里面有global,浏览器没有global那么就肯定会被catch给捕获之类的。有兴趣的可以自己去找一写环境检测的题来做。
还有一点就是前面提到的对这个文件进行替换,避免他变量名总是改变的问题;这里我用的是fiddler,这里先抓包,然后看到响应体里面都是js代码,两个就是片段,上面是我hook的下面是服务器真正返回的。可以把这个文件保存本地,通过fiddler保存或者手动复制粘贴都行,是一个html文件。这里我hook用的编程猫,然后替换是旁边那个选项。
然后设置替换的url和选择本地文件,保存,就完成了,不过这里面都是压缩的,要打断点可以自己通过搜索然后在后面打debugger最好还是不要格式化文件。
最后有什么问题或者网站更新的,请在评论区留言哦。