JsRPC技术介绍及服务搭建

2023-11-16

声明:本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!


前言:
Js-Rpc意思就是远程调用js代码,全称 Remote Procedure Call,是一种技术思想而非一种规范或协议,
需要借助websocket实现

测试:

我们需要在本地node环境中安装nodejs-websocket库,然后我们开启本地socket协议连接(这里我们设置该进程端口号为8015)

var ws = require("nodejs-websocket");
console.log("开始建立连接...")

var cached = {

}

var port = 8015;

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("connection closed")
    })
    conn.on("error", function (code, reason) {
        // 出错触发 //
        console.log("header err")
        console.log(err)
    })
}).listen(port)

console.log("WebSocket建立完毕")

如图: 

然后我们在本地创建该socket服务连接,根据自己的需求具体编写代码,这里我需要监控浏览器发送给服务的js信息,如图

import websocket
from loguru import logger


def on_message(ws, message):
    if message.split("_")[0] != "js":
        logger.info(message)


if __name__ == '__main__':
    ws = websocket.WebSocketApp("ws://127.0.0.1:8015")
    ws.on_message = on_message
    ws.run_forever()

接下来我们就可以将js代码注入浏览器,达到浏览器向服务发送信息的效果

(function () {
    if (window.WebSocket){
        ws = new WebSocket("ws://127.0.0.1:8015/");
        ws.onopen = function (e) {
            console.log("服务器开启");
        }
        ws.onclose = function (e) {
            console.log("服务器关闭");
        }
        ws.onerror = function (e) {
            console.log("服务器连接出错");
        }
        ws.onmessage = function (e) {
            eval(e.data.split('_')[1])
            console.log(e.data.split('_')[1]);
        }
    }
})();

如图:

这样,服务端就能接收到浏览器发送的数据,如图

 

 而python进程也能拦截到浏览器信息,即可变相的达到数据采集的效果

JsRPC应用:

经过刚才测试,这里我给大家介绍一个便捷的JsRPC框架API——sekiro。sekiro是基于长链接和代码注入的Android private API暴露框架,也是大佬公开的框架API(该API需要借助java环境,所以需要提前安装好java)

github: https://github.com/virjar/sekiro 作者:邓维佳 virjar 渣总[都是一个人]
文档:https://sekiro.iinti.cn/sekiro-doc/01_user_manual/1.quickstart.html

当我们下载好框架的API压缩包后解压,进到bin目录,就会看到启动的两种方式。bat文件是windows用的,sh文件是mac用的,这里我们点击bat文件启动api,如图

然后,我们注入api提供的js代码,并加上自己的js逻辑 ,效果如图

