猿人学第一题比赛题目保姆级教程

水一篇,和大佬们的差距不是一丁点的大啊~~~~~

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就是下面转码计算出来的了

整体代码如下:

 

 

运行结果如下:

 

 

爬取结果如下:

 

posted @ 2020-10-26 18:37  黑山老道  阅读(1798)  评论(0编辑  收藏  举报