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

news2024/10/7 17:32:40

前言

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

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

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

    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后,安装运行所需要的环境
npm i express
npm i body-parser
npm i fox-wamp
npm i autobahn
2.修改 catserver.js 代码中的ip和端口,端口尽量修改为5位数的端口避免端口被占用,修改完成后,直接运行
node catserver.js
 3.网页控制台运行CatWebService.js

 4.注册方法,这里我注册的是已经还原重写的加密主函数 encryptMain
//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的时候只需要在数组中放一个参数就可以

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)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云游数智农业世界,体验北斗时空智能

今日,2023年中国国际农业机械展览会在武汉正式拉开帷幕,众多与会者云集,各类农机产品纷呈,盛况空前。 千寻位置作为国家北斗地基增强系统的建设与运营方,在中国国际农业机械展览会上亮相,以「北斗时空智能 …

基于pyenv和virtualenv搭建python多版本虚拟环境

pyenv简介 由于Python的依赖是基于site的,这对于生产环境来说,是一种简单而正确的方式,然而,对于我们的开发环境,基于这样的管理方式,带来了可怕的第三方依赖管理的难题,virtualenv适时出现了&a…

【AICFD案例教程】锥形燃烧器燃烧仿真

AICFD是由天洑软件自主研发的通用智能热流体仿真软件,用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程,帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

Linux入门攻坚——5、find,locate,特殊权限,磁盘管理初识

文件查找:在文件系统上查找符合条件的文件。 工具:locate——非实时查找(数据库查找,基于索引,索引需要维护,有间隔,所以有不一致的情况存在)。find——实时查找 locate&#xff1…

Leetcode—26.删除有序数组中的重复项【简单】

2023每日刷题&#xff08;十&#xff09; Leetcode—26.删除有序数组中的重复项 双指针法实现代码 int removeDuplicates(int* nums, int numsSize){int i 0;int j 1;while(j < numsSize) {if(nums[j] ! nums[i]) {nums[i] nums[j];}j;}return i 1; } 运行结果 之后我…

算法通关村第19关【黄金】| 继续盘点高频动态规划dp问题

回文串专题 1.最长回文串 思路&#xff1a; 确定dp&#xff1a;dp[i][j]子串是否是回文串 确定递推公式&#xff1a; 例如&#xff1a;aa|cbc|aa dp[2][4] dp[3][3] true 如果s[i] s[j] 那么 dp[i][j] dp[i1][j-1]否则dp[i][j] false 确定初始化&#xff1a;dp[i][i] …

Ubuntu ARMv8编译Qt源码以及QtCreator

最近需要在NVIDIA小盒子上面跑一个程序&#xff0c;一开始想着在Ubuntu x64下交叉编译一版&#xff0c;后来发现libqxcb.so 这个库在configure时就会一直报错&#xff0c;多方查找怀疑可能是由于硬件不支持在x64环境下编译AMR架构的xcb库。 所以最后在ARM下直接编译Qt源码了&am…

ONNX: export failure ❌ 0.0s: Unsupported ONNX opset version: 17

python export.py --weights runs/train/exp6/weights/best.pt --include onnx yolov5 训练好的pt文件导出onnx 导出失败 异常信息&#xff1a; Fusing layers… YOLOv5s summary: 157 layers, 7012822 parameters, 0 gradients, 15.8 GFLOPs PyTorch: starting from runs/tra…

vue中时间控件

//组件 <template><div class"home-time"><div class"tab"><el-radio-group v-model"radio" change"radioChange"><el-radio-button label"1">天</el-radio-button><el-radio-butto…

蕉下冲锋衣:过冬利器还是昙花一现?

“双11”前夕&#xff0c;靠防晒单品小黑伞起家的蕉下上新“过冬”产品冲锋衣。 此前&#xff0c;蕉下于2022年4月和10月分别向港交所递交招股书&#xff0c;拟冲刺“中国城市户外第一股”&#xff1b;截止目前&#xff0c;其IPO申请状态已转为“失效”。 「不二研究」据蕉下…

记一次 .Net+SqlSugar 查询超时的问题排查过程

环境和版本&#xff1a;.Net 6 SqlSuger 5.1.4.* &#xff0c;数据库是mysql 5.7 &#xff0c;数据量在2000多条左右 业务是一个非常简单的查询&#xff0c;代码如下&#xff1a; var list _dbClient.Queryable<tb_name>().ToList(); tb_name 下配置了一对多的关系…

Calibre软件学习

Mentor calibre 软件 版图物理验证主要包括&#xff1a; ①设计规则检查&#xff08; DRC &#xff09; ②电学规则检查&#xff08; ERC &#xff09; ③版图与电路图一致性检查 ( LVS) LVS 版图与电路图一致性检查 ( Layout Versus Schematic, LVS) 的目的在于检查人工…

echarts案例之日历

一、此案例基于Vue3ts&#xff0c;效果展示&#xff1a; 二、单个属性的值&#xff1a; 1、visualMap.pieces 根据值自定义每个小块的颜色 pieces: [ { min: 0, // 最小值 max: 20, // 最大值 label: 未统计, color: rgba(27, 61, 71,1), }, { min: 20, max: 50, label: 优, …

机器学习第一周

一、概述 机器学习大致会被划分为两类&#xff1a;监督学习&#xff0c;无监督学习 1.1 监督学习 监督学习其实就是&#xff0c;给计算机一些输入x和正确的输出y&#xff08;训练数据集&#xff09;&#xff0c;让他总结x->y的映射关系&#xff0c;从而给他其他的输入x&a…

linux套接字选项API

获取套接字的选项值(getsockopt) 【头文件】 #include <sys/types.h> #include <sys/socket.h> 【函数原型】 int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen); 【函数功能】 用于获取一个套接字的选项 【参数含义】 […

视图,触发器与存储过程

python操作MySQL SQL的由来: MySQL本身就是一款C/S架构&#xff0c;有服务端、有客户端&#xff0c;自身带了有客户端&#xff1a;mysql.exe python这门语言成为了MySQL的客户端(对于一个服务端来说&#xff0c;客户端可以有很多) 操作步骤&#xff1a; 1. 先链接MySQL …

Compose横向列表和网格列表

横向列表LazyRow LazyRow和LazyColumn使用类似。 /*** 横向列表LazyRow*/ Composable fun LazyRowTest() {val context LocalContext.currentval dataList arrayListOf<Int>()for (index in 1..50) {dataList.add(index)}LazyRow {items(dataList) { data ->Box(mo…

大数据可视化BI分析工具Apache Superset实现公网远程访问

大数据可视化BI分析工具Apache Superset实现公网远程访问 文章目录 大数据可视化BI分析工具Apache Superset实现公网远程访问前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网…

CentOS 安装 tomcat 并设置 开机自启动

CentOS 安装 tomcat 并设置 开机自启动 下载jdk和tomcat curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz curl https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz解压jdk和tomcat并修改目录名称 tar -z…

Linux下利用Docker快速部署Kafka

1.摘要 在本文中,介绍了利用Docker安装Kafka的基础环境要求; 利用Docker安装zookeeper过程; 利用Docker安装Kafka过程;进入容器配置生产者和消费者过程; 演示生产者和消费者通讯; 故障排查方法。 2.基础环境准备 提前准备一台安装Linux系统的主机或虚拟机,我这里安装的是Ubu…