码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【解密】记一次辽宁省某综合实践教学管理平台加解密算法分析


    最近接到需求,于是准备弄一下,发现对方整个流程是:先加密在请求,请求得到的数据再进行拼接加密,不过花了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 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

    在这里插入图片描述

    发现这里有加密方法,

    
     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 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

    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爬虫脚本项目实战
    在这里插入图片描述

  • 相关阅读:
    『吴秋霖赠书活动 | 第四期』《Spring Boot微服务实战》
    关于Unity和android互调
    SpringBoot分布式Netty集群,通过Redis发布/订阅广播
    学习java第二天
    MySql——InnoDB引擎总体架构
    Maven-入门
    【Kotlin基础系列】第6章 包与导入
    css自学框架之二级下拉菜单
    Java内存模型与线程(2)
    2000-2023年各省年末常住人口数据(无缺失)
  • 原文地址:https://blog.csdn.net/qq_35230125/article/details/140350101
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号