猿人学第一题比赛题目保姆级教程
水一篇,和大佬们的差距不是一丁点的大啊~~~~~
URL:http://match.yuanrenxue.com/match/1
就是计算所有费用的平均值。
F12,debugger出现
右键点击,选择箭头这个
接下来刷新,就可以跳过debugger了查看网络面板
明显的XHR请求
看一下请求参数
直接打上XHR断点,查看堆栈进行调试,不熟的话,推荐这个:https://www.cnblogs.com/ajaxlu/p/11855343.html
还有各偷懒的地方
直接点这个跳转,进去看到一长串,这行没法格式化,直接找在线js解析,或者创建html,把该删除的一删除
下方点击美化,然后看着点删除
然后就剩这么点了
下方点击美化,这下就看着很清爽了
建议下载个webstorm,随便搞个激活码,这里推荐:微信公众号 -- 前端码农仔,回复:获取webstorm激活码
webstorm新建js文件,把美化过的js代码放进去,Ctrl+Alt+L再次格式化代码,剩下的该手动的手动调下
差不多这样,然后最后一行加:
console.log(oo0O0())
缺啥补啥就行,下面的错误截图稍微记录下
干掉这行,顺带e,f,g,h,w()都干掉,就剩个dd(),一看就是调用嘛,那就是没扣的,接着去扣代码
还是刚才那个界面,Ctrl+F,输入dd(),然后把上面那个dd()函数扣下来
不太好复制,有点恼火啊
接着跑,又出错
这里加个window = {};
再跑,又错
加window.a,还是一样,在刚才的查看源码界面搜索 :window.a
你没看错就是这一长串,好好粘贴,不要偷懒搞错了,我就是这里马马虎虎的粘贴的,后面一直找错误
接着跑,又错
差不多就是这样吧,接着控制台输出下这个f和h
包括前面的e和g也都输出下
拼接起来你就看的出来这是js的方法
window.b += String.fromCharCode(window.a[i].charCodeAt() - i - window.c)
改写完就是这样,接着跑,又报错
atob这个函数可以去搜一下,js中base64转码的函数,在控制台输出下
window['b']其实就是一长段base64的代码,J('0x0', ']dQW')和J('0x1', 'GTu!')可以在webstorm中输出看一下
还有'\x27' + mw + '\x27'
就是把'mw'替换成了oo0O0(mwqqppz)
注意看下面,oo0O0(mwqqppz)也就是返回了一个空
那么也就是m = window.f
那这个window.f是哪里的值呢?
还记得刚才的window.b的转码吗,将控制台输出的那段base64的代码放在js在线解析的在线工具中美化查看下
最后一行,我们看到了window.f的操作,熟悉的mwqqppz,也就是说将oo0O0(timestamp.toString())传入hex_md5()中就出来了
将转码的这段代码复制下来,创建js文件
将window.f = hex_md5(mwqqppz)
修改为:
var timestamp=Date.parse(new Date()); f = hex_md5(timestamp.toString()) + "|" + timestamp/1000;; console.log(f)
就是和之前辛辛苦苦扣下来的代码没有关系了,然后运行,提一嘴,安装个node.js环境
这样就出来了,用python代码去执行这个js文件,再拿着结果去请求这个网站就可以了
第二种的话,你可以选择去修改之前扣下来的代码
细看之后发现这两行没啥用,那就干掉
关于这里,简单来说这个atob不行,那就换个方式去解码base64
m = eval((new Buffer.from(window['b'], 'base64').toString('utf8')).replace('mwqqppz', "'" + mw + "'")) return m + '丨'+timestamp / 1000
可以搜一下from和atob方法的解释哈
现在呢后面的时间戳已经出来了,然后我们把oo0O0()和dd()合并在一起
m呢就是mw,也就是mwqqppz,所以在dd()函数中定义下,list这个变量可以干掉,至于m我们已经重新在dd()中已经定义了
所以mw呢就是timestamp.toString(),window.f就是下面转码计算出来的了
整体代码如下:
运行结果如下:
爬取结果如下:
本文来自博客园,作者:黑山老道,转载请注明原文链接:https://www.cnblogs.com/meipu/p/13880075.html