当前位置: 首页 > news >正文

【自执行闭包JS逆向】某网站登录MD5加密分析

文章目录

  • 一、写在前面
  • 二、抓包分析
  • 三、加密函数分析

一、写在前面

   最近工作比较忙,不过还是在督促自己利用有限的时间学习更新一些技术文章。互联网这个行业大家目前也都知道是非常内卷的,所有大家在工作之余养成良好的自主学习习惯是非常好的,多的就不说了,开始本期重点!

分析站点

aHR0cHM6Ly9pLmZrdy5jb20v

在开始之前这里说一下“自执行”“闭包”。它们概念相似,但不完全相同。自执行函数是一种函数,它在定义之后会立即执行,通常使用 (function() { /* code */ })(); 这种形式。闭包是一个更广泛的概念,它指的是一个函数能够访问并保存在其外部定义的变量的能力

二、抓包分析

  这次分析的还是登陆参数,加密的对象是密码pwd。大家一定记得看看我之前写的这篇文章:JS逆向中快速搜索定位加密函数技巧总结

这里我们简单构造一个用户名密码进行登录抓包分析,密码就123456(MD5加密的话16位以49开头、32位e10或E10开头

在这里插入图片描述

老规矩这里我们可以搜索pwd或者我们已经猜到加密方式,根据我上面文章的各个密码特征关键词搜索都是可以的:

在这里插入图片描述

像我上面所示,根据MD5加密算法的关键词1732584193进行搜索也能够快速定位到加密函数位置!

在这里插入图片描述

同样也可以搜索pwd或者断点方式调式找到加密加密位置,发现md5鼠标点击跳转到加密函数

三、加密函数分析

  通过下图我们可以看到md5加密函数是一个自执行闭包函数,这里我们将*jQuery这部分稍微修改一下,无需引入 jQuery,修改加密JS代码如下:

(function(g) {function o(u, z) {var w = (u & 65535) + (z & 65535), v = (u >> 16) + (z >> 16) + (w >> 16);return (v << 16) | (w & 65535)}function s(u, v) {return (u << v) | (u >>> (32 - v))}function c(A, w, v, u, z, y) {return o(s(o(o(w, A), o(u, y)), z), v)}function b(w, v, B, A, u, z, y) {return c((v & B) | ((~v) & A), w, v, u, z, y)}function i(w, v, B, A, u, z, y) {return c((v & A) | (B & (~A)), w, v, u, z, y)}function n(w, v, B, A, u, z, y) {return c(v ^ B ^ A, w, v, u, z, y)}function a(w, v, B, A, u, z, y) {return c(B ^ (v | (~A)), w, v, u, z, y)}function d(F, A) {F[A >> 5] |= 128 << ((A) % 32);F[(((A + 64) >>> 9) << 4) + 14] = A;var w, z, y, v, u, E = 1732584193, D = -271733879, C = -1732584194, B = 271733878;for (w = 0; w < F.length; w += 16) {z = E;y = D;v = C;u = B;E = b(E, D, C, B, F[w], 7, -680876936);B = b(B, E, D, C, F[w + 1], 12, -389564586);C = b(C, B, E, D, F[w + 2], 17, 606105819);D = b(D, C, B, E, F[w + 3], 22, -1044525330);E = b(E, D, C, B, F[w + 4], 7, -176418897);B = b(B, E, D, C, F[w + 5], 12, 1200080426);C = b(C, B, E, D, F[w + 6], 17, -1473231341);D = b(D, C, B, E, F[w + 7], 22, -45705983);E = b(E, D, C, B, F[w + 8], 7, 1770035416);B = b(B, E, D, C, F[w + 9], 12, -1958414417);C = b(C, B, E, D, F[w + 10], 17, -42063);D = b(D, C, B, E, F[w + 11], 22, -1990404162);E = b(E, D, C, B, F[w + 12], 7, 1804603682);B = b(B, E, D, C, F[w + 13], 12, -40341101);C = b(C, B, E, D, F[w + 14], 17, -1502002290);D = b(D, C, B, E, F[w + 15], 22, 1236535329);E = i(E, D, C, B, F[w + 1], 5, -165796510);B = i(B, E, D, C, F[w + 6], 9, -1069501632);C = i(C, B, E, D, F[w + 11], 14, 643717713);D = i(D, C, B, E, F[w], 20, -373897302);E = i(E, D, C, B, F[w + 5], 5, -701558691);B = i(B, E, D, C, F[w + 10], 9, 38016083);C = i(C, B, E, D, F[w + 15], 14, -660478335);D = i(D, C, B, E, F[w + 4], 20, -405537848);E = i(E, D, C, B, F[w + 9], 5, 568446438);B = i(B, E, D, C, F[w + 14], 9, -1019803690);C = i(C, B, E, D, F[w + 3], 14, -187363961);D = i(D, C, B, E, F[w + 8], 20, 1163531501);E = i(E, D, C, B, F[w + 13], 5, -1444681467);B = i(B, E, D, C, F[w + 2], 9, -51403784);C = i(C, B, E, D, F[w + 7], 14, 1735328473);D = i(D, C, B, E, F[w + 12], 20, -1926607734);E = n(E, D, C, B, F[w + 5], 4, -378558);B = n(B, E, D, C, F[w + 8], 11, -2022574463);C = n(C, B, E, D, F[w + 11], 16, 1839030562);D = n(D, C, B, E, F[w + 14], 23, -35309556);E = n(E, D, C, B, F[w + 1], 4, -1530992060);B = n(B, E, D, C, F[w + 4], 11, 1272893353);C = n(C, B, E, D, F[w + 7], 16, -155497632);D = n(D, C, B, E, F[w + 10], 23, -1094730640);E = n(E, D, C, B, F[w + 13], 4, 681279174);B = n(B, E, D, C, F[w], 11, -358537222);C = n(C, B, E, D, F[w + 3], 16, -722521979);D = n(D, C, B, E, F[w + 6], 23, 76029189);E = n(E, D, C, B, F[w + 9], 4, -640364487);B = n(B, E, D, C, F[w + 12], 11, -421815835);C = n(C, B, E, D, F[w + 15], 16, 530742520);D = n(D, C, B, E, F[w + 2], 23, -995338651);E = a(E, D, C, B, F[w], 6, -198630844);B = a(B, E, D, C, F[w + 7], 10, 1126891415);C = a(C, B, E, D, F[w + 14], 15, -1416354905);D = a(D, C, B, E, F[w + 5], 21, -57434055);E = a(E, D, C, B, F[w + 12], 6, 1700485571);B = a(B, E, D, C, F[w + 3], 10, -1894986606);C = a(C, B, E, D, F[w + 10], 15, -1051523);D = a(D, C, B, E, F[w + 1], 21, -2054922799);E = a(E, D, C, B, F[w + 8], 6, 1873313359);B = a(B, E, D, C, F[w + 15], 10, -30611744);C = a(C, B, E, D, F[w + 6], 15, -1560198380);D = a(D, C, B, E, F[w + 13], 21, 1309151649);E = a(E, D, C, B, F[w + 4], 6, -145523070);B = a(B, E, D, C, F[w + 11], 10, -1120210379);C = a(C, B, E, D, F[w + 2], 15, 718787259);D = a(D, C, B, E, F[w + 9], 21, -343485551);E = o(E, z);D = o(D, y);C = o(C, v);B = o(B, u)}return [E, D, C, B]}function p(v) {var w, u = "";for (w = 0; w < v.length * 32; w += 8) {u += String.fromCharCode((v[w >> 5] >>> (w % 32)) & 255)}return u}function j(v) {var w, u = [];u[(v.length >> 2) - 1] = undefined;for (w = 0; w < u.length; w += 1) {u[w] = 0}for (w = 0; w < v.length * 8; w += 8) {u[w >> 5] |= (v.charCodeAt(w / 8) & 255) << (w % 32)}return u}function k(u) {return p(d(j(u), u.length * 8))}function f(w, z) {var v, y = j(w), u = [], x = [], A;u[15] = x[15] = undefined;if (y.length > 16) {y = d(y, w.length * 8)}for (v = 0; v < 16; v += 1) {u[v] = y[v] ^ 909522486;x[v] = y[v] ^ 1549556828}A = d(u.concat(j(z)), 512 + z.length * 8);return p(d(x.concat(A), 512 + 128))}function t(w) {var z = "0123456789abcdef", v = "", u, y;for (y = 0; y < w.length; y += 1) {u = w.charCodeAt(y);v += z.charAt((u >>> 4) & 15) + z.charAt(u & 15)}return v}function m(u) {return unescape(encodeURIComponent(u))}function q(u) {return k(m(u))}function l(u) {return t(q(u))}function h(u, v) {return f(m(u), m(v))}function r(u, v) {return t(h(u, v))}g.md5 = function(v, w, u) {if (!w) {if (!u) {return l(v);} else {return q(v);}}if (!u) {return r(w, v);} else {return h(w, v);}}
}(typeof window !== "undefined" ? window : this));

最后我们使用JS调试工具就能验证了,这里我直接在控制台把扣出来的JS加密函数贴进去调用测试如下:

在这里插入图片描述

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

相关文章:

【自执行闭包JS逆向】某网站登录MD5加密分析

文章目录 一、写在前面二、抓包分析三、加密函数分析 一、写在前面 最近工作比较忙&#xff0c;不过还是在督促自己利用有限的时间学习更新一些技术文章。互联网这个行业大家目前也都知道是非常内卷的&#xff0c;所有大家在工作之余养成良好的自主学习习惯是非常好的&#xff…...

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt &#xff1a;正向提示词 &am…...

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…...

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决

CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决 虚拟机配置多个网络地址&#xff0c;结果同时只能有一个ip是通的&#xff0c; 原因&#xff1a;Linux默认开启了反向路由检查导致的&#xff0c;比如说外面访问eth0的网卡&#xff0c;而网关在eth1上&#xff0c;又或者从…...

关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法

具体 Vue 代码演示&#xff1a; test.vue 文件演示&#xff1a; <template> <!-- 方法一 --> <div>{{ test.data 0 ? 男 : 女}}</div><!-- 方法二 --> <div>{{ test.data 0 ? 男 : }}{{ test.data 1 ? 女 : }}{{ test.d…...

mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

注意 mac 自带 openssl 所以没必要像 windows 一样先安装 openssl&#xff0c;直接生成即可 生成 ssl/自签名 证书 生成 key # 生成rsa私钥&#xff0c;des3算法&#xff0c;server_ssl.key是秘钥文件名 1024位强度 openssl genrsa -des3 -out server_ssl.key 1024让输入两…...

Unix System V BSD POSIX 究竟是什么?

学习Linux系统,很多同学对这些单词概念很模糊、一脸懵逼! 黄老师觉得,了解了历史,才会真正明白这些单词的含义,坐稳、黄老师发车了!!! 首先介绍一下什么是Unix? UNIX(非复用信息和计算机服务,英语:Uniplexed Information and Computing Service,UnICS)取“UNI…...

数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式

文章目录 一、目标检测1.1 labelImg1.2 介绍1.3 安装1.4 使用1.5 转换1.6 验证 二、图像分割2.1 labelme2.2 介绍2.3 安装2.4 使用2.5 转换2.6 验证 一、目标检测 1.1 labelImg 1.2 介绍 labelImg是一个开源的图像标注工具&#xff0c;用于创建图像标注数据集。它提供了一个…...

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树&#xff08;Red Black Tree&#xff09; 是一种自平衡二叉查找树&#xff0c;在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有…...

获取对象占用内存

添加依赖 <dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version> </dependency>添加vm启动参数 --add-opens java.base/java.langALL-UNNAMED --add-opens java.ba…...

mysql UUID 作为主键的问题

UUID 在MySQL中&#xff0c;可以使用UUID()函数来生成一个新的UUID值。该函数的返回值是一个字符串类型&#xff0c;表示一个32位的十六进制数字&#xff0c;其中包含4个连字符“-”&#xff0c;例如&#xff1a;“6ccd780c-baba-1026-9564-0040f4311e29”。 varchar(32) 32*4…...

2023高教社杯全国大学生数学建模竞赛选题建议

如下为C君的2023高教社杯全国大学生数学建模竞赛&#xff08;国赛&#xff09;选题建议&#xff0c; 提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 D、E题推荐选E题&#xff0c;后续会直接更新E论文和思路&#xf…...

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特...

低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证

Nordic Semiconductor官方宣布与HooRii Tech&#xff08;和众科技&#xff09;携手合作&#xff0c;基于 Nordic nRF52840 芯片平台打造的 HRN71模组&#xff0c;成功赋能低功耗窗帘电机品牌发布Matter产品。低功耗窗帘电机获得 Matter 1.1 认证意味着它具有与其他 Matter 认证…...

如何修复老照片?老照片修复翻新的方法

老旧照片&#xff0c;尤其是黑白照片&#xff0c;往往因为年代久远、保存方式不当等原因而出现褪色、污损、划痕等问题&#xff0c;会比较难以修复&#xff0c;就算是技术精湛的专业修复师&#xff0c;也是需要投入极大时间精力的&#xff0c;效果也是不可预料的。 修复老照片…...

MySQL:区分大小写

查看MySQL版本 show variables; 1、查看 MySQL 当前的区分大小写设置&#xff1a; SHOW VARIABLES LIKE lower_case_table_names; 或者 show Variables like %table_names 2、更改大小写敏感设置&#xff1a; 在 MySQL 5.7 中&#xff0c;更改大小写敏感设置要求修改配置文件 …...

刷题笔记19——优势洗牌和去重保持字典序

摆出无比亲密的态度&#xff0c;装模作样地与对方套近乎&#xff0c;频繁地联系对方。这都说明他们并不相信自己得到了对方的信赖&#xff0c;若是互相信赖&#xff0c;便不会依赖亲密的感觉。在外人看来&#xff0c;反而显得冷淡。 ——尼采《人性的&#xff0c;太人性的》 ha…...

星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;十&#xff09;--鼠道 星际争霸之小霸王之小蜜蜂&#xff08;九&#xff09;--狂鼠之灾 星际争霸之小霸王之小蜜蜂&#xff08;八&#xff09;--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂&#xff08;七&#xff09;--消失…...

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…...

C#上位机开发目录

C#上位机序列1: 多线程&#xff08;线程同步&#xff0c;事件触发&#xff0c;信号量&#xff0c;互斥锁&#xff0c;共享内存&#xff0c;消息队列&#xff09; C#上位机序列2: 同步异步(async、await) C#上位机序列3: 流程控制&#xff08;串行&#xff0c;并行&#xff0c…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...