function guid() {
    function S4() {
          return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    }
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

var client = new SekiroClient("ws://127.0.0.1:5620/business-demo/register?group=ws-group&clientId="+guid());

client.registerAction("clientTime",function(request, resolve,reject ){
    resolve(""+new Date());
})

因为基于Sekiro的JsRPC是Sekiro框架的扩展,依然需要遵循Sekiro的各种规则定义,如group、action等参数含义。注入完成之后,我们就可以访问http://127.0.0.1:5620/business-demo/invoke?group=ws-group&action=clientTime这个接口得到对应数据信息(即clientTime的值)

 总结:

基于sekiro的JsRPC远程调用技术与传统自动化技术相比,稳定性更高、接口暴露更明显、可高并发、操作简单便捷、节省开发时间、运行速度更快等等有着明显的优势

那么,今日的分享就到这里,想要学习更多的python爬虫和js逆向的相关技巧和知识的小伙伴们一定要点下关注哟,后期会不定时分享相关干货内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JsRPC技术介绍及服务搭建 的相关文章

随机推荐

  • GitHub怎么搜索项目

    GitHubGitHubGitHub各位应该都很熟悉了 全球最大的开源社区 也是全球最大的同性交友网站 但是大部分同学使用GitHub应该就是通过别人的开源链接 点进去下载对应的项目 而真正使用Github来查找开源项目的还是少数 面试总得
  • Linux系统之安装mariadb方法

    Linux系统之安装mariadb方法 一 检查系统版本 二 配置mariadb的yum源 1 配置yum源 2 替换中科大的源 三 检查yum仓库 1 修改 etc yum conf文件 2 检查yum仓库 四 安装mariadb 五 启
  • Spring的下载与安装(一)

    Spring是一个独立的框架 它不需要依赖于任何Web服务器或容器 它既可在独立的Java SE项目中使用 也可以在Java Web项目中使用 下载Spring地址 https repo spring io libs release loc
  • 新iPad未到 老iPad价格反弹

    新版水货仍维持5500元高位 CFP供图3月25日 新款iPad2在全球各地陆续上市 但国内迟迟没有消息 让不少苹果粉丝将目光重新转向刚刚降价的一代iPad 然而 最受欢迎的WiFi 16G B版本iPad却因货源不足 已出现价格反弹的现象
  • UDP服务器客户端编程流程

    UDP服务器客户端编程流程 UDP编程流程 UDP服务端代码实现 UDP客户端代码实现 UDP服务端客户端代码详解 UDP编程流程 UDP提供的是无连接 不可靠的 数据报服务 UDP是尽最大能力进行传输 但是并不能保证可靠性 TCP的可靠性
  • 普通人学Python有什么用?能干什么?

    我想学 Python 但是学完 Python 后都能干啥 相信不少 Python 的初学者 都会遇到上面的这些问题 很多的答案会涌入我们的脑海 因为Python实在是能做太多事情了 但是慢慢静下心来思考 我发现Python主要有三个方面的应
  • 使用ASM编写 打印方法运行的时间 代码分析

    请先简单阅读下原文代码 https blog csdn net weixin 44618248 article details 107086410 可以对照源代码在阅读本文同时可以看得更清晰一些 注 以下属于个人学习 理解 如果偏颇过深 非
  • Centos上用yum命令进行更新

    最近接触Centos 这个系统相当于RedHat Enterprise的免费版 很好很强大 刚刚接触 所以记录一下在centos上做更新的方法 我用的是centos5 yum是一个很好的管理rpm包的程序 yum客户端可以通过http ft
  • xsmax进入dfu模式_DFU模式是什么?苹果XR/XS Max的DFU模式进入与退出方法[多图]

    dfu模式是什么 苹果XR XS Max的DFU模式进入与退出方法 经常使用iPhone手机且喜欢玩机的果粉们都知道 苹果手机有一个DFU模式 那么苹果XR XS XS Max系列新款手机也是有这个DFU模式的 这个模式我们一般情况下用不到
  • 如何在vscode上调试php,visual studio code(vscode) 调试php

    2 安装vscode 扩展 php debug 安装步骤见 https marketplace visualstudio com items itemName felixfbecker php debug 3 安装wampserver 我安
  • Wireshark中lua脚本介绍

    Wireshark中lua脚本介绍 概述 Wireshark是非常强大的报文解析工具 是网络定位中不可缺的使用工具 在物联网中很多为自定义协议 wireshark无法解析 此时lua脚本就有了用武之地 Lua是一个脚本语言 不需要编译可以直
  • linux入门---用匿名管道实现一个功能

    前言 在之前的学习中我们知道通信的概念和匿名管道的使用 那么接下来我们就要用匿名管道来实现一个功能 首先我们有很多的函数需要被执行 然后创建一些子进程通过匿名管道方式给子进程传递一些信息 然后子进程就根据这些信息来确定要执行的函数并执行 比
  • Javascript中函数的bind()方法

    bind 方法主要作用是将函数绑定至某个对象 下面例子是在函数f 上调用bind 方法并传入一个对象o作为参数 这个方法将返回一个新的函数 以函数调用的方式 调用新的函数将会把原始的函数f 当做o的方法来调用 传入新函数的任何实参都将传入原
  • 数据仓库介绍与实时数仓案例

    案例与解决方案汇总页 阿里云实时计算产品案例 解决方案汇总 PPT见附件 1 数据仓库简介 数据仓库是一个面向主题的 Subject Oriented 集成的 Integrate 相对稳定的 Non Volatile 反映历史变化 Time
  • laravel框架中实现代码追踪(PHPstorm IDE)

    1 在phpstorm file settings plugins 搜索Laravel Plugin 安装 2 安装ide helper插件 1 composer require barryvdh laravel ide helper 如果
  • 多线程之守护线程

    一 守护线程介绍 线程分为用户线程和守护线程 而守护线程就是为用户线程服务的一种线程 一般具有较低的优先级 用户线程停止 守护线程也就停止了 举个例子 你在看电视 那么你在看电视可以作为一个用户线程 而电视机运行则就是守护线程 而你不看电视
  • Java Web学习笔记

    命令行生成最简单的Java Web项目 1 进入合适的目录 使用maven命令来生成web项目 mvn archetype generate DgroupId com litb aims DartifactId web app Darche
  • C++ map::begin()、end()

    在C 中 std map是一个关联容器 它提供了一种键 值对的存储方式 并按照键的排序顺序进行自动排序 map类提供了一系列的成员函数 其中包括begin 和end 函数 用于获取指向map容器中第一个元素和最后一个元素之后位置的迭代器 下
  • RPC与Netty简介

    RPC 一 Socket介绍 Socket概述 Socket 套接字就是两台主机之间逻辑连接的端点 TCP IP协议是传输层协议 主要解决数据如何在网络中传输 而HTTP是应用层协议 主要解决如何包装数据 Socket是通信的基石 是支持T
  • JsRPC技术介绍及服务搭建

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 前言 Js Rpc意思就是远程调用js代码 全称 Remote