Ingrese al directorio bin y ejecute el siguiente comando en la línea de comando (para descargar cli.exe, vaya a mi otro artículo: https://learnku.com/articles/67419)
. / cli . exe Websocket . php
1. Cree una conexión Websocket en el navegador (primero inyecte el archivo Websocket.js en el navegador)
2. Registre la función js que debe llamarse en el objeto del cliente.
# 假设我们需要通过http调用btoa这个函数,第一个参数随便命名,第二个参数是函数执行的内容,需要自己定义执行内容
let client = ( new WebsocketClient ( "ws://127.0.0.1:9501" ) ) . start ( ) ;
client . registeCall ( "btoa" , function ( resolve , params ) {
let result = btoa ( params ) ;
resolve ( result ) ;
} ) ;
# 会输出一个访问地址,比如这样
[ 2022 / 4 / 24 18 : 16 : 01 ] [ info ] 连接到服务器成功
[ 2022 / 4 / 24 18 : 16 : 52 ] [ info ] 注册函数btoa成功
[ 2022 / 4 / 24 18 : 16 : 52 ] [ info ] 访问地址:http: //127.0.0.1:9501/call?group=ef8d3da2-dca4-4236-ba99-82f76a5e1901&action=btoa&input=
# 参数说明
group:客户端分组ID (不用管)
action:注册的需要调用的函数(不用管)
input:调用这个函数传入的参数(需要输入)
http://127.0.0.1:9501/call?group=df777a58-ff44-41bb-81ce-935b6bea9c25&action=btoa&input="abc"
. es: El resultado de la ejecución de window.btoa("ss")
A menudo, los parámetros cifrados son generados por una función en un determinado archivo js. Lo que debemos hacer es encontrar la ubicación donde se generan los parámetros cifrados a través de puntos de interrupción, luego inyectar dinámicamente nuestro script y usar código externo para llamarlo. Ya encontré el código clave, por lo que solo necesita inyectar dinámicamente nuestro script, lo cual se realiza en dos pasos.
Necesitamos agregar la función de cifrado de clave a la lógica de conexión a ws, guardarlo como un nuevo archivo js y luego usar la anulación o el violinista del navegador para reemplazar el archivo js cifrado si encontramos la función de cifrado.
function sign(){
// w函数存在其他地方
return w(x+y);
}
Después de transformarlo
function sign() {
// 动态注入js文件
(function () {
var newElement = document.createElement("script");
newElement.setAttribute("type", "text/javascript");
newElement.setAttribute("src", "https://github.com/kxg3030/js-rpc/blob/main/Websocket.js");
document.body.appendChild(newElement);
function startWs() {
var client = (new WebsocketClient("ws://127.0.0.1:9501")).start();
client.registeCall("a", function (resolve, params) {
// 重点!在这里我们主动调用w函数并传入参数
resolve(w(params));
})
}
setTimeout(startWs, 1000)
})();
// w函数存在其他地方
return w(x + y);
}
Luego guarde el archivo js modificado y reemplace el archivo js original con el mismo nombre en la página web.
Simplemente use un servidor ws externo para comunicarse con el navegador
/ call 调用函数获取返回值
/ list 获取当前服务的websocket客户端数量