【JS逆向学习】大学竞争力2021排行榜(md5加密)

news2024/11/15 8:27:50
逆向目标
  • 网址:https://www.jizhy.com/44/rank/school
  • 接口:https://www.jizhy.com/open/sch/rank-list
  • 参数:
    • sign
逆向过程

老一套先分析网络请求
在这里插入图片描述
经过比对 payload 参数发现,除了 page、ts、sign 三个参数外,其他参数都是固定不变的

逆向分析

上述三个参数中的 pagets 都很好理解,分别是页数和13位的时间戳,那我们直接分析 sign 参数,先搜索关键字 app_id 因为 app_id 是固定不变的,我们猜测是写死的
在这里插入图片描述
只有一个搜索结果,点击跳转并打上断点,然后点击查看更多,发现断住了,这就是我们要找的入口

var n = Wt(t);
           return n += "&key=" + U,
           t.sign = Xt(n),
           Object.assign(t, e)

其中 U 是固定字符串 "146fd1e66513611ac7af69f21f1d7725"
另外也可以从启动器入口去跟栈分析,这里就不多介绍了,感兴趣的可以看我的其他的 js逆向 相关的文章
在这里插入图片描述
加密的位置找到了,在整个加密运算过程中我们看到很多加密函数进行运算,sign 的长度是 32 位,猜测应该是个 md5 加密,为了验证我们的这一猜想,我们把用于加密的参数拿出来测试一下
在这里插入图片描述

var n =
	"{app_id=98357f659cf8fb6001cff80f7c6b85f2&diploma_id=7&page=7&page_len=20&platform=desktop&ts=1725954922292&v=210&wenli=0}&key=146fd1e66513611ac7af69f21f1d7725";

var CryptoJS = require("crypto-js");
console.log(CryptoJS.MD5(n).toString().toUpperCase());
// 输出如下
>> 7CCFF462B37DBD6E39D8D6F2943F6086

由此可以判断 sign 参数就是一个 md5 加密,分析到这就简单了,下面两种方法任选一种:

  1. 拼接一个排序的字典参数生成一个用于加密的字符串,然后做一个md5加密并把加密字符串转为大写
  2. 扣代码,把加密用到的函数全部扣出来
逆向结果

以上就是一个完整的分析过程,扣代码有几个点需要注意一下

var St = 0;
var Vt = Et;
var ht = {
	a: function (t) {
		return typeof t;
	},
};

以下是完整的加密逻辑

function Wt(t) {
	var e = Object.prototype.toString.call(t),
		n = Object.keys(t);
	n.sort(function (a, b) {
		return (
			"[object Array]" === e && ((a = +a), (b = +b)),
			a < b ? -1 : a > b ? 1 : 0
		);
	});
	for (var r, param = [], o = 0, c = n; o < c.length; o++) {
		var l = c[o],
			data = t[l];
		null == data && (t[l] = data = ""),
			(data || 0 === data) &&
				("object" === Object(ht.a)(data) && (data = Wt(data)),
				param.push("".concat(l, "=").concat(data)));
	}
	return (
		"[object Object]" === e
			? ((r = param.join("&")), (r = "{".concat(r, "}")))
			: "[object Array]" === e
			? ((r = param.join(",")), (r = "[".concat(r, "]")))
			: (r = param.join("&")),
		r
	);
}

function Xt(t) {
	var e = Vt(t);
	return (e = e.toUpperCase());
}

