RPC远程调用加密方法获取返回值

前言

从混淆的加密JS中还原了加密参数的具体生成流程,结果想从JS转python的过程中第一步就卡住了。开头密钥JS代码如下,但是水平有限不知道如何转为python实现(如果有大佬知道希望可以评论指点)。利用execjs+jsdom来执行简化还原后的JS代码依旧无法实现。所以只能通过RPC的方式来获取加密参数。

参考视频:分享一个js逆向rpc框架,CatWebRPC_哔哩哔哩_bilibili

框架地址:https://github.com/x0tools/CatWebRPC/tree/main

javascript 复制代码
    var oct = new Uint8Array(16);
    window.crypto.getRandomValues(oct);
    oct = octToBase64(oct);

    var one_key, two_key, encryptDataKey;
    // var oct = "01FI21LlGjk5yKNSchRDKw"; window.crypto.subtle.importKey("jwk", n, r, !0, ["encrypt"]);
    var cpt = window.crypto.subtle;
    var n = {kty: "oct", k: oct};
    var r = "AES-GCM";
    // extractable是false还是true似乎不影响最后结果
    one_key = await cpt.importKey("jwk", n, r, !0, ["encrypt"]);

    var f = {
        alg: "RSA-OAEP-256",
        e: "AQAB",
        kty: "RSA",
        n:"gXXZV1VqZ6k_uQtyJNJy5q-qvKdqrXJNgKUO1aYc1UPBVqlhCP0GPxf-0GSo-LEtArgcbF8-j6_vSLSqztYxxF8og--rB8zAyZ8DXZaugX-UiJDQnoJL_HtXKuwIm9U7oEPoeD6H4ZDcfbsPj77xVn7UA2-a90N4aZqMC8EIfXIy1tqSbSPnxPOaiEmy8xGtG-L3RdCyc7TL0Swd_f0_DjRT6ip91IBlCmquoa-xJgZ9e44PVH4AwdyssiV4ZLEZ5yFcE0zcRb_62kx_TQptidbJ4nHocFVjmUW9YsrAWeKrBmOGZEjO4vbATYs1Yf4vgcH7Ix61EPR5sbDP4SlBWQ"
    };
    var u = {hash: {name: "SHA-256"}, name: "RSA-OAEP"};
    two_key = await cpt.importKey("jwk", f, u, !1, ["wrapKey"]);

    // 生成encryptDataKey, 转换成Uint8Array类型数组
    var wrappingAlgorithm = {name: "RSA-OAEP", hash: {name: "SHA-256"}};
    encryptDataKey = await cpt.wrapKey("raw", one_key, two_key, wrappingAlgorithm);
    encryptDataKey = new Uint8Array(encryptDataKey);

使用教程

我的运行环境:Windows7 + node.js 12.18.4 + python3.7

1.下载 CatWebRPC后,安装运行所需要的环境
bash 复制代码
npm i express
npm i body-parser
npm i fox-wamp
npm i autobahn
2.修改 catserver.js 代码中的ip和端口,端口尽量修改为5位数的端口避免端口被占用,修改完成后,直接运行
bash 复制代码
node catserver.js
3.网页控制台运行CatWebService.js
4.注册方法,这里我注册的是已经还原重写的加密主函数 encryptMain
bash 复制代码
//window.catwampy.register(topic,func,opt)
//topic: 同java包名类似  域.名.方法名
//func: js的function  需要调用的方法
//opt: 同Wampy.js opt参数一致 另外增加了一个concurrency 并发设置 一般不需要设置 或者根据需求填写

//如下 注册了一个encryptMain方法 给定并发(同时的请求)设置为10
window.catwampy.register('cat.rpc.test', encryptMain, { concurrency: 10 });
5.python远程调用获取加密参数

这里我的JS加密主函数只需要传入一个密码参数,所以post的时候只需要在数组中放一个参数就可以

python 复制代码
import requests


def test_rpc():
    headers = {"Content-Type": "application/json"}
    # ["参数1","参数2",1,true,1.1,{}]  //类似json支持不同类型  类似js apply(this,参数数组) 中的参数数组
    data = json.dumps(["test_password"])
    try:
        response = requests.post("http://127.0.0.1:5000/call?topic=cat.rpc.test", headers=headers, data=data)
        print(response.text)
    except Exception as e:
        print(e)

如上图所示,一切正常,在浏览器控制台可以看到调用次数

相关推荐
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
大翻哥哥5 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
疾风铸境6 小时前
qt+halcon开发相机拍照软件步骤
数码相机·qt·halcon·拍照
zhousenshan7 小时前
Python爬虫常用框架
开发语言·爬虫·python
IMER SIMPLE7 小时前
人工智能-python-深度学习-经典神经网络AlexNet
人工智能·python·深度学习
抠脚学代码7 小时前
Ubuntu Qt x64平台搭建 arm64 编译套件
数据库·qt·ubuntu
CodeCraft Studio7 小时前
国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
python·html·word·markdown·国产化·spire.doc·文档格式转换
专注API从业者8 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
java1234_小锋8 小时前
[免费]基于Python的协同过滤电影推荐系统(Django+Vue+sqlite+爬虫)【论文+源码+SQL脚本】
python·django·电影推荐系统·协同过滤
眠りたいです8 小时前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器