解題步驟
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;
# };