function Et(s) {
	return Tt(At(Rt(s)));
}
function At(s) {
	return Dt(Nt(Lt(s), 8 * s.length));
}
St = 0;
function Tt(input) {
	for (
		var t,
			e = St ? "0123456789ABCDEF" : "0123456789abcdef",
			output = "",
			i = 0;
		i < input.length;
		i++
	)
		(t = input.charCodeAt(i)),
			(output += e.charAt((t >>> 4) & 15) + e.charAt(15 & t));
	return output;
}
function Rt(input) {
	for (var t, e, output = "", i = -1; ++i < input.length; )
		(t = input.charCodeAt(i)),
			(e = i + 1 < input.length ? input.charCodeAt(i + 1) : 0),
			55296 <= t &&
				t <= 56319 &&
				56320 <= e &&
				e <= 57343 &&
				((t = 65536 + ((1023 & t) << 10) + (1023 & e)), i++),
			t <= 127
				? (output += String.fromCharCode(t))
				: t <= 2047
				? (output += String.fromCharCode(
						192 | ((t >>> 6) & 31),
						128 | (63 & t)
				  ))
				: t <= 65535
				? (output += String.fromCharCode(
						224 | ((t >>> 12) & 15),
						128 | ((t >>> 6) & 63),
						128 | (63 & t)
				  ))
				: t <= 2097151 &&
				  (output += String.fromCharCode(
						240 | ((t >>> 18) & 7),
						128 | ((t >>> 12) & 63),
						128 | ((t >>> 6) & 63),
						128 | (63 & t)
				  ));
	return output;
}
function Lt(input) {
	for (var output = Array(input.length >> 2), i = 0; i < output.length; i++)
		output[i] = 0;
	for (i = 0; i < 8 * input.length; i += 8)
		output[i >> 5] |= (255 & input.charCodeAt(i / 8)) << i % 32;
	return output;
}
function Dt(input) {
	for (var output = "", i = 0; i < 32 * input.length; i += 8)
		output += String.fromCharCode((input[i >> 5] >>> i % 32) & 255);
	return output;
}
function Nt(t, e) {
	(t[e >> 5] |= 128 << e % 32), (t[14 + (((e + 64) >>> 9) << 4)] = e);
	for (
		var a = 1732584193,
			b = -271733879,
			n = -1732584194,
			r = 271733878,
			i = 0;
		i < t.length;
		i += 16
	) {
		var o = a,
			c = b,
			l = n,
			f = r;
		(a = qt(a, b, n, r, t[i + 0], 7, -680876936)),
			(r = qt(r, a, b, n, t[i + 1], 12, -389564586)),
			(n = qt(n, r, a, b, t[i + 2], 17, 606105819)),
			(b = qt(b, n, r, a, t[i + 3], 22, -1044525330)),
			(a = qt(a, b, n, r, t[i + 4], 7, -176418897)),
			(r = qt(r, a, b, n, t[i + 5], 12, 1200080426)),
			(n = qt(n, r, a, b, t[i + 6], 17, -1473231341)),
			(b = qt(b, n, r, a, t[i + 7], 22, -45705983)),
			(a = qt(a, b, n, r, t[i + 8], 7, 1770035416)),
			(r = qt(r, a, b, n, t[i + 9], 12, -1958414417)),
			(n = qt(n, r, a, b, t[i + 10], 17, -42063)),
			(b = qt(b, n, r, a, t[i + 11], 22, -1990404162)),
			(a = qt(a, b, n, r, t[i + 12], 7, 1804603682)),
			(r = qt(r, a, b, n, t[i + 13], 12, -40341101)),
			(n = qt(n, r, a, b, t[i + 14], 17, -1502002290)),
			(a = Ft(
				a,
				(b = qt(b, n, r, a, t[i + 15], 22, 1236535329)),
				n,
				r,
				t[i + 1],
				5,
				-165796510
			)),
			(r = Ft(r, a, b, n, t[i + 6], 9, -1069501632)),
			(n = Ft(n, r, a, b, t[i + 11], 14, 643717713)),
			(b = Ft(b, n, r, a, t[i + 0], 20, -373897302)),
			(a = Ft(a, b, n, r, t[i + 5], 5, -701558691)),
			(r = Ft(r, a, b, n, t[i + 10], 9, 38016083)),
			(n = Ft(n, r, a, b, t[i + 15], 14, -660478335)),
			(b = Ft(b, n, r, a, t[i + 4], 20, -405537848)),
			(a = Ft(a, b, n, r, t[i + 9], 5, 568446438)),
			(r = Ft(r, a, b, n, t[i + 14], 9, -1019803690)),
			(n = Ft(n, r, a, b, t[i + 3], 14, -187363961)),
			(b = Ft(b, n, r, a, t[i + 8], 20, 1163531501)),
			(a = Ft(a, b, n, r, t[i + 13], 5, -1444681467)),
			(r = Ft(r, a, b, n, t[i + 2], 9, -51403784)),
			(n = Ft(n, r, a, b, t[i + 7], 14, 1735328473)),
			(a = Ut(
				a,
				(b = Ft(b, n, r, a, t[i + 12], 20, -1926607734)),
				n,
				r,
				t[i + 5],
				4,
				-378558
			)),
			(r = Ut(r, a, b, n, t[i + 8], 11, -2022574463)),
			(n = Ut(n, r, a, b, t[i + 11], 16, 1839030562)),
			(b = Ut(b, n, r, a, t[i + 14], 23, -35309556)),
			(a = Ut(a, b, n, r, t[i + 1], 4, -1530992060)),
			(r = Ut(r, a, b, n, t[i + 4], 11, 1272893353)),
			(n = Ut(n, r, a, b, t[i + 7], 16, -155497632)),
			(b = Ut(b, n, r, a, t[i + 10], 23, -1094730640)),
			(a = Ut(a, b, n, r, t[i + 13], 4, 681279174)),
			(r = Ut(r, a, b, n, t[i + 0], 11, -358537222)),
			(n = Ut(n, r, a, b, t[i + 3], 16, -722521979)),
			(b = Ut(b, n, r, a, t[i + 6], 23, 76029189)),
			(a = Ut(a, b, n, r, t[i + 9], 4, -640364487)),
			(r = Ut(r, a, b, n, t[i + 12], 11, -421815835)),
			(n = Ut(n, r, a, b, t[i + 15], 16, 530742520)),
			(a = Bt(
				a,
				(b = Ut(b, n, r, a, t[i + 2], 23, -995338651)),
				n,
				r,
				t[i + 0],
				6,
				-198630844
			)),
			(r = Bt(r, a, b, n, t[i + 7], 10, 1126891415)),
			(n = Bt(n, r, a, b, t[i + 14], 15, -1416354905)),
			(b = Bt(b, n, r, a, t[i + 5], 21, -57434055)),
			(a = Bt(a, b, n, r, t[i + 12], 6, 1700485571)),
			(r = Bt(r, a, b, n, t[i + 3], 10, -1894986606)),
			(n = Bt(n, r, a, b, t[i + 10], 15, -1051523)),
			(b = Bt(b, n, r, a, t[i + 1], 21, -2054922799)),
			(a = Bt(a, b, n, r, t[i + 8], 6, 1873313359)),
			(r = Bt(r, a, b, n, t[i + 15], 10, -30611744)),
			(n = Bt(n, r, a, b, t[i + 6], 15, -1560198380)),
			(b = Bt(b, n, r, a, t[i + 13], 21, 1309151649)),
			(a = Bt(a, b, n, r, t[i + 4], 6, -145523070)),
			(r = Bt(r, a, b, n, t[i + 11], 10, -1120210379)),
			(n = Bt(n, r, a, b, t[i + 2], 15, 718787259)),
			(b = Bt(b, n, r, a, t[i + 9], 21, -343485551)),
			(a = zt(a, o)),
			(b = zt(b, c)),
			(n = zt(n, l)),
			(r = zt(r, f));
	}
	return Array(a, b, n, r);
}
function Mt(q, a, b, t, s, e) {
	return zt(((n = zt(zt(a, q), zt(t, e))) << (r = s)) | (n >>> (32 - r)), b);
	var n, r;
}
function qt(a, b, t, e, n, s, r) {
	return Mt((b & t) | (~b & e), a, b, n, s, r);
}
function Ft(a, b, t, e, n, s, r) {
	return Mt((b & e) | (t & ~e), a, b, n, s, r);
}
function Ut(a, b, t, e, n, s, r) {
	return Mt(b ^ t ^ e, a, b, n, s, r);
}
function Bt(a, b, t, e, n, s, r) {
	return Mt(t ^ (b | ~e), a, b, n, s, r);
}
function zt(t, e) {
	var n = (65535 & t) + (65535 & e);
	return (((t >> 16) + (e >> 16) + (n >> 16)) << 16) | (65535 & n);
}

