說實話在介紹 JSRPC 我向大家推薦一個庫 Selenium-wire 感覺和JSrpc的原理很像
RPC指遠端過程呼叫,APP裡面的RPC大家比較熟悉了。
那什麼是jsRPC,顧名思義,就是指利用js手段實現程式碼遠端控制瀏覽器控制檯的一種手段,需要藉助websocket實現。
下面我們先簡單的寫一個小例子
var ws = require('nodejs-websocket');
console.log('開始建立連線...');
var cached = {}
var server = ws.createServer(function (conn) {
conn.on('text', function (msg) {
var key = conn.key
console.log("將要傳送程式碼:【" + msg + "】至瀏覽器/python");
server.connections.forEach(conn => {
conn.send(msg);
})
})
conn.on('close', function (code, reason) {
console.log('關閉連線', code, reason)
});
conn.on('error', function (code, reason) {
console.log('異常關閉', code, reason)
});
}).listen(8015)
console.log('WebSocket建立完畢');
python
# -*- coding: utf-8 -*-
# @Time : 2022/12/2 14:17
# @Author : lzc
# @Email : [email protected]
# @Software: PyCharm
# @blog : https://www.cnblogs.com/zichliang
import websocket
ws = websocket.WebSocketApp("ws://127.0.0.1:8015")
def on_message(ws,message):
if message.split("_")[0]!= 'js':
print(message)
ws.on_message = on_message
ws.run_forever()
在瀏覽器中注入
(function () {
if (window.WebSocket) {
ws = new WebSocket("ws://localhost:8015");
ws.onopen = function (e) {
};
ws.onclose = function (e) {
console.log("server closed", e)
}
ws.onerror = function (e) {
"connection error"
}
ws.onmessage = function (e) {
console.log(e)
}
}
})()
在瀏覽器中對其進行操作
比如傳送什麼資料
在python程式碼中就能接收到這些資料
簡介: sekiro是基於長連結和程式碼注入的Android private API暴露框架
sekiro在安卓方面的應用請看課程 第六章
github: https://github.com/virjar/sekiro 作者:鄧維佳 virjar 渣總[都是一個人]
sekiro 在 web方向,使用 websocket協定注入
官方檔案內容:
Sekiro 已支援 websocket 協定,使用本功能可以支援注入js 到瀏覽器後,呼叫瀏覽器環境的is 程式碼
Web 環境基於 WebSocket 實現
檔案:https://sekiro.iinti.cn/sekiro-doc/01_user_manual/1.quickstart.html
下載地址:Go HTTP File Server (iinti.cn)
下載這個 到本地
並且下載好 JDK java的編譯器
然後執行響應版本
注意:
使用方法:將js檔案 sekiroWebMini.js 注入到瀏覽器環境 ,
之後通過當前介面存取自己的瀏覽器服務:
ws://127.0.0.1:5612
然後注入我們的程式碼
var client = new SekiroClient("ws://127.0.0.1:5612/business/register?group=demo-ws&clientId="+Math.random());
client.registerAction("clientTime",function(request, resolve,reject ){
resolve(""+new Date());
})
請注意,Sekiro JS RPC是Sekiro的擴充套件,依然需要遵循Sekiro的各種規則定義。
注入完成之後 使用我們的瀏覽器存取
http://127.0.0.1:5612/business/invoke?group=demo-ws&action=clientTime
必須與我們注入的程式碼相對應 不然就會失敗 成功之後是這樣的
可以看到 這裡返回的就是我們resolve(""+new Date()); 這段程式碼 也就意味著可以進行任何的操作。
提供了一種瀏覽器與程式碼以及介面互動的一種可行性理論上只要是網站都可以通過這種方案在is層面突破反爬限制,且穩定性要優於目前的一切自動化框架
使用描述:
可能性1:針對解密函數的介面暴露
可能性2:針對資料介面的介面暴露
可能性3:針對自動化採集的介面暴露
可能性4:其他的一切想你所想....
sekiro驅動jsRPC的優勢與缺陷分析