猿人学web端爬虫攻防大赛赛题第15题——备周则意怠-常见则不疑
解题步骤
1、观察抓的包
2、有个m
参数,一看就是经过处理的,我们得知道m
是如何组成的。看Initiator
模块。
3、还是看request
函数,往上一看就看到了m
的赋值操作。
打断点,触发。
4、看下window.m()
的定义
5、比较好理解的,t1
和t2
就是对时间戳做相应的处理,关键是window.q
函数,定位一下。
6、定位的一头雾水,啥也没有呀。回到刚刚的地方,发现它加载了/static/match/match15/main.wasm
文件,可能window.q
函数在文件里面定义的
先写代码获取/static/match/match15/main.wasm
文件的内容。
这里需要利用python的第三方库:pywasm
安装:
pip install pywasm==1.0.8
一开始安装pywasm库的时候没有指定版本,导致我的程序一直报错,后来指定版本为1.0.8后报错消失。
import pywasm
import requests
wasm_url = "https://match.yuanrenxue.cn/static/match/match15/main.wasm"
resp1 = requests.get(wasm_url)
with open("main.wasm", mode="wb") as file:file.write(resp1.content)
import pywasm
import requests
import time
import random
import math
wasm_url = "https://match.yuanrenxue.cn/static/match/match15/main.wasm"
resp1 = requests.get(wasm_url)
with open("main.wasm", mode="wb") as file:file.write(resp1.content)t1=int(time.time()/2)
t2=int(time.time()/2-math.floor(random.random()*(50)+1))
module = pywasm.load('./main.wasm')
result = module.exec('encode', [t1, t2])
m = "{}|{}|{}".format(result, t1, t2)
print(m)
# window.m = function (){
# t1 = parseInt(Date.parse(new Date())/1000/2);
# t2 = parseInt(Date.parse(new Date())/1000/2 - Math.floor(Math.random() * (50) + 1));
# return window.q(t1, t2).toString() + '|' + t1 + '|' + t2;
# };