function Vt(t) {
	var e = !1;
	return function () {
		for (var n = [], r = arguments.length; r--; ) n[r] = arguments[r];
		if (!e) return (e = !0), t.apply(this, n);
	};
}
var Vt = Et;
var ht = {
	a: function (t) {
		return typeof t;
	},
};

var n =
	"{app_id=98357f659cf8fb6001cff80f7c6b85f2&diploma_id=7&page=7&page_len=20&platform=desktop&ts=1725954922292&v=210&wenli=0}&key=146fd1e66513611ac7af69f21f1d7725";
console.log(Xt(n));

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

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

相关文章

操作系统 --- 进程通信(IPC)

目录 一、进程间的通信&#xff1f; 二、为什么进程间通信需要操作系统支持&#xff1f; 三、进程间通信的方法 3.1 共享存储 3.2 消息传递&#xff08;消息队列&#xff09; 3.2.1 直接通信方式【点名道姓的消息传递】 3.2.2 间接通信方式【以“信箱”作为中间实体进…

leetcode:2710. 移除字符串中的尾随零(python3解法)

难度&#xff1a;简单 给你一个用字符串表示的正整数 num &#xff0c;请你以字符串形式返回不含尾随零的整数 num 。 示例 1&#xff1a; 输入&#xff1a;num "51230100" 输出&#xff1a;"512301" 解释&#xff1a;整数 "51230100" 有 2 个尾…

