Masuk ke direktori bin dan jalankan perintah berikut pada baris perintah (untuk mengunduh cli.exe, buka artikel saya yang lain: https://learnku.com/articles/67419)
. / cli . exe Websocket . php
1. Buat koneksi Websocket di browser (inject dulu file Websocket.js ke browser)
2. Daftarkan fungsi js yang perlu dipanggil pada objek klien
# 假设我们需要通过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"
adalah: Hasil eksekusi window.btoa("ss")
Seringkali parameter terenkripsi dihasilkan oleh suatu fungsi dalam file js tertentu. Yang perlu kita lakukan adalah menemukan lokasi di mana parameter terenkripsi dihasilkan melalui breakpoint, dan kemudian secara dinamis memasukkan skrip kami dan menggunakan kode eksternal untuk memanggilnya telah menemukan kode kuncinya, jadi Anda hanya perlu menyuntikkan skrip kami secara dinamis, yang dilakukan dalam dua langkah.
Kita perlu menambahkan fungsi enkripsi kunci ke logika koneksi ke ws, menyimpannya sebagai file js baru, dan kemudian menggunakan override atau fiddler browser untuk mengganti file js yang dienkripsi
function sign(){
// w函数存在其他地方
return w(x+y);
}
Setelah mengubahnya
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);
}
Kemudian simpan file js yang sudah dimodifikasi dan ganti file js asli dengan nama yang sama di halaman web
Cukup gunakan server ws eksternal untuk berkomunikasi dengan browser
/ call 调用函数获取返回值
/ list 获取当前服务的websocket客户端数量