雪重 Python Developer 知识 汗水 灵感 机遇
2022年5月9日   python

实战:python开发jsrpc服务与演示

项目地址:https://github.com/sixgad/py-jsrpc

py-jsrpc

python实现一套轻量、协程异步、websocket远程调用服务,js逆向、混淆加密一把梭,再也不用扣js了。

1.食用方法

git clone git@github.com:sixgad/py-jsrpc.git

pip install -r requirements.txt

2.模块说明

image-websocket

因为是协程,选择了支持asyncio的sanic这个web开发框架,websockets这个websocket包

3.实战

以反爬演示平台下的示例2为例,地址:https://paker.net.cn/anti/2

数据是从这个接口返回,post请求

image-20220509104156226

请求数据如下,page为页码,t为时间戳,sign为加密数据

image-20220509104209816

js请求是从这里发出的

image-20220509104420067

其中encry(String(num))返回了post请求需要的参数

按照以前的方法,追进encry方法里还原加密逻辑算法,或者把encry方法js全部扣下来,用node环境执行。

使用rpc调用+py-jsrpc,只能说不要太简单,具体操作如下:

1.修改client.js

直接拉倒底部,注册action “encry”

//demo
//group很重要,每个项目应该有一个独立的group,比如爬百度时group=baidu-group,爬抖音时group=dy-group,
//可以同时存在多个group,互不影响
var client = new JsClient("ws://localhost:6789/register?group=ws-group&clientId="+guid());
//获取服务器时间
client.registerAction("clientTime",function(request, resolve,reject ){
    resolve(""+new Date());
})
//encry
client.registerAction("encry",function(request,resolve,reject){
    //num 是调用http接口时我们传递过来的参数
    var num = request['num'];
    //直接抄原网页上的调用
    var list = encry(String(num));
    //返回数据
    resolve(list)
})

2.启动web_server.py & 浏览器注入js

启动 http server

python web_server.py

浏览器注入js,在目标网站https://paker.net.cn/anti/2,打开控制台(F12), Console下注入client.js

image-20220509110412875

jsclient open a connection, 说明已经连接成功,可以调用请求http接口获取在浏览器内js执行返回的结果

3.调用接口,获取js执行结果

http接口:http://127.0.0.1:5000/send?group=ws-group&action=encry&num=2

接口里的action,num对应第一步 client.js。

image-20220509110712819

本文只是提供了最简单的demo,jsrpc可以使用的场景很多,比如某数的cookie,某音,98k等等