🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。
前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:猿人学WEB题目专解 ,提供猿人学WEB题目总计20题的解题思路与方法,如有讲述错误,请不吝赐教。
想看往期历史文章,可以浏览此博文: 历史文章目录
,后续所有文章发布都会同步更新此博文~
题目网址
题目详情
让我们计算计算所有机票价格的 平均值 。
题目思路
首先肯定要打开开发者工具,刚上来就给了我们一个下马威,我们先不管他,刷新一下,加载出这个网页的资源:
然后再看这个下马威:无限 Debug + 控制台输出污染,然后每次点下蓝色小箭头,控制台就会输出一次错误。
先尝试选择一律不在此暂停,然后点蓝色小箭头,发现 Debug 虽然不会弹出了,然下方依旧会有错误输出:
这时候为了我们干净的控制台,我们选择直接把 console.error
给屏蔽了,加上这行代码:console.error = function(){}
,瞬间他就不输出了,我们可以安安静静的开始继续分析了。
在网络一栏中,可以很明显的看到第一页是 https://match.yuanrenxue.cn/api/match/1?m=XXX
,点击第二页出现 https://match.yuanrenxue.cn/api/match/1?page=2&m=XXX
,这下可以明白需要 page
页数和加密的参数 m
了,再看看载荷,m
是由两段参数组成的,左边未知,右边疑似时间戳,每次请求两边都会变,说明左边的很可能是由时间戳控制的,也有可能有随机数在里面。
点开启动器,查看请求调用堆栈:
很明显是由那个 request
方法发起的请求,点进去就看到了让人想放弃的代码:
很明显这段代码经过了Obfuscator混淆,正常人根本就难以看懂,一看给他的难度定义居然是简单,大家这里不要对自己的能力产生怀疑,看着难的,说明是第一次接触这个,多接触接触,就习惯了。
其实看到这已经可以猜出来了,这用的是 jQuery
框架,$['\x61\x6a\x61\x78']
这里就应该是 $['get']
方法,window['\x75\x72\x6c']
这里是请求的 url地址,猜都猜出来是 /api/match/1
了。![]
可能很少遇到,但是到了混淆这里,经常遇到,![]
就是 false
的意思(因为在JavaScript,[]
代表 true
),看这三元表达式就能看出来:
所以 _0xb89747
= _0x5d83a3
就是上面那个字典是请求的两个参数,第一个参数一看大致是当前时间戳 + 100000000,但是我们搜索第二个参数的方法名称 oo0O0
的时候,发现搜不到定义的地方!解个题变成侦探了,想找到函数的蛛丝马迹。
看一眼请求列表,经过排除,发现在请求前,唯一可以提供函数方法就是在页面本身,于是我们打开当前页面源代码,搜索这个函数,发现确实找的到:
function oo0O0(mw) {
window.b = '';
for (var i = 0, len = window.a.length; i < len; i++) {
console.log(window.a[i]);
window.b += String[document.e + document.g](window.a[i][document.f + document.h]() - i - window.c)
}
var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
var J = function(o, E) {
o = o - 0x0;
var N = U[o];