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

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

找到请求发现请求数据加密

在启动器里面发现登录方法

打印出各个关键变量数据

检索Encrypt方法

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

得到key和iv向量

发现是AES加密

python代码

bash 复制代码
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import json

def encrypt(data, key, iv):
    # Convert strings to bytes
    key_bytes = key.encode('utf-8')
    iv_bytes = iv.encode('utf-8')
    data_bytes = data.encode('utf-8')

    # Pad the data
    padded_data = pad(data_bytes, AES.block_size, style='pkcs7')

    # Create cipher
    cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)

    # Encrypt data
    encrypted_bytes = cipher.encrypt(padded_data)

    # Convert encrypted bytes to uppercase hex string
    encrypted_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

发现这里有加密方法,

bash 复制代码
 SessionCode: "" != this.GetStorage("sid") ? d.Encrypt("".concat(this.GetStorage("sid"), "$$$$$").concat(this.GetStorage("uid"))) : "",

这不是有手就行?

再次加密一次

假设 sid 是 'sjdl_fd0f63aaf4bcd7ad16c1',uid 是 '28ff7e4ac021f4adf2fc'。

拼接字符串

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

bash 复制代码
sid = 'sjdl_fd0f63aaf4bcd7ad16c1'
uid = '28ff7e4ac021f4adf2fc'

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

加密字符串

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

bash 复制代码
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

使用JavaScript中的密钥和IV

bash 复制代码
key = "**********"
iv = "**********"

加密数据

bash 复制代码
session_code = encrypt(data_to_encrypt, key, iv)

打印加密后的SessionCode

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

bash 复制代码
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爬虫脚本项目实战

相关推荐
AI原吾3 小时前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
毕设木哥3 小时前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
weixin_455446173 小时前
Python学习的主要知识框架
开发语言·python·学习
D11_3 小时前
Pandas缺失值处理
python·机器学习·数据分析·numpy·pandas
花生了什么树~.4 小时前
python基础知识(四)--if语句,for\while循环
python
深海呐5 小时前
Android AlertDialog圆角背景不生效的问题
android
IT毕设梦工厂5 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
ljl_jiaLiang5 小时前
android10 系统定制:增加应用使用数据埋点,应用使用时长统计
android·系统定制
花花鱼5 小时前
android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
android
luthane5 小时前
python 实现average mean平均数算法
开发语言·python·算法