猿人学第五题 摁扣代码 抓取全部5页直播间热度,计算前5名直播间热度的加和

首先推荐一个hook工具,用于显示cookie变化:https://github.com/CC11001100/js-cookie-monitor-debugger-hook

解题思路:

本题主要是cookie内两个参数m和RM4hZBv0dDon443M,载荷内m和f的参数跟栈点一点就能找到这里不赘述了。
在这里插入图片描述
通过推荐的插件,可以看到m值的变化。
在这里插入图片描述
一共生成了五次,第五次生成的与cookie内的m参数相同。

hook代码到m生成位置查看:

// ==UserScript==
// @name         getM
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @run-at       document-start
// ==/UserScript==
(function() {
    Object.defineProperty(document, 'cookie', {
        set: function(val) {
            debugger ;return val;
        },
    });
}
)();

在这里插入图片描述
看到m生成五次,那么最后一次正是cookie中的m参数。
现在再确认RM4hZBv0dDon443M参数生成过程。
在这里插入图片描述
可见和这个参数有关,但是ctrl+f没有搜到,可以用油猴hook继续找。

// ==UserScript==
// @name         hook $ss
// @namespace    http://tampermonkey.net/
// @version      2024-07-03
// @description  try to take over the world!
// @author       You
// @match        https://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=yuanrenxue.cn
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';
    Object.defineProperty(window, '_$ss', {
        set: function (val){
            debugger;
        },
    });
})();

hook到这里,
在这里插入图片描述
UH数组只用用鼠标圈一圈就会有值,那么把这段代码补一补可以看出是一个加密。
开扣!
发现和这个_0x4e96b4[‘_$pr’]有关

我们直接ctrl+f搜索_0x4e96b4[‘_$pr’]
在这里插入图片描述
把断点都打一下,再运行发现该数组被push了五次,现在只用还原五次push的过程这道题就解决了。
现在回头看思路还是比较清晰的,但是写的时候不知道结果会觉得很复杂。
这里介绍几个需要注意的点和方法。
注意的点:

  1. .'_$tT’值发生改变了,并不是初始化的值,所以补环境注意方法调用的位置。
    在这里插入图片描述
    尽量还原逻辑,可能会在某个分支改为另一个值。
  2. 扣多了代码导致改变了CryptoJS库内的WordArray,最后调用CryptoJS函数出错,所以要注意尽量不要改变全局环境。
  3. _0x4e96b4是window的值,所以可以用window的名义hook代码。
    方法:
  4. 可以固定时间戳的值,来对部分代码log出结果比对浏览器的结果查看各个部分是否一致。

代码部分:

JS部分太长了,详情请看:
详情代码

import requests
import execjs
import requests


def p(page):
    with open('y5.js', 'r', encoding='utf-8') as f:
        s = f.read()
        res = execjs.compile(s).call('get_config')
    url = f"https://match.yuanrenxue.cn/api/match/5?page={page}&m={res['m']}&f={res['f']}"
    # print(url)
    payload = {}
    headers = {
        'Cookie': f'sessionid=your_sessionid; m={res["r_m"]}; RM4hZBv0dDon443M={res["r_r"]};',
    }
    # print(headers)
    response = requests.request("GET", url, headers=headers, data=payload)
    return response


arr = []
for i in range(1, 6):
    res = p(i).json()
    print(res['data'])
    arr.append([i['value'] for i in res['data']])
res_a = []
for i in arr:
    for j in i:
        res_a.append(j)

res_a.sort(reverse=True)
print(res_a)

sum = 0
for i in range(0,5):
    print(res_a[i])
    sum += res_a[i]
print(sum)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值