某网站DES加密逆向分析实战

news2024/11/19 20:37:56

文章目录

  • 一、抓包分析
  • 二、加密分析
  • 一、重写加密

一、抓包分析


分析站点

aHR0cDovL2VpcC5jaGFuZmluZS5jb20v

首先我们提交一下登陆信息:

在这里插入图片描述

搜索j_password查看加密函数:

在这里插入图片描述

把上图搜索到的encryptPassword函数拿出来分析一下:

function encryptPassword(){ 
	document.forms[0].j_password.value = desEncrypt(document.forms[0].j_password.value);
}
  • 根据desEncrypt函数名推测是DES的对称加密方式
  • desEncrypt函数参数是用户填写的,加密函数只需要一个参数

二、加密分析


我们根据断点提示进入desEncrypt函数:

在这里插入图片描述

代码如下:

function desEncrypt(value, xForm, type) {
    if (_0(xForm)) {
        return value
    } else {
        var keyObj = {};
        if (type == null || "aes" == type.toLowerCase()) {
            keyObj = SECURITYKEY.get();
            value = CryptoJS.AES.encrypt(value, CryptoJS.enc.Utf8.parse(keyObj.key), {
                iv: CryptoJS.enc.Utf8.parse(keyObj.iv)
            }).toString()
        } else {
            keyObj = SECURITYKEY.get('des');
            value = CryptoJS.DES.encrypt(value, CryptoJS.enc.Hex.parse(keyObj.key), {
                iv: CryptoJS.enc.Hex.parse(keyObj.iv)
            })
        }
        return keyObj.security + value
    }
}

一看确定是DES加密方式,通过分析上面的代码可知,在里面只使用了第一个参数即value,xForm和type都没有使用,根据上面代码逻辑分析,只需要把上面的代码进行改写成需要的即可

虽然我们只需要传一个密码明文,但是在上面加密函数里面还需要keyObj.keykeyObj.iv两个参数,而这两个参数值皆来源于keyObj,即SECURITYKEY.get()

在上面代码的上文中找SECURITYKEY.get()相关的代码如下所示:

_2: function() {
        $.ajax({
            async: false,
            dataType: "script",
            url: Com_Parameter.ResPath + "js/session.jsp?_=" + new Date().getTime()
        });
        var str = "";
        if (window.getSessionId) {
            str = getSessionId()
        }
        return str
    },
    supportEncodings: function() {
        return ["aes", "des"]
    },
    get: function(encodeType) {
        var str = SECURITYKEY._2();
        if (encodeType == null || encodeType == 'aes') {
            if (str.length < 32) {
                str += "abcdefghijklmnopqrstuvwxyz1234567890"
            }
            str = str.toUpperCase();
            var key = {};
            key.key = str.substring(0, 16);
            key.iv = str.substring(16, 32);
            key.security = "\u4435\u5320\u4d35"
        } else {
            if (str.length < 16) {
                str += "abcdefghijklmnopqrstuvwxyz"
            }
            str = str.toUpperCase();
            var key = {};
            key.key = SECURITYKEY.toHexString(str.substring(0, 8));
            key.iv = SECURITYKEY.toHexString(str.substring(8, 16));
            key.security = "\u4445\u5320\u4d45"
        }
        return key
    },

通过上面的代码可知,SECURITYKEY.get()返回的是一个key对象,而key这个对应保存了key,iv和security,这三项就是加密所需要用到的

key,iv和security的值通过下面的代码可以确定:

var key = {};
        key.key = str.substring(0, 16);
        key.iv = str.substring(16, 32);
        key.security = "\u4435\u5320\u4d35"
    而str字符串则是由SECURITYKEY._2()生成的。
    SECURITYKEY._2()对应的代码是:
        if (window.getSessionId) {
            str = getSessionId()
        }

也就是说str是它的SessionId,如下图所示:

在这里插入图片描述

