js逆向:rpc远程调用

websocket  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, "localhost", 8888)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
#客户端,调用rpc例子
import asyncio
import websockets

loop = asyncio.get_event_loop()


async def hello(message):
    # 连接 websocket 并发送消息 获取相应
    async with websockets.connect("ws://localhost:8888") 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("1234565")))

值得注意的一点是,需要替换到本地注入的js代码

例子:这里用rsa加密为例

//自执行函数
!(function () {
    window.test = f;
    var ws = new WebSocket('ws://127.0.0.1:8888');
    ws.onopen = function (evt) {
        console.log('Connection open ...');
    };
    ws.onmessage = function (evt) {
        console.log(evt.data)
        console.log(window.test.encrypt([me.servertime, me.nonce].join("\t") + "\n" + evt.data))
        ws.send(window.test.encrypt([me.servertime, me.nonce].join("\t") + "\n" + evt.data))
    };
    ws.onclose = function (evt) {
        console.log("closed")
    };
})();

1.一般来说开启的顺序是,服务端python代码,然后是浏览器中的js代码(调试一下),最后可以按照客户端模式调用rpc加密接口。

2.js本地替换,先下断点测试一下,然后右键js代码保存以备替代,最后单独测试一下,如果下断点没走,说明断点没找对,建议用alert()测试一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值