网上文章一大堆,然后没有自己去实际不去知道文章写的看起来挺简单,然后你照着就是死活搞不出来,我也是不知道是什么问题,望大佬指点一下。
首先本来是为了熟悉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)
实践出真知、又得去搬砖了,没有正式工作的日子太难了……