这个网站用的是DES对称加密方式,加密时用到两个参数keyiv,以及把加密后的字符串与security拼接成最终加密字符串,而这三个相关的参数是把该网站的SessionId进行处理得到的。所以,最终要实现加密只需要通过python的requests打开登录页面获取SessionId值就行

一、重写加密


改写加密函数代码:

function getPwd(value)
{
    var str = '46D6F0AC53B420C83D055ED3486F601F';
    var key = str.substring(0, 16);
    var iv = str.substring(16, 32);
    var security = "\u4435\u5320\u4d35"
    if (str.length &lt; 32) {
        str += "abcdefghijklmnopqrstuvwxyz1234567890"
    }
    value = CryptoJS.AES.encrypt(value, CryptoJS.enc.Utf8.parse(key), {
        iv: CryptoJS.enc.Utf8.parse(iv)
    }).toString()
    return security + value    
}

也可以把整个文件代码复制过来,然后调用里面的加密函数。这样更省事

如下扣取加密代码:

在这里插入图片描述

把文件aes.js整个代码复制过来放到getPwd(value)函数上面进行调用

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

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

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

相关文章

微客云直充卡券优惠话费充值接口开发稳定高效

微客云直充卡券话费 开发团队致力于此模块生命力至少3-5年 此模块以资源种类&#xff0c;官方直联接口为优势&#xff0c;不纯以软件更新为主&#xff0c;力争版本精准化服务用户 单独直充卡券话费系统&#xff0c;直接完成对各种消费场景的流量变现&#xff0c;更加开放与链路…

【RuoYi移动端】uniApp导入和引用uView2.0插件

一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI&#xff0c;是 uni-app 生态最优秀的 UI 框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水https://uviewui.com/components/install.html 也可直…

香港服务器怎么打开SSH

​  SSH是一种远程登录协议&#xff0c;可以通过加密方式在网络上安全地传输数据。它允许用户在远程服务器上执行命令&#xff0c;管理文件和目录&#xff0c;并进行其他系统管理任务。 如何打开SSH服务? 1.确认已安装OpenSSH服务器&#xff1a; 你可以通过命令sudoapt-geti…

爬虫逆向实战(二十二)--某恩数据电影票房

一、数据接口分析 主页地址&#xff1a;某恩数据 1、抓包 通过抓包可以发现数据接口是API/GetData.ashx 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 通过查看“响应”模块可以发现&#xff0c;响应是…

apache的ab工具测试网页优化效果速度以及服务器承载

今天为大家介绍一款apache自带的一种的测试网页优化效果速度以及服务器承载的工具——ab.exe。 大家在工作中或者开发中可以使用apache的ab工具来测试自己的网站并发量大小&#xff0c;和某个页面的访问时间。 一、基本用法 如果你是用的是apache的话&#xff0c;那么只要进…

opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别

1.二维码的生成 废话不多说&#xff0c;直接上代码 # 生成二维码 import qrcode# 二维码包含的示例数据 data "B0018" # 生成的二维码图片名称 filename "qrcode.png" # 生成二维码 img qrcode.make(data) # 保存成图片输出 img.save(filename)img.sh…

Windows操作系统打开Sketch文件的实用技巧!

在设计工作中&#xff0c;Sketch是一款非常受欢迎的矢量绘图软件&#xff0c;但由于它只能兼容Mac操作系统&#xff0c;对设计师有一定的局限性&#xff0c;Sketch的使用问题就成了困扰。今天本文将为大家分享一个在Windows系统也能打开Sketch文件的操作方法&#xff0c;一起来…

大模型+学习机,是概念游戏还是双向奔赴?

众所周知&#xff0c;2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入&#xff0c;或宣称布局相关领域&#xff0c;或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退&#xff0c;属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…

【学习FreeRTOS】第13章——FreeRTOS队列

1.队列简介 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09; FreeRTOS基于队列&#xff0c; 实现了多种功能&#xff0c;其中包括队列集、互斥信号量、计数型信号量、二值信号量、 递归互斥信号量&#xff0c;因此很有必要深入了…

