什么是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建立完毕');
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建立完毕');
在浏览器中注入:
(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的jsRPC应用
简介: sekiro是基于长链接和代码注入的Android private API暴露框架
- github: https://github.com/virjar/sekiro
- Sekiro在Web环境基于WebSocket实现,使用本功能可以支持注入js到浏览器后,调用浏览器环境的js代码
- 文档: https://sekiro.iinti.cn/sekiro-doc/01_manual/1.quickstart.html
官方文档提供了基于docker安装
和手动安装
,本文主要介绍手动安装
- 下载安装包 https://oss.iinti.cn/sekiro/SekiroMain.zip
- 配置和初始化: 解压安装包
- 数据库配置初始化配置在:
assets/ddl.sql
,请根据本sql文件进行数据库建表初始化 - conf 文件夹的相关配置: 项目使用springboot,其中项目可选配置在
conf/application.properties
,请在这里配置您的数据库链接信息(数据库为您上一步完成的 mysql 安装和数据库配置)conf/static/*
为前端资源,如果你想替换前端网页皮肤,则可以替换这里的内容 sekiro 前端是开源的,支持二开的conf/static/sekiro-doc/*
为文档资源,如果你想修改文档内容,则可以编辑这里
- 数据库配置初始化配置在:
- 运行
- 执行
bin/startup.sh
(如果是 windows,那么执行xxx.bat
即可) - 观察日志是否正常
- 执行
使用: 将js文件 sekiroWebMini.js 注入到浏览器环境 , 之后通过当前接口访问自己的浏览器服务:
然后注入下面的代码:
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());
})
注入完成之后 使用我们的浏览器访问http://127.0.0.1:5612/business/invoke?group=demo-ws&action=clientTime
成功之后是这样的
可以看到 这里返回的就是我们resolve(""+new Date()); 这段代码 也就意味着可以进行任何的操作。
对于sekiro jsRPC的理解
提供了一种浏览器与代码以及接口交互的一种可行性理论上只要是网站都可以通过这种方案在js层面突破反爬限制,且稳定性要优于目前的一切自动化框架
使用描述:
- 针对解密函数的接口暴露
- 针对数据接口的接口暴露
- 针对自动化采集的接口暴露
- 其他的一切想你所想….
优势
- 与传统自动化框架相比,稳定性更高且不需要考虑浏览器指纹。操作得当的话,性能不在一个数量级
- 可以通过js直接获取加密参数,对于全局变量的参数暴露具有极佳的体验。
- 可以直接获取接口数据,对于获取数据接口暴露明显的网站具有极佳的体验。
- 不考虑风控的情况下,能达到高并发。
本文来源:https://blog.csdn.net/Zuko_chen/article/details/129578028