当前位置: 首页 > article >正文

【简单】 猿人学web第一届 第15题 备周则意怠,常见则不疑

数据接口分析

数据接口 https://match.yuanrenxue.cn/api/match/15
请求时需要携带 page 页码,m为加密参数
cookie中没有加密信息,携带 SessionId请求即可在这里插入图片描述

加密参数还原

查看数据接口对应的 requests 栈
在这里插入图片描述
m参数 是通过 window.m() 方法执行后得到的
在这里插入图片描述

打上断点,查看 window.m() 方法执行了什么

instance = results.instance;
window.q = instance.exports.encode;
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;
};

window.q = instance.exports.encode;

在这里插入图片描述

window.q 是请求 wasm 文件编译成的,可以在 python 调用 wasm 文件

# 首先将 wasm 二进制的文件保存到本地
import requests
response = requests.get('https://match.yuanrenxue.cn/static/match/match15/main.wasm').content
open('15.wasm', 'wb').write(response)

调用

def get_m():
    t1 = int((int(time.time()) * 1000) / 1000 / 2)
    t2 = int((int(time.time()) * 1000) / 1000 / 2 - random.randint(10, 60))
    result = pywasm.load('15.wasm')
    results = result.exec("encode", [t1, t2])
    return f'{results}|{t1}|{t2}'

python 代码

import requests
import pywasm
import random
import time

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
}
cookies = {
    "sessionid": "你的sessionId",
}


def get_m():
    t1 = int((int(time.time()) * 1000) / 1000 / 2)
    t2 = int((int(time.time()) * 1000) / 1000 / 2 - random.randint(10, 60))
    result = pywasm.load('15.wasm')
    results = result.exec("encode", [t1, t2])
    return f'{results}|{t1}|{t2}'


def get_math15(page):
    url = "https://match.yuanrenxue.cn/api/match/15"
    params = {
        "m": get_m(),
        "page": f"{page}"
    }
    response = requests.get(url, headers=headers, cookies=cookies, params=params)
    return response.json()['data']


if __name__ == '__main__':
    nums = 0
    for page_ in range(1, 6):
        nums_list = get_math15(page_)
        for num in nums_list:
            nums += num['value']
        print('page: ', page_, 'nums: ', nums)

http://www.kler.cn/a/294446.html

相关文章:

  • sql专题 之 sql的执行顺序
  • git之 revert和rebase
  • Linux下useradd 和 adduser的区别
  • MIT 6.S081 Lab1: Xv6 and Unix utilities翻译
  • 【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)
  • ‌在生产环境中,需要屏蔽以下PHP功能以增强安全性‌:
  • javaWeb【day03】---(Vue-Element)
  • python | 字符串字母大小写转换方法
  • HalconDotNet中的图像特征与提取详解
  • MATLAB算法实战应用案例精讲-【人工智能】数据元(概念篇)
  • 力扣 739. 每日温度【经典单调栈题目】
  • PyQt-Server服务器
  • 构建现代前端应用的利器:深入解析Webpack与Vite的差异与优势
  • 电脑WLan无线网连上没网络的问题解决方法
  • iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)
  • vue2结合element-ui使用tsx格式实现formily自定义组件
  • 匹配电子邮件地址的正则表达式
  • 人生苦短我用Python Excel文件基本操作
  • 【60天备战软考高级系统架构设计师——第九天:面向对象设计原则】
  • [SUCTF 2018]annonymous1
  • 移动UI:成就勋章页面该如何设计,用例子说明。
  • 大数据决策分析平台建设方案(56页PPT)
  • SpringBoot2:请求处理原理分析-RESTFUL风格接口
  • 交换机自动化备份配置(H3C_无人值守)
  • 前端小白操作指南:如何删除项目中 pre-commit 的提交限制?
  • 【机器人工具箱Robotics Toolbox开发笔记(十五)】六自由度机器人笛卡尔空间轨迹规划仿真实例