手把手教你部署Jenkins教程,小白也能学会(多图预警)!

背景 公司的前端、后端构建及部署工作都是人工去做&#xff0c;随着业务扩大&#xff0c;项目迭代速度变快&#xff0c;人员增多&#xff0c;各种问题都暴露出来&#xff0c;将通过一个简单案例分享一下基于Jenkins的前后端自动化工作流搭建的过程&#xff0c;搭建完这套工作流…

做好客户服务的方法五部曲!

在每个商业领域中&#xff0c;提供优质的客户服务是成功的一个关键因素。无论企业的规模大小如何&#xff0c;都需要始终坚守为客户提供长期高质量服务的原则&#xff0c;以赢得客户信任与忠诚。今天&#xff0c;就让我们进一步探讨一下&#xff0c;客户服务有哪些方法技巧&…

快速学习制作数据查询系统的方法

无论是老师、企业还是机构&#xff0c;都会有信息查询的需求。例如&#xff0c;老师可能需要制作一个成绩查询、等级查询、分宿舍分寝室查询、分班查询、录取情况查询、新生报名查询等系统&#xff0c;让学生家长可以自行查询。 同样地&#xff0c;企业或机构也希望制作工资条查…

规划 2023 年拥有实体店的 DTC 品牌的发展方向

2023 年&#xff0c;DTC 品牌应谨慎考虑扩张实体店&#xff0c;以此作为扩大影响力和服务客户群的另一种方式。只有当企业在数字领域取得一定程度的成功&#xff0c;并且拥有适当管理数字和实体店的资源时&#xff0c;才应该进行这种扩张。这里的前提是&#xff0c;如果生意不好…

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…

C语言易错点整理

前言&#xff1a; 本文涵盖了博主在平常写C语言题目时经常犯的一些错误&#xff0c;在这里帮大家整理出来&#xff0c;一些易错点会帮大家标识出来&#xff0c;希望大家看完这篇文章后有所得&#xff0c;引以为戒~ 一、 题目&#xff1a; 解答&#xff1a; 首先在这个程序中…

动捕设备助力打造沉浸式虚拟现实体验

在纪录片《超时空寻找》中&#xff0c;借助了实时动捕设备&#xff0c;基于三维数字人技术进行老战士与历史场景还原&#xff0c;让抗美援朝老战士可以通过虚拟现实技术&#xff0c;跨越时空与战友实现隔空对话。 随着动捕设备的不断发展&#xff0c;虚拟现实技术越来越成熟&a…

clickhouse ssb-dbgen数据构造 及 clickhouse-benchmark简单压测

一、 测试数据构造 1. 数据样例 官方文档有给出一批数据样例。优点是比较真实&#xff0c;缺点是太大了&#xff0c;动辄上百G不适合简单小测试 Anonymized Yandex.Metrica DatasetStar Schema BenchmarkWikiStatTerabyte of Click Logs from CriteoAMPLab Big Data Benchma…

超实用的小红书种草方案分享!纯干货

小红书以“生活、时尚、美妆”等主题内容吸引了大量用户&#xff0c;成为了品牌方的种草宝地。那么&#xff0c;如何在小红书上打造爆款内容&#xff0c;吸引万千粉丝呢&#xff1f;本文伯乐网络传媒将从独特的角度深度剖析小红书种草方案&#xff0c;为你提供新知。 制定小红书…

SEMIDRIVE X9U 插入 USB 不识别调试要点

一、前言 客户用芯驰 X9U 平台做的智能座舱产品&#xff0c;在烧写固件时发现&#xff0c;通过 USB 连接到 SSA 的 USB 接口&#xff0c;Windows 上无法识别出 USB 设备&#xff0c;一直处在 Ready 状态。 二、SEMIDRIVE X9U 插入 USB 不识别调试要点 ① 建议客户测量 SoC 的…