什么是jsRPC

说实话在介绍 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 : hybpjx@163.com
# @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的isRPC应用

简介: 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()); 这段代码 也就意味着可以进行任何的操作。

对于sekiro jsRPC的理解

提供了一种浏览器与代码以及接口交互的一种可行性理论上只要是网站都可以通过这种方案在is层面突破反爬限制,且稳定性要优于目前的一切自动化框架

使用描述:

可能性1:针对解密函数的接口暴露

可能性2:针对数据接口的接口暴露

可能性3:针对自动化采集的接口暴露

可能性4:其他的一切想你所想....

优势

sekiro驱动jsRPC的优势与缺陷分析

  1. 与传统自动化框架相比,稳定性更高且不需要考虑浏览器指纹。操作得当的话,性能不在一个数量级
  2. 可以通过js直接获取加密参数,对于全局变量的参数暴露具有极佳的体验。[一剑破光阴]
  3. 可以直接获取接口数据,对于获取数据接口暴露明显的网站具有极佳的体验。
  4. 不考虑风控的情况下,能达到高并发。

缺陷

  1. 内置不可更改的浏览器环境不可更改,对于风控突破而言是个极大的隐患[浏览器沙箱可能会解决这个问题]
  2. 需要对js有较深理解,需要寻找合适的注入时机和注入位置[这个算缺陷么? 菜是原罪]。
  3. 需要注入脚本,所以要依托于油猴脚本/autoResponse/手动注入[如果使用抓包工具需要注意端口问题]
  4. 对于全局js混淆、风控严格、is参数分布散乱、鼠标轨迹指纹、变量作用域复杂的网址的支持较差。
  5. 需要保持浏览器开启,所以多少会占用些资源。
  6. 如果不取参数,而是只取接口内容 或者 参数与IP绑定的加密,对代理池接入的支持不佳。

基于Sekiro的jsRPC的使用和安装的更多相关文章

  1. 基于XMPP实现的Openfire的配置安装+Android客户端的实现

    最近在整理一些这方面的资料,闲话少说,咱还是直奔主题吧 :) 一.基于xmpp实现的openfire的配置安装 1. 下载最新的openfire安装文件 官方下载站点: http://www.igni ...

  2. 基于XMPP实现的Openfire的配置安装+Android客户端的实现[转]

    最近在整理一些这方面的资料,闲话少说,咱还是直奔主题吧 :) http://blog.csdn.net/sk719887916/article/details/40541163 https://git ...

  3. 基于svnserve的SVN服务器(windows下安装与配置)

    基于svnserve的SVN服务器(windows下安装与配置) 基于svnserve的SVN服务器(windows下安装与配置)关键字: svn 安装SVNserve 从http://subvers ...

  4. 基于libmemcached,php扩展memcached的安装

    基于libmemcached,php扩展memcached的安装 张映 发表于 -- 分类目录: php 标签:libmemcached, memcached, php, 安装 一,为什么要装memc ...

  5. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(五):测试项目

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  6. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(四):安装MySQL数据库

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  7. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(三):设置上传文件夹权限(这里测试用完全共享)

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  8. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(二):Apache安装和配置

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  9. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django

    近期开始学习基于Linux平台的Django开发,想配置一台可以发布的服务器,经过近一个月的努力,终于掌握了基于Apache和mod-wsgi插件的部署模式,自己也写了一个教程,一是让自己有个记录,二 ...

  10. 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用

    基于Linux命令行KVM虚拟机的安装配置与基本使用 https://alex0227.github.io/2018/06/06/%E5%9F%BA%E4%BA%8ELinux%E5%91%BD%E4 ...

随机推荐

  1. docker从C盘迁移到D盘

    docker镜像在C盘占据大量的空间,将.docker从C:\Users\Administrator迁移到E:\.docker. 一.关闭virtual Box 使virtual Box处于关闭.停止 ...

  2. Linux下查看服务器PCIE Slot槽位信息

    在linux系统下,可以使用"dmidecode –t 9"或者"dmidecode –t slot"命令查看PCIE Slot的信息,如下图所示RH2288H ...

  3. Javascript基础知识整理(引用类型-Array)

    Array Array是一组数据的有序列表,在ECMAScript中,数组的每一项可以是不一样的数据类型. 创建数组有两种方式 (1)使用构造函数 var colors = new Array(); ...

  4. Luogu P2375 [NOI2014 D2]动物园 kmp

    P2375 动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物 ...

  5. MarkDown初次见面——

    Markdown基础语法 分级标题 n级标题就在前面加n个#即可,但是仅支持到六级标题. 字体 柔骨兔 字体倾斜:左右两边加1个* 柔骨兔 字体加粗:左右两边各自添加2个* 柔骨兔 倾斜加粗:左右两边 ...

  6. re模块相关介绍

    re模块 模块和实际工作时间的关系 time模块和时间是什么关系?re模块和正则表达式的关系? 有了re模块就可以在python语言中操作正则表达式 正则表达式 1:什么是正则表达式? 一套规则--- ...

  7. 项目实训 day15-16

    第一天我与灿哲沟通,我弄明白了真正的网络结构且如何运行的,自己记了下网络草图,开始初步用PlotNN绘制 第二天我发现pycore库表达能力不够,于是参考其他用tex写的例子,写了几个方法,最终能生成 ...

  8. linux Usb serial console

    ubuntu Usb serial console 能够把下电时打印输出到串口上,可以记录,而netconsole只能输出下电到disk 之前的打印 Usb串口线,ftdi或pl2303都可以 如果是 ...

  9. 处理时间转换不正确-Springboot、springclound、feign、http请求

    SpringBoot.SpringCloud.feign.前后端时间解析不正确时,我们可以自定义HttpMessageConverters,以达到我们希望的结果 参考链接:https://www.cn ...

  10. 【APT】海莲花组织DLL样本分析

    前言 样本来源Twitter,之前的文章已经完整分析过一个类似的DLL样本,这次做个简单记录. 样本分析 样本信息如下: DLL文件共有40个导出函数: 导出函数内容基本一致,恶意代码都在DllMai ...