RPC调用获取参数值

进阶的可以看:https://baijiahao.baidu.com/s?id=1725536000710059774&wfr=spider&for=pc

本文以 RPC 获取百度登录password加密值为例:

涉及的知识点有:

  1.js调试,寻找加密代码

  2. 浏览器本地代码替换

  3. js自执行函数

  4. 插桩

  5. RPC 远程调用

  6. python websocket ,js websocket

 

一.寻找百度登录password 加密代码

1.找加密代码

 2. 加密代码的位置

 

 

二.js本地替换

1.浏览器--> Overides--->select floder for overides--> 选择目录---> 会弹出权限允许按钮--> 点击允许--> 未格式化的js文件右键—》 save for overrides--> 复制格式好的代码到未格式的js文件中(替换)--》保存

 

 

 

 

 

 

三.将自执行websockect 客户代码注入到本地js加密文件中(加密前一句,添加)

  js自执行函数

  闭包自执行函数,不污染全局变量

!(function () {
    
})();

1. 将需要写的逻辑代码加入到自执行函数中

web.js

!(function () {

    // 导出函数e,从而能外部调用
    window.deng=e;

    var ws = new WebSocket("ws://127.0.0.1:5678");
    ws.onopen=function (ev) {

    };

    ws.onmessage =function (ev) {
        //收到客户端的信息,并对其进行加密
        var pwd = window.deng.RSA.encrypt(ev.data);
        // 向客户端发送加密后的信息
        console.log(pwd);
        ws.send(pwd)

    };


})();

 2. 将上面web.js中的代码加入本地js文件中并保存本地替换插桩

 

 3. 开启python websocket 服务端

服务端server.py 代码:

import asyncio
import websockets

async def echo(websocket, path):
    # cnt = 0
    while True:
        #要发送的消息
        msg = input("send=>")
        #给客户端发信息
        await websocket.send(msg)
        try:
            message = await websocket.recv()
            print(f"加密前{msg}\n加密后:{message}")
            print("==================")
        except Exception as e:
            print(e)
        # await asyncio.sleep(1)



start_server = websockets.serve(echo, '127.0.0.1', 5678)  # 地址改为你自己的地址
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
server.py

 

 4. 开启浏览器客户端

web.js的代码已经注入到本地js中,作为客户端

(1)刷新百度页面,重新进入百度登录页面,点击登录

 

 

 

5. python服务端发送明文密码后:

 

posted @ 2021-12-12 22:35  冰底熊  阅读(392)  评论(1编辑  收藏  举报