【猿人学】第三题 罗生门 逆向分析

难点

头部顺序反爬某些框架内部会对头部处理造成获取不到 Cookie

Tip:文末可以下载例子

猿人学该题官网:http://match.yuanrenxue.com/match/3

mark

确定逆向目标

请求加密一般在 参数 头部(Cookie,token,还有其他的自定义的), 这里就只有 Cookie 了

mark

开始逆向

既然第二个请求,带有 Cookie ,那么就需要确定该 Cookie 是生成,还是服务器返回,这里还有第一个请求,所以大概率是服务器返回

分析请求

第一个请求状态码是 202(表示服务器端已经收到请求消息,但是尚未进行处理),还有 Set-Cookie,那就可以确定是服务器返回的了

mark

这里获取不到 Cookie ,有两个原因

一、反爬(对请求头部的顺序有要求,最好是使用原始顺序)

二、requests 框架的原因(框架会对 设置的头部进行优化修改)

mark

规避了上面两个问题后,就可以获取到 Cookie

mark

请求数据

import requests


def app(page: int) -> dict:
    session = requests.Session()
    session.headers = {
        'Host': 'match.yuanrenxue.com',
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
        'DNT': '1',
        'Accept': '*/*',
        'Origin': 'http://match.yuanrenxue.com',
        'Referer': 'http://match.yuanrenxue.com/match/3',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
    }
    session.post(url="http://match.yuanrenxue.com/jssm", )
    print(session.cookies)

    s = session.get(url="http://match.yuanrenxue.com/api/match/3",
                    headers={
                        "User-Agent": "yuanrenxue.project",
                    },
                    params={"page": page}
                    )
    return s.json()

if __name__ == '__main__':
    for _ in range(1,6):
        print(app(_))

mark

结果正确

mark

Tip:直接访问数据接口,会返回一段 Js 其实这段代码一点用都没有。

完整代码:https://pan.bigdataboy.cn/s/JZh7

发表评论 / Comment

用心评论~