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

逆向目标
  • 网址: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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗雅颂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值