合宙低功耗4G模组Air780EX——硬件设计手册02

在上文我们介绍了合宙低功耗4G模组Air780EX的主要性能和应用接口&#xff0c; 上文链接&#xff1a;合宙低功耗4G模组Air780EX——硬件设计手册01-CSDN博客 本文我们将继续介绍Air780EX的射频接口&#xff0c;电气特性&#xff0c;实网功耗数据&#xff0c;结构规格等内容。 …

如何解决户用光伏项目管理难题?

户用光伏作为分布式能源的重要组成部分&#xff0c;正迎来前所未有的发展机遇。户用光伏项目的复杂性和多样性也给项目管理带来了诸多挑战&#xff0c;包括客户分散、安装周期长、运维难度大、数据监控不及时等问题。为解决这些难题&#xff0c;构建一套高效、智能的户用光伏业…

降维打击 华为赢麻了

文&#xff5c;琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗&#xff1f; 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…

银行用电安全管理难点及解决方案

1引言 科技进步带来丰富的电力资源和更多电气设备&#xff0c;但同时也增加了火灾风险。2020年&#xff0c;中国共发生25.2万起火灾&#xff0c;其中电气原因导致的火灾占33.6%&#xff0c;共8.5万起。电气问题引发的较大火灾占55.4%。线路问题如短路、过负荷和接触不良是主要…

FastAPI 深入学习:利用__call__方法实现动态依赖项

在Python中&#xff0c;__init__ 和 __call__ 是两个特殊的方法&#xff0c;它们在类的上下文中有特定的用途&#xff1a; __init__ 方法&#xff1a; 这是类的初始化方法&#xff0c;当一个实例被创建时&#xff0c;它会被自动调用。它通常用于接收初始化参数并设置实例的初始…

【828华为云征文|华为云Flexus X实例:一键助力中小企业,快速部署个性化网站!】

文章目录 前言搭建自己专属网站准备工作具体操作服务器环境确认进入宝塔软件商店JTBC网站内容管理系统一键部署填写域名放行80端口JTBC安装初始页数据库信息配置管理员信息配置完成安装网站管理后台网站前台 验证后台配置内容前台访问的效果 结语 前言 在云计算盛行的时代&…

宠物空气净化器哪个好?希喂、352、有哈宠物空气净化器测评分享

朋友在三个月前养了一只银渐层&#xff0c;从此进入了幸福的养猫生活&#xff0c;但她最近也跟我说&#xff0c;最近因为猫咪和她男朋友吵架了。 每天下班她男朋友回得都比她早&#xff0c;每次开门看到的就是猫咪的毛发掉得很多&#xff0c;地板上、沙发上甚至厨房里都能看到…

WebGL系列教程四(绘制彩色三角形)

