【解密】记一次辽宁省某综合实践教学管理平台加解密算法分析

最近接到需求,于是准备弄一下,发现对方整个流程是:先加密在请求,请求得到的数据再进行拼接加密,不过花了2个小时还是完成了解密 哈哈

找到请求发现请求数据加密在这里插入图片描述

在启动器里面发现登录方法
在这里插入图片描述

打印出各个关键变量数据
在这里插入图片描述

检索Encrypt方法

url: "Sys/Login",data: {data: o.default.Encrypt(JSON.stringify({a: t,p: e}), "al_bb#sg9kl^d_qn")}

得到key和iv向量

在这里插入图片描述
发现是AES加密
在这里插入图片描述

python代码

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import jsondef encrypt(data, key, iv):# Convert strings to byteskey_bytes = key.encode('utf-8')iv_bytes = iv.encode('utf-8')data_bytes = data.encode('utf-8')# Pad the datapadded_data = pad(data_bytes, AES.block_size, style='pkcs7')# Create ciphercipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)# Encrypt dataencrypted_bytes = cipher.encrypt(padded_data)# Convert encrypted bytes to uppercase hex stringencrypted_hex = encrypted_bytes.hex().upper()return encrypted_hex# 用户名和密码
t = "20*****211"
e = "******"# 加密前的数据
data_to_encrypt = json.dumps({"a": t,"p": e
})print(data_to_encrypt)# 使用JavaScript中的密钥和IV
key = "***********"
iv =  "***********"# 加密数据
encrypted_data = encrypt(data_to_encrypt, key, iv)# 打印加密后的数据
print("加密后的数据:", encrypted_data)

在这里插入图片描述
加密数据与原数据不太相符,但是请求后结果是一样的,可以返回uid和sid
在这里插入图片描述

以为到这里就完了??
在这里插入图片描述

发现得到的sid和uid没有卵用,那怎么办呢?继续找关联的js

在这里插入图片描述

发现这里有加密方法,

SessionCode: "" != this.GetStorage("sid") ? d.Encrypt("".concat(this.GetStorage("sid"), "$$$$$").concat(this.GetStorage("uid"))) : "",

这不是有手就行?

再次加密一次

假设 sid 是 ‘sjdl_fd0f63aaf4bcd7ad16c1’,uid 是 ‘28ff7e4ac021f4adf2fc’。

拼接字符串
按照代码逻辑,需要将 sid 和 uid 用 $$$$$ 连接起来,形成一个新的字符串:

sid = 'sjdl_fd0f63aaf4bcd7ad16c1'
uid = '28ff7e4ac021f4adf2fc'data_to_encrypt = f"{sid}$$$$${uid}"
print(data_to_encrypt)  # 输出 'sjdl_fd0f63aaf4bcd7ad16c1$$$$$28ff7e4ac021f4adf2fc'

加密字符串
然后使用加密函数对该字符串进行加密。假设你的加密函数与前面的相同:


from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import jsondef encrypt(data, key, iv):key_bytes = key.encode('utf-8')iv_bytes = iv.encode('utf-8')data_bytes = data.encode('utf-8')padded_data = pad(data_bytes, AES.block_size, style='pkcs7')cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)encrypted_bytes = cipher.encrypt(padded_data)encrypted_hex = encrypted_bytes.hex().upper()return encrypted_hex

使用JavaScript中的密钥和IV

key = "**********"
iv = "**********"

加密数据

session_code = encrypt(data_to_encrypt, key, iv)

打印加密后的SessionCode

以下是完整的代码,包括数据准备、字符串拼接和加密过程:


