JsRPC技术介绍及服务搭建

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


前言:
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逆向的相关技巧和知识的小伙伴们一定要点下关注哟,后期会不定时分享相关干货内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crazy ProMonkey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值