js逆向之rpc远程调用(你强任你强,我无视一切)

本文介绍了如何进行JavaScript的RPC逆向工程,通过在加密函数下方注入WebSocket服务,实现Python调用。首先定位加密函数,接着注入ws服务,然后开启ws和flask服务进行测试和部署。在服务器上,同样注入ws服务并用flask提供远程调用接口,测试显示响应快速且并发性能良好。
摘要由CSDN通过智能技术生成

一、找到加密函数位置

在这里插入图片描述

二、在其下面注入ws服务

(1)注入准备

资源>>替换>>随便选一个空文件夹

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)进行注入

进行(1)操作后可直接编辑js代码了,做以下修改

(function() {
        var ws = new WebSocket("ws://127.0.0.1:8080")

        ws.onmessage = function(evt) {
            console.log("收到消息:" + evt.data);
            if (evt.data == "exit") {
                wx.close();
            } else {
                ws.send(encrypt(evt.data));
            }
        }
    }
)();

红框为插入的代码

在这里插入图片描述

修改完成后按 ctrl+s 进行保存,出现下载紫色点表示成功。

在这里插入图片描述

保存成功后,把所有断点去掉,运行下面python代码,然后刷新页面,即可进行python调用了。

三、开启ws服务,python进行调用

注意:先运行python代码再去刷新页面

import sys
import asyncio
import websockets


async def receive_message(websocket):
    while True:
        send_text = input("请输入要加密的字符串:")
        if send_text == "exit":
            print("退出!")
            await websocket.send(send_text)
            await websocket.close()
            sys.exit()
        else:
            await websocket.send(send_text)
            response_text = await websocket.recv()
            print("加密结果:", response_text)
            
start_server = websockets.serve(receive_message, "127.0.0.1", 8080)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

四、测试效果

python测试效果,注:部署到服务器用flask写个接口就可以提供远程调用啦

在这里插入图片描述

谷歌控制台效果

在这里插入图片描述

四、部署到服务器

到服务器上也是按上面过程,ws注入不变,只修改python代码,然后用flask提供远程调用。

(1)开启ws服务

同样是进行ws注入后,运行下面代码,再刷新页面

python代码

import asyncio
import websockets

connected = set()
async def server(websocket):
    connected.add(websocket)
    try:
        async for message in websocket:
            for conn in connected:
                if conn != websocket:
                    await conn.send(message)
    finally:
        connected.remove(websocket)

start_server = websockets.serve(server, "127.0.0.1", 8080)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

(2)开启flask服务

开启ws服务,刷新页面后,即可运行flask提供远程调用了

flask代码

import asyncio
import websockets
from flask import Flask,request
app = Flask(__name__)
loop = asyncio.get_event_loop()

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

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

@app.route('/',methods = ['POST', 'GET'])
def hello_world():
    if request.method == 'GET':
        encrypt_txt = request.args.get('encrypt_txt')
        return get_encrypt(encrypt_txt)

if __name__ == '__main__':
    app.run(host="0.0.0.0",port=80,debug=True)

(3)测试效果

测试效果不错,基本0.05s返回,预估每秒50并发无压力。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄IT

感谢感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值