hook webSocket 可以修改发送数据和返回数据
> 本帖最后由 yhzc2023 于 2023-12-14 13:50 编辑> 本帖最后由 yhzc2023 于 2023-12-13 14:09 编辑
如果 orgin_onmessage_setter报错,可能是浏览器不对,火狐的WebSocket好像不叫WebSocket这个名字,也有可能被别的脚本提前hook了(这个我就遇到了)
```js
const orgin_webSocket = window.WebSocket
const orgin_onmessage_setter = Object.getOwnPropertyDescriptor(orgin_webSocket.prototype, "onmessage").set
window.WebSocket = function () {
const webSocket_client = new orgin_webSocket(...arguments)
const orgin_send = webSocket_client.send
const orgin_close = webSocket_client.close
webSocket_client.send = function (data) {
// 修改data 修改发送的数据
orgin_send.call(this, data)
}
const message_handler = (event) => {
const data = event.data
Object.defineProperty(event, "data", {
get: function () {
// 修改data 修改接收的数据
return data
}
})
return webSocket_client._onmessage.call(this, event)
}
const orgin_addEventListener = webSocket_client.addEventListener
webSocket_client.addEventListener = function () {
if (arguments !== 'message' || !arguments) return orgin_addEventListener.apply(this, arguments)
webSocket_client._onmessage = arguments
orgin_onmessage_setter.call(webSocket_client, message_handler)
}
Object.defineProperty(webSocket_client, 'onmessage', {
set: function (caller) {
webSocket_client._onmessage = caller
orgin_onmessage_setter.call(webSocket_client, message_handler)
}
})
webSocket_client.close = function () {
orgin_close.apply(this, arguments)
}
return webSocket_client
}
``` 什么网站可以去验证测试呢?
另外建议发到悬赏区,看见群里的消息才知道哥哥这是什么问题。。。。建议单独的描述清楚,不然有点无头苍蝇,不知道哥哥是提的什么问题 因为i不知道卡在那里我就从新写了一下
用的测例是
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<button class="btn">Connect</button>
</head>
<body></body>
<script>
document.querySelector(".btn").addEventListener("click", () => {
let ws = new WebSocket("ws://127.0.0.1:8080/socketTest");
ws.onopen = function (evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
ws.onmessage = function (evt) {
console.log("Received Message: " + evt.data);
};
});
</script>
</html>
```
代码
```js
const originSocket = window.WebSocket;
window.WebSocket = function (...args) {
let callback = undefined;
const ws = new originSocket(...args);
const originSend = ws.send;
ws.send = function (...args) {
if (args.length > 0) {
args = args + "【被劫持提交了】";
}
return originSend.call(this, ...args);
};
ws.onmessage = function (evt) {
const proxyEvent = new Proxy(evt, {
get: function (target, prop) {
const data = target;
if (prop === "data") {
return data + " 【被劫持返回了】";
}
return data;
},
});
callback && callback(proxyEvent);
};
Object.defineProperty(ws, "onmessage", {
get: () => {
return callback;
},
set: (setCall) => {
callback = setCall;
},
});
return ws;
};
```
文章https://learn.scriptcat.org/docs/middle/WebSocket%E6%8F%90%E4%BA%A4%E8%BF%94%E5%9B%9E%E5%8A%AB%E6%8C%81/ 李恒道 发表于 2023-12-13 16:44
因为i不知道卡在那里我就从新写了一下
用的测例是
```html
我上面的代码,把所有log删掉,如果不是油猴脚本的话处理一下unsafewindow,也是可以正常用的。哥哥这个确实也简洁了不少 王一之 发表于 2023-12-13 15:28
什么网站可以去验证测试呢?
另外建议发到悬赏区,看见群里的消息才知道哥哥这是什么问题。。。。建议单独 ...
这个代码是可以使用的,看了下百度没什么关于websocket例子,就发出来了。至于bug是薛定谔的bug。至于验证网站,我当时测试的网站有反爬机制,要先做处理,就没发出来。 yhzc2023 发表于 2023-12-14 13:03
我上面的代码,把所有log删掉,如果不是油猴脚本的话处理一下unsafewindow,也是可以正常用的。哥哥这个 ...
原来哥哥是记录一下{:4_94:} 李恒道 发表于 2023-12-13 16:44
因为i不知道卡在那里我就从新写了一下
用的测例是
```html
能捕捉 post 和返回的内容的吗 szzxc 发表于 2023-12-18 10:19
能捕捉 post 和返回的内容的吗
post是基于xhr和fetch,论坛有教程的
页:
[1]