1. 链接

https://match.yuanrenxue.cn/match/15

2. 抓包分析

2.1. 请求分析

只有一个m值参数

这里直接选择跟栈:

往上面一看,这就是我们想要的值:

3. 逆向分析

3.1. window.q

这个window.q有点意思,一点进去,发现是这样的!

其实这就是wasm!

3.2. wasm

什么是wasm?

WASM(WebAssembly) 是一种在浏览器中运行的 高性能、低级别的二进制代码格式,它让你可以用如 C/C++、Rust 等语言编写程序,然后编译后在网页上运行,就像 JavaScript 一样。

WASM 是让“非 JavaScript 语言”也能跑在网页上的技术,而且跑得还很快!

那么这种该如何做呢?

一般流程是:找到wasm文件,然后通过python的pywasm模块去加载这个wasm模块,然后调用里面的函数:

下载下来:

然后调用它,可以看到上面的window.q调用的是wasm里面的encode方法:

# 初始化 Runtime 实例
runtime = pywasm.core.Runtime()

# 加载并实例化 WebAssembly 模块
m = runtime.instance_from_file('main.wasm')

# 调用 WebAssembly 模块中的函数 'encrypt',传入参数 [100, 30]
r = runtime.invocate(m, 'encode', [t1, t2])

res = r[0]
# 打印结果
print("结果:", res)  # 输出应该是计算的结果

4. 完整代码

import base64
import math
import random
import re
import time

import httpx
import pywasm
import requests

from CoreUtils.ua import get_random_ua
from CoreUtils.Encrypt import md5_encrypt
import execjs


def get_m():
    t1 = int(time.time() // 2)
    t2 = t1 - random.randint(1, 50)

    # print(tt)

    # 设置日志级别(可选,调试使用)
    pywasm.log.lvl = 0

    # 初始化 Runtime 实例
    runtime = pywasm.core.Runtime()

    # 加载并实例化 WebAssembly 模块
    m = runtime.instance_from_file('main.wasm')

    # 调用 WebAssembly 模块中的函数 'encrypt',传入参数 [100, 30]
    r = runtime.invocate(m, 'encode', [t1, t2])

    res = r[0]
    # 打印结果
    print("结果:", res)  # 输出应该是计算的结果
    m = f"{res}|{t1}|{t2}"
    return m


def get_resp(page):
    ua = get_random_ua()  # 假设你有这个函数
    tt = str(int(time.time()) * 1000)

    cookies = {
        'sessionid': '10zwpnj1ljclbht04s41inzgtnpntrzt',
        'Hm_lvt_c99546cf032aaa5a679230de9a95c7db': '1746770541,1746776721,1746846259,1746860209',
        'qpfccr': 'true',
        'no-alert3': 'true',
        'tk': '8683284781106509632',
        'Hm_lvt_9bcbda9cbf86757998a2339a0437208e': '1746770631,1746776739,1746846273,1746860215',
        'Hm_lpvt_9bcbda9cbf86757998a2339a0437208e': '1746865984',
        'Hm_lpvt_c99546cf032aaa5a679230de9a95c7db': '1746866000',
    }

    headers = {
        'accept': 'application/json, text/javascript, */*; q=0.01',
        'accept-language': 'zh-CN,zh;q=0.9',
        'cache-control': 'no-cache',
        'pragma': 'no-cache',
        'priority': 'u=0, i',
        'referer': 'https://match.yuanrenxue.cn/match/15',
        'sec-ch-ua': '"Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-origin',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36',
        'x-requested-with': 'XMLHttpRequest',
        # 'cookie': 'sessionid=10zwpnj1ljclbht04s41inzgtnpntrzt; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1746770541,1746776721,1746846259,1746860209; qpfccr=true; no-alert3=true; tk=8683284781106509632; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1746770631,1746776739,1746846273,1746860215; yuanrenxue_cookie=1746865017|eTaV5AJKegKnKYfGQkZBz0IkEQ1Al6yot92jsrkkRDN5Z1Ffyuym4y2EChtU4GXz5KCxO8pTHSHIQHgbHlpjEUZr05GUF8FdiA80; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1746865984; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1746866000',
    }

    m = get_m()

    params = {
        'm': m,
        'page': page,
    }

    response = requests.get('https://match.yuanrenxue.cn/api/match/15', params=params, cookies=cookies, headers=headers)

    print(response.json())

    return response.json()


def parse_data(data):
    nums = data['data']
    res = []
    for i in nums:
        res.append(i['value'])
    return res


if __name__ == '__main__':
    res = []
    session = requests.Session()
    for i in range(1, 6):
        data = get_resp(str(i))
        nums = parse_data(data)
        res.extend(nums)

    print(sum(res))
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