from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import json# 加密函数
def encrypt(data, key, iv):key_bytes = key.encode('utf-8')iv_bytes = iv.encode('utf-8')data_bytes = data.encode('utf-8')padded_data = pad(data_bytes, AES.block_size, style='pkcs7')cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)encrypted_bytes = cipher.encrypt(padded_data)encrypted_hex = encrypted_bytes.hex().upper()return encrypted_hex# sid和uid数据
sid = 'sjdl_fd0f63aaf4bcd7ad16c1'
uid = '28ff7e4ac021f4adf2fc'# 拼接字符串
data_to_encrypt = f"{sid}$$$$${uid}"# 使用JavaScript中的密钥和IV
key = "***********"
iv = "***********"# 加密数据
session_code = encrypt(data_to_encrypt, key, iv)# 打印加密后的SessionCode
print("加密后的SessionCode:", session_code)

运行这段代码,你将得到加密后的 SessionCode。根据你的需求,可以将这个 SessionCode 用于后续的请求或处理。

在这里插入图片描述

我的专栏

《记一次云之家签到抓包》
《记一次视频抓包m3u8解密过程》
《抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos》
《Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
《某课抓包视频 安卓手机:黄鸟+某课app+VirtualXposed虚拟框架》

推荐专栏:

《Python爬虫脚本项目实战》

该专栏往期文章:
《【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)》

欢迎查看我的其它专栏
作者完成过很多独立的项目:例如滇医通等等脚本,但是由于版权的原因下架了,爬虫这一类审核比较严谨,稍有不慎就侵权违规了,所以在保证质量的同时会对文章进行筛选

如果您对爬虫感兴趣请收藏或者订阅该专栏哦《Python爬虫脚本项目实战》,如果你有项目欢迎联系我,我会同步教程到本专栏!

🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

⭐⭐欢迎订阅⭐⭐
在这里插入图片描述

Python爬虫脚本项目实战
在这里插入图片描述

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

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

相关文章

QT之嵌入外部第三方软件到本窗体中

一、前言 使用QT开发,有时需要调用一些外部程序,但是单独打开一个外部窗口有的场合很不合适,最好是嵌入到开发的QT程序界面中。还有就是自己开发的n个程序,一个主程序托n个子程序,为了方便管理将各个程序独立&#xf…

【TS】typescript 获取函数入参类型、返回值类型、promise返回值类型