目录 1 前言2 varying变量介绍3 开始绘制3.1 声明顶点着色器3.2 声明片元着色器3.3 创建顶点和颜色的缓冲区3.4 指定变量从缓冲区获取值3.5 效果3.6 varying的内涵3.7 完整代码 4 总结 1 前言 上一篇中我们介绍了如何使用缓冲区来绘制三角形&#xff0c;这一篇我们来讲讲如何给…

《PneumoLLM:利用大型语言模型的力量进行尘肺病诊断》|文献速递--基于深度学习的医学影像病灶分割

Title 题目 PneumoLLM: Harnessing the power of large language model for pneumoconiosis diagnosis 《PneumoLLM&#xff1a;利用大型语言模型的力量进行尘肺病诊断》 01 文献速递介绍 在计算机辅助诊断领域&#xff0c;对医学数据的处理和分析能力至关重要。这不仅有助…

【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】

教师节祝福视频制作教程飞机降落飞机机身AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 下载AE模板 安装AE软件 把AE模板导入AE软件 …

紫色UI趣味测试小程序源码,包含多种评测

紫色UI趣味测试小程序源码&#xff0c;包含多种评测。 该源码里面包含了多种评测,每一种评测都包含大多小细节。 代码下载

springboot网上租房系统---附源码79833

摘 要 如今&#xff0c;房屋作为人类生活的重要场所&#xff0c;在城市中扮演着至关重要的角色。随着城市化进程的加速和流动人口的增多&#xff0c;房屋租赁产业迎来了巨大的发展机遇。然而&#xff0c;在房屋租赁过程中存在着许多繁琐的手续和信息搜索的问题&#xff0c;需要…

抖音电商商品采集接口api 店铺商品列表sku返回值

如今&#xff0c;抖音已经成为国民最受欢迎的APP。因为抖音的存在&#xff0c;我们的生活开始变得更加有趣&#xff0c;同时&#xff0c;抖音带货&#xff0c;抖音duan等等呼之欲出&#xff0c;越来越多的人开始加入到抖音大战中去。在抖音进行带货或者进行短视频创作&#xff…

骨传导耳机哪个牌子值得买?推荐五款表现出色的骨传导耳机!

随着骨传导耳机技术的不断发展&#xff0c;市场呈现出多元化的趋势&#xff0c;但这也使得消费者在挑选时面临更多挑战&#xff0c;特别是如何避免因选择不当而引发的听力问题。目前市场上&#xff0c;部分由非专业厂商或网红快速推出的产品&#xff0c;因技术积累不足、材料选…

巅峰对决:南卡、韶音、墨觉旗舰级骨传导耳机深度评测与全面对比!

在如今的骨传导耳机市场&#xff0c;有许多新手小白想入手骨传导耳机&#xff0c;但是又非常怕自己踩雷。所以就疯狂在网上查攻略等等&#xff0c;也有很多小伙伴来询问我&#xff0c;在现在骨传导耳机市场上热门的南卡、韶音、墨觉哪款比较值得入手啊&#xff1f;那么今天&…

Unity Apple Vision Pro 开发(六):MR 物体交互

XR 开发者社区链接&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程分为上、中、下三个部分&#xff0c;上为公开部分&#xff0c;中和下仅社区可见&#xff0c;需要通过文章开头的链接加入社区。 【上】&#xff08;理…

聚鼎科技:现在做装饰画是靠谱的吗

在生活的各个角落&#xff0c;艺术以多种形式存在着&#xff0c;而装饰画作为其中的一种&#xff0c;一直以其独特的魅力填充着我们的世界。但在这个快速变化的时代&#xff0c;许多人会问&#xff1a;现在做装饰画还是一个靠谱的选择吗? 装饰画的市场依旧充满生机。随着人们对…

docker 复制容器

在 Docker 中复制容器本身并不是直接支持的操作&#xff0c;但你可以通过以下方法来实现类似的效果&#xff1a; 1.将已有的容器提交为镜像 2.以该镜像创建容器 3.开启容器&#xff0c;进入容器内部 一. 使用 Docker 镜像复制容器 首先&#xff0c;你可以将容器的状态保存…