Entrez le répertoire bin et exécutez la commande suivante sur la ligne de commande (pour télécharger cli.exe, accédez à mon autre article : https://learnku.com/articles/67419)
. / cli . exe Websocket . php
1. Créez une connexion Websocket dans le navigateur (injectez d'abord le fichier Websocket.js dans le navigateur)
2. Enregistrez la fonction js qui doit être appelée sur l'objet client
# 假设我们需要通过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"
. est : Le résultat de l'exécution window.btoa("ss")
Souvent, les paramètres cryptés sont générés par une fonction dans un certain fichier js. Ce que nous devons faire est de trouver l'emplacement où les paramètres cryptés sont générés via des points d'arrêt, puis d'injecter dynamiquement nos scripts et d'utiliser du code externe pour les appeler. Si vous avez déjà trouvé le code clé, il vous suffit donc d'injecter dynamiquement notre script, ce qui se fait en deux étapes.
Nous devons ajouter la fonction de cryptage de clé à la logique de connexion à ws, l'enregistrer en tant que nouveau fichier js, puis utiliser le remplacement ou le violoneux du navigateur pour remplacer le fichier js crypté si nous trouvons la fonction de cryptage.
function sign(){
// w函数存在其他地方
return w(x+y);
}
Après l'avoir transformé
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);
}
Enregistrez ensuite le fichier js modifié et remplacez le fichier js d'origine par le même nom dans la page Web.
Utilisez simplement un serveur ws externe pour communiquer avec le navigateur
/ call 调用函数获取返回值
/ list 获取当前服务的websocket客户端数量