猿人学20题学习

网上文章一大堆,然后没有自己去实际不去知道文章写的看起来挺简单,然后你照着就是死活搞不出来,我也是不知道是什么问题,望大佬指点一下。
首先本来是为了熟悉jsrpc的使用来拿这个题实际的,然而总是不行,按着文章https://zhuanlan.zhihu.com/p/470071388来的,就是不行报下面的问题,我也是醉了,不晓得怎么搞了,有大佬望提点一下。在这里插入图片描述
好了,接下来有两个方式来搞这个题:
1,逆向,此文章我就不写了,我已经会了,难得码文章。
2,rpc方式。

一、先创建一个websockets的python服务端:

import asyncio
import websockets


connected = set()


async def on_connect(websocket):
    connected.add(websocket)
    try:
        async for message in websocket:
            for conn in connected:
                if conn != websocket:  # 排除当前的websocket连接对象
                    await conn.send(message)  # 将消息发送给其它连接
    finally:
        connected.remove(websocket)

async def run_server():
    # 启动WebSocket服务并监听在0.0.0.0:8765
    async with websockets.serve(on_connect, "localhost", 8765):
        print("[+] Server started")

        # 运行服务,等待链接
        await asyncio.Future()

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(run_server())
loop.run_forever()

二、控制台改写HOOK

!(function () {
    var ws = new WebSocket('ws://localhost:8765');
    ws.onopen = function (evt) {
        console.log('Connection open ...');
    };
    ws.onmessage = function (evt) {
        console.log(evt.data)
        t = Date.parse(new Date());
        var sign = window.sign(evt.data.toString() + '|' + t.toString())
        ws.send(sign);
    };
})();

在这里插入图片描述注:开启websockets服务端后,再运行此代码。
三、验证

import asyncio
import websockets

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)


async def hello(message):
    # 连接 websocket 并发送消息 获取相应
    async with websockets.connect("ws://localhost:8765") as websocket:
        await websocket.send(message)
        return await websocket.recv()


def get_encrypt(message):
    return str(loop.run_until_complete(hello(message)))


if __name__ == "__main__":
    print(get_encrypt(str("1")))



在这里插入图片描述
四、解题

import time
import requests
from client import get_encrypt #引入请求rpc的方法

count = 0
for page in range(1, 6):
    sign = get_encrypt(str(page))
    ts = str(int(time.time() * 1000))[:-3] + "000"
    url = "https://match.yuanrenxue.com/api/match/20".format(page, sign, ts)
    data = {
        "page": page,
        "sign": sign,
        "t": ts,
    }
    payload = {}
    headers = {
        'User-Agent': 'yuanrenxue.project',
    }
    cookie = {
        "sessionid": "自己的哈"
    }
    response = requests.request("GET", url, headers=headers, params=data, cookies=cookie)
    for tt in response.json()["data"]:
        jishu = int(tt["value"])
        count +=jishu
print(count)


实践出真知、又得去搬砖了,没有正式工作的日子太难了……

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值