猿人学第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()

 

posted @ 2023-08-08 15:49  hy-f  阅读(106)  评论(0)    收藏  举报