أدخل دليل bin وقم بتنفيذ الأمر التالي في سطر الأوامر (لتنزيل cli.exe، انتقل إلى مقالتي الأخرى: https://learnku.com/articles/67419)
. / cli . exe Websocket . php
1. قم بإنشاء اتصال Websocket في المتصفح (قم أولاً بإدخال ملف Websocket.js في المتصفح)
2. قم بتسجيل وظيفة js التي يجب استدعاؤها على كائن العميل
# 假设我们需要通过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"
الإرجاع النهائي هي: نتيجة تنفيذ window.btoa("ss")
غالبًا ما يتم إنشاء المعلمات المشفرة بواسطة وظيفة في ملف js معين. ما يتعين علينا القيام به هو العثور على الموقع الذي يتم فيه إنشاء المعلمات المشفرة من خلال نقاط التوقف، ثم إدخال البرامج النصية الخاصة بنا ديناميكيًا واستخدام التعليمات البرمجية الخارجية لاستدعائها لقد عثرنا بالفعل على رمز المفتاح، لذلك ما عليك سوى إدخال البرنامج النصي الخاص بنا ديناميكيًا، وهو ما يتم في خطوتين.
نحتاج إلى إضافة وظيفة التشفير الرئيسية إلى منطق الاتصال بـ ws، وحفظها كملف js جديد، ثم استخدام تجاوز المتصفح أو عازف الكمان لاستبدال ملف js المشفر إذا وجدنا وظيفة التشفير
function sign(){
// w函数存在其他地方
return w(x+y);
}
بعد تحويله
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);
}
ثم احفظ ملف js المعدل واستبدل ملف js الأصلي بنفس الاسم في صفحة الويب
ما عليك سوى استخدام خادم ws خارجي للتواصل مع المتصفح
/ call 调用函数获取返回值
/ list 获取当前服务的websocket客户端数量