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()
4. 开启浏览器客户端
web.js的代码已经注入到本地js中,作为客户端
(1)刷新百度页面,重新进入百度登录页面,点击登录
5. python服务端发送明文密码后:
有疑问可以加wx:18179641802,进行探讨