文章目录 1. 准备工作2. 获取函数入参的类型3. 获取函数返回值类型4. 获取promise返回值类型 1. 准备工作 创建 utils.ts interface User {id: number;name: string;age: number; } interface Params {method: string;url: string; }function getUserList(params: Params,other…

读懂一本书

各位好,今天我们要分享的这本书叫作《读懂一本书》。 很不好意思,书的作者是我。并不是我写的所有的书我都一定要讲,我也有很多合辑类的书籍是从来不讲的,我讲过《可复制的领导力》,讲过《低风险创业》,还有今天的这本《读懂一本书》,都是我有一些原创的观点和价值在里…

真正适合零基础的机器学习入门书!数学不好?python不会?通通都能拿下!!

在数字化时代,机器学习无疑是一股强劲的革新动力,正悄无声息地渗透并革新各行各业,成为推动创新、提升效率的关键法宝。 对于想要涉足这个领域,渴望掌握机器学习精髓的初学者来说,《Python机器学习基础教程》就是一本…

C++ list容器的底层实现

一.list是什么 list 是 C容器中的带头双向链表,头结点不存储数据,头结点的下一个元素是第一个存储数据的元素,头结点的前一个元素连接着最后一个存储数据的元素。(结构如下图所示) 其中链表里每一个节点的结构分为&…

PyQt5开发笔记:2. 2D与3D散点图、水平布局和边框修饰

一、装pyqtgraph和PyOpenGL库 pip install pyqtgraph pip install PyOpenGL 注意:一定不要pip install OpenGL,否则会找不到 二、3D散点图效果 import pyqtgraph as pg import pyqtgraph.opengl as gl import numpy as np# 创建应用程序 app pg.mkQ…

【计算机组成原理 | 第二篇】计算机硬件架构的发展

目录 前言: 冯诺依曼计算机架构 现代计算机架构: 总结: 前言: 在当今数字化时代,计算机硬件不仅是技术进步的见证者,更是推动这一进步的基石。它们构成了我们日常生活中不可或缺的数字生态系统的核心&a…

数据失踪了?小米手机数据恢复并不难,3个方法就能搞定

手机数据就如同我们的“数字生命线”,一旦失去,便仿佛陷入了一片数据的荒漠,感到无助与迷茫。小米手机用户们,你是否曾遭遇过这样的困境:打开手机,却发现重要的照片、联系人、短信等数据不见了,…

Flutter和React Native(RN)的比较

Flutter和React Native(RN)都是用于构建跨平台移动应用程序的流行框架。两者都具有各自的优势和劣势,选择哪个框架取决于您的具体需求和项目。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 以下是…

乐财业:打造财税服务的“硬核“竞争力

乐财业 智慧财税赋能平台 乐财业是目前市面上唯一一家真正实现“业财税”"三位一体全面融合的综合赋能平台,全新打造一站式、流程化、生态化的全产品供应链,立足于企业“业财"融合的发展趋势,凭借20年的财税服务经验,站…

CoreDump使用与实现原理

一、背景 系统发生native crash时,针对内存异常访问、内存踩踏等疑难问题,由于tombstone信息量不足无法精确定位分析这类问题。 二、coredump介绍 2.1 什么是coredump 当用户程序运行过程中发生异常, 程序异常退出时, 由Linux内核把程序当前的内存状…

ss工具dump出vsock 端口号异常分析

端口冲突时,会出现bind fail异常,这时可以用ss --vsock -pl命令dump出所有listen状态的vsock,但实际发现传入的9000端口,dump出来却是10275,如下图: 难道是内核把端口改了?分析内核态源码,ss最终…

模拟器大揭秘:功能多样,热门APP一网打尽

在咱们日常的数字生活中,模拟器这个词儿你可能不陌生,但它到底能干啥?又有哪些好用的模拟器APP呢? 今天,咱们就来聊聊模拟器的功能,并推荐几款热门的模拟器APP,帮助大家更好地利用这一技术。 …

Math/System/Runtime/Object

1、Math (1)常用方法 类型方法名说明public static intabs (int a)返回整数的绝对值public static doublepow (double a,double b)计算a的b次幂的值public static int max (int a,int b) 获取两个int值中的较大值public static intmin (int a,int…

java读取配置文件(包含国家于二字码对应关系文件)

读取配置文件 1.java文件 import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource;import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Map; Slf4j public class…

数据结构笔记之连通图与强连通图

一、引言 在图论中,我们常常会遇到连通图和强连通图的概念。它们描述了图中顶点之间的连接情况,对于理解和分析复杂网络具有重要意义。 二、连通图 定义:若图G中任意两个顶点都是连通的,则称图G为连通图;否则称为非…

如何使用可道云结合内网穿透工具实现远程访问打造私人云盘

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易…

【HTML入门】第十课 - 表格,也就是table标签

这一小节,我们说一下HTML中的表格。比如我们常常看见的学生成绩单,比如excel一个单元格一个单元格的,这些都是表格。 表格的标签名是 table 。 目录 1 表格中的一些子标签 1.1 表头区域 1.2 表格内容区域 1.3 行和列 2 实战一小下 2.…

JavaWeb(一:基础知识和环境搭建)

一、基本概念 1.前言 JavaWeb:在Java中,动态web资源开发网页的技术。 web应用分两种:静态web资源和动态web资源 Ⅰ. 静态web资源(如html 页面): 指web页面中的数据始终是不变。 所有用户看到都是同一个…

python编程实例 输出两个数之间的素数

#输出两个数之间有多少素数 import math mint(input("开始:")) nint(input("结束:")) for i in range(m,n1):for j in range(2,int(math.sqrt(i))1):if i%j0:breakif(jint(math.sqrt(i))):print(str(i),"是一个素数")