猿人学第20题
1.老规矩打开开发者模式
2.查看参数发现,哎,发现sign

来看看怎么来的吧

好解决了,找到window.sign()

开始补环境,发现这个_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__函数打开后是来到了wasm这个文件中,既然来到了文件并且没有将加密参数传入其中
,我们可以把其返回值看成一个定值,同样去找到passStringToWasm这个函数后返回的也是定值,
所以,reptr,ptr0,len0,ro,r1都可以是定值,那么主要看_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"](retptr, ptr0, len0),咱们调试进去,发现wasm

这种文件在第15题的时候也遇到过,那么咱们采用原方法去把wasm文件保存再去调用发现会报错,在wasm文件中引用了其他文件,那咱们去试试调用看看wasm里面干了什么,一步一步断点发现里面适用了MD5加密,

到这一步的时候发现经过这个方法后,传进去的值变成了长度为31的值,那么我们去看看这个值是什么

控制台输出便拿到了值

import random import time import base64 import execjs import pywasm import requests from hashlib import md5 def get_sign(page, t): sign = md5() sign.update(f"{page}|{t}D#uqGdcw41pWeNXm".encode("utf-8")) return sign.hexdigest() def get_data(page): headers = { # 'accept': 'application/json, text/javascript, */*; q=0.01', 'accept-encoding': 'gzip, deflate, br', # 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', # 'pragma': 'no-cache', 'referer': 'https://match.yuanrenxue.cn/match/13', # 'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"', 'sec-ch-ua-mobile': '?0', # 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', # 'sec-fetch-site': 'same-origin', # 'x-requested-with': 'XMLHttpRequest', "User-Agent": "yuanrenxue.project" } cookies = { "sessionid": "", } url = f"https://match.yuanrenxue.cn/api/match/20" t = int(time.time()) * 1000 params = { "page": page, "sign": get_sign(page, t), "t": t } resp = requests.get(headers=headers, url=url, params=params, cookies=cookies) print(resp.text) return [dict(i)["value"] for i in resp.json()["data"]] def run(): s = [] for page in range(1, 6): s += get_data(page) print(sum(s)) if __name__ == '__main__': run()

浙公网安备 33010602011771号