自己写的加密案例4——某东方课程头部sign加密

网址:aHR0cHM6Ly9kc2FwaS54ZGYuY24vcHJvZHVjdC92Mi9jbGFzcy9zZWFyY2g=

进行抓包分析,发现请求头中由sign加密,简单判断是消息摘要算法。

Sign:d7c68100ca508bb7c8ae284560754303

进行xhr断点,一下子就发现了位置。 s = c.sign,而c = ve(u),现在就是找ve是什么

 

进入ve并打上断点,发现传入的e值为载荷中的值

 

初步复制,并运行,发现缺少Ke,他是一个对象,在上方找到Ke的地方。

 

发现是这种形式,很像webpack,打上断点,并刷新页面。

 

进入n果然发现常见形式,整个复制。并用全局变量得到加载器。 

 

 

var yangxin;
window = global;
!function(e) {function r(r) {for (var n, a, i = r[0], c = r[1], l = r[2], p = 0, s = []; p < i.length; p++)a = i[p],Object.prototype.hasOwnProperty.call(o, a) && o[a] && s.push(o[a][0]),o[a] = 0;for (n in c)Object.prototype.hasOwnProperty.call(c, n) && (e[n] = c[n]);for (f && f(r); s.length; )s.shift()();return u.push.apply(u, l || []),t()}function t() {for (var e, r = 0; r < u.length; r++) {for (var t = u[r], n = !0, i = 1; i < t.length; i++) {var c = t[i];0 !== o[c] && (n = !1)}n && (u.splice(r--, 1),e = a(a.s = t[0]))}return e}var n = {}, o = {0: 0}, u = [];function a(r) {if (n[r])return n[r].exports;var t = n[r] = {i: r,l: !1,exports: {}}, o = !0;try {e[r].call(t.exports, t, t.exports, a),o = !1} finally {o && delete n[r]}return t.l = !0,t.exports}a.e = function(e) {var r = [], t = o[e];if (0 !== t)if (t)r.push(t[2]);else {var n = new Promise((function(r, n) {t = o[e] = [r, n]}));r.push(t[2] = n);var u, i = document.createElement("script");i.charset = "utf-8",i.timeout = 120,a.nc && i.setAttribute("nonce", a.nc),i.src = function(e) {return a.p + "static/chunks/" + ({}[e] || e) + "." + {33: "8d6dd29eda0b766b3652"}[e] + ".js"}(e);var c = new Error;u = function(r) {i.onerror = i.onload = null,clearTimeout(l);var t = o[e];if (0 !== t) {if (t) {var n = r && ("load" === r.type ? "missing" : r.type), u = r && r.target && r.target.src;c.message = "Loading chunk " + e + " failed.\n(" + n + ": " + u + ")",c.name = "ChunkLoadError",c.type = n,c.request = u,t[1](c)}o[e] = void 0}};var l = setTimeout((function() {u({type: "timeout",target: i})}), 12e4);i.onerror = i.onload = u,document.head.appendChild(i)}return Promise.all(r)},a.m = e,a.c = n,a.d = function(e, r, t) {a.o(e, r) || Object.defineProperty(e, r, {enumerable: !0,get: t})},a.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},a.t = function(e, r) {if (1 & r && (e = a(e)),8 & r)return e;if (4 & r && "object" === typeof e && e && e.__esModule)return e;var t = Object.create(null);if (a.r(t),Object.defineProperty(t, "default", {enumerable: !0,value: e}),2 & r && "string" != typeof e)for (var n in e)a.d(t, n, function(r) {return e[r]}.bind(null, n));return t},a.n = function(e) {var r = e && e.__esModule ? function() {return e.default}: function() {return e};return a.d(r, "a", r),r},a.o = function(e, r) {return Object.prototype.hasOwnProperty.call(e, r)},a.p = "",a.oe = function(e) {throw console.error(e),e};var i = window.webpackJsonp_N_E = window.webpackJsonp_N_E || [], c = i.push.bind(i);i.push = r,i = i.slice();for (var l = 0; l < i.length; l++)r(i[l]);var f = c;t()yangxin = a;
}([]);
console.log(yangxin)

运行结果展现:

 

现在将‘DTmv‘的函数位置找到并复制,然后给Ke赋值。

 

结果展现,如何处理host呢 

 

出现这种问题怎么办 window && "m.xdf.cn" !== window.location.host && "//tppss.staff.xdf.cn"; ^ TypeError: Cannot read properties of undefined (reading 'host')

这个错误表明 window.location 对象未定义,因此无法读取 host 属性。这种情况通常发生在代码执行环境中不支持浏览器全局对象 window,比如在 Node.js 等环境中。解决这个问题的方法取决于你的代码运行环境:

  1. 如果你的代码是在浏览器中运行的,确保代码在浏览器环境中执行。如果你使用的是服务器端 JavaScript 环境(如Node.js),请注意将代码调整为适用于服务器端环境。

  2. 如果你需要在非浏览器环境中模拟 window.location 对象,你可以自己创建一个对象来模拟它,例如:

    const window = {location: {host: 'example.com'}
    };
    

    得到结果

得到Ke后的完整代码:

var yangxin;
// window = global;
const window = {location: {host: 'example.com'}
};!function(e) {function r(r) {for (var n, a, i = r[0], c = r[1], l = r[2], p = 0, s = []; p < i.length; p++)a = i[p],Object.prototype.hasOwnProperty.call(o, a) && o[a] && s.push(o[a][0]),o[a] = 0;for (n in c)Object.prototype.hasOwnProperty.call(c, n) && (e[n] = c[n]);for (f && f(r); s.length; )s.shift()();return u.push.apply(u, l || []),t()}function t() {for (var e, r = 0; r < u.length; r++) {for (var t = u[r], n = !0, i = 1; i < t.length; i++) {var c = t[i];0 !== o[c] && (n = !1)}n && (u.splice(r--, 1),e = a(a.s = t[0]))}return e}var n = {}, o = {0: 0}, u = [];function a(r) {if (n[r])return n[r].exports;var t = n[r] = {i: r,l: !1,exports: {}}, o = !0;try {e[r].call(t.exports, t, t.exports, a),o = !1} finally {o && delete n[r]}return t.l = !0,t.exports}a.e = function(e) {var r = [], t = o[e];if (0 !== t)if (t)r.push(t[2]);else {var n = new Promise((function(r, n) {t = o[e] = [r, n]}));r.push(t[2] = n);var u, i = document.createElement("script");i.charset = "utf-8",i.timeout = 120,a.nc && i.setAttribute("nonce", a.nc),i.src = function(e) {return a.p + "static/chunks/" + ({}[e] || e) + "." + {33: "8d6dd29eda0b766b3652"}[e] + ".js"}(e);var c = new Error;u = function(r) {i.onerror = i.onload = null,clearTimeout(l);var t = o[e];if (0 !== t) {if (t) {var n = r && ("load" === r.type ? "missing" : r.type), u = r && r.target && r.target.src;c.message = "Loading chunk " + e + " failed.\n(" + n + ": " + u + ")",c.name = "ChunkLoadError",c.type = n,c.request = u,t[1](c)}o[e] = void 0}};var l = setTimeout((function() {u({type: "timeout",target: i})}), 12e4);i.onerror = i.onload = u,document.head.appendChild(i)}return Promise.all(r)},a.m = e,a.c = n,a.d = function(e, r, t) {a.o(e, r) || Object.defineProperty(e, r, {enumerable: !0,get: t})},a.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},a.t = function(e, r) {if (1 & r && (e = a(e)),8 & r)return e;if (4 & r && "object" === typeof e && e && e.__esModule)return e;var t = Object.create(null);if (a.r(t),Object.defineProperty(t, "default", {enumerable: !0,value: e}),2 & r && "string" != typeof e)for (var n in e)a.d(t, n, function(r) {return e[r]}.bind(null, n));return t},a.n = function(e) {var r = e && e.__esModule ? function() {return e.default}: function() {return e};return a.d(r, "a", r),r},a.o = function(e, r) {return Object.prototype.hasOwnProperty.call(e, r)},a.p = "",a.oe = function(e) {throw console.error(e),e};var i = window.webpackJsonp_N_E = window.webpackJsonp_N_E || [], c = i.push.bind(i);i.push = r,i = i.slice();for (var l = 0; l < i.length; l++)r(i[l]);var f = c;t()yangxin = a
}({'DTmv': function(e, t, r) {"use strict";r.d(t, "d", (function() {return c})),r.d(t, "c", (function() {return s})),r.d(t, "a", (function() {return n})),r.d(t, "b", (function() {return a})),r.d(t, "e", (function() {return i})),r.d(t, "f", (function() {return o}));var n = 5053, a = "750F82C2-D8F6-49F6-878C-1E7EBEBC8DA2", c = "//dsapi.xdf.cn", s = "//capi.xdf.cn", i = "https://m.souke.xdf.cn";window && "m.xdf.cn" !== window.location.host && "//tppss.staff.xdf.cn";var o = !0;o || (i = "http://msouke.test.xdf.cn","http://laoshi.test.xdf.cn",c = "//dsapi.test.xdf.cn","//nsale-ecommerce-dsapi-souke-test2.test.xdf.cn",s = "//capi.test.xdf.cn",n = 0,a = "testkey",4446,"PC\u5b98\u7f51",4443)}});
var Ke = yangxin('DTmv');
console.log(Ke)
var ve = function(e) {var t = "appId=".concat(Ke.a, "&cityCode=").concat(n, "&t=").concat((new Date).getTime());for (var r in e)String(e[r]) && void 0 != e[r] && null != e[r] && "undefined" != e[r] && "null" != e[r] && (t = "".concat(t, "&").concat(r, "=").concat(e[r]));return {params: t,sign: $e("".concat(t).concat(Ke.b))}
};
var u = {"pageIndex": 1,"pageSize": 12,"categoryCode": "123","order": "0"
}
var c = ve(u);
var s = c.sign;
console.log(s)

又出现新的问题:

 

回到ve函数,去看n是什么东西,n是载荷中的city_code

 

 

将n填上的结果

 

其$e就是MD5加密,加密的参数为,不想写了,累了。

 

 

 

 

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

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

相关文章

linux下 Mysql8.0 离线安装

环境&#xff1a;centos7.9 MysqlL8.0.36安装包 链接&#xff1a;https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码&#xff1a;3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

单片机 VS 嵌入式LInux (学习方法)

linux 嵌入式开发岗位需要掌握Linux的主要原因之一是&#xff0c;许多嵌入式系统正在向更复杂、更功能丰富的方向发展&#xff0c;需要更强大的操作系统支持。而Linux作为开源、稳定且灵活的操作系统&#xff0c;已经成为许多嵌入式系统的首选。以下是为什么嵌入式开发岗位通常…

Valentina Studio Pro for Mac:强大的数据库管理工具

Valentina Studio Pro for Mac是一款功能全面、操作高效的数据库管理工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户轻松管理各种类型的数据库。 Valentina Studio Pro for Mac v13.10激活版下载 该软件拥有直观的用户界面&#xff0c;使得数据库管理变得简单直观。…

自动驾驶控制算法

本文内容来源是B站——忠厚老实的老王&#xff0c;侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦&#xff0c;将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念&#xff1a; 运动学方程 建立微分方程 主要是弄…

探索数学语言模型的前沿进展——人工智能在数学教育和研究中的应用

数学一直被认为是科学的基石&#xff0c;对于推动技术进步和解决现实世界问题具有重要意义。然而&#xff0c;传统的数学问题解决方式正面临着数字化转型的挑战。MLMs的出现&#xff0c;预示着数学学习和研究方式的一次革命。 MLMs&#xff0c;包括预训练语言模型&#xff08;…

不安全软件,2024 年供应商该如何应对漏洞?

关键在于代码 使用专用工具和系统分析产品代码编写的各个阶段。 与安全研究人员合作 理想情况下&#xff0c;每个供应商都应该有自己持续的漏洞赏金计划&#xff0c;以测试基础设施、软件发布流程和最终产品。这将有助于在真正的攻击发生之前发现漏洞&#xff0c;保护客户。…

丰田是如何用精益理念改变制造业的?

丰田&#xff0c;这个全球知名的汽车制造商&#xff0c;不仅以其高质量的产品赢得了消费者的信赖&#xff0c;更以其独特的精益理念深刻改变了整个制造业的面貌。那么&#xff0c;丰田究竟是如何用精益理念引领制造业变革的呢&#xff1f;天行健精益管理培训公司解析如下&#…

思科 Packet Tracer 实验八 DHCP基本配置(以路由为中继)

一、实验目的 了解思科网络设备的配置基本特点及 IOS 命令基本操作方法 了解DHCP的工作原理及基本配置 二、实验过程 1) 实验拓扑如下&#xff1a; 2&#xff09;由于使用DHCP‘协议动态配置ip&#xff0c;所以除了DHCP服务器和路由器接口外其他的主机&#xff0c;服务器的i…

LeetCode 热题 100 Day04

矩阵相关题型 Leetcode 73. 矩阵置零【中等】 题意理解&#xff1a; 将矩阵中0所在位置&#xff0c;行|列置换为全0 其中可以通过记录0元素所在的行、列号&#xff0c;来标记要置换的行|列 将对应位置置换为0 解题思路&#xff1a; 第一个思路&#xff1a; 可以…

CSRF 跨站请求伪造

CSRF漏洞 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

[Linux][多线程][二][线程互斥][互斥量][可重入VS线程安全][常见锁概念]

目录 1.线程互斥1.互斥相关背景概念2.多个线程并发的操作共享变量&#xff0c;会带来一些问题3.互斥量mutex 2.互斥量的接口1.初始化互斥量2.销毁互斥量3.加锁4.解锁5.使用 -- 改善上面代码 3.互斥量实现原理探究1.加锁是如何保证原子性的&#xff1f;2.如何保证锁是原子性的&a…

【计算机组成原理】浮点运算方法和浮点运算器

浮点加法、减法运算 浮点数加减法的步骤结合题目分析步骤 浮点数加减法的步骤 ① 0 操作数检查 ② 比较阶码大小&#xff0c;完成对阶 ③ 尾数进行加减法运算 ④ 结果规格化 ⑤ 舍入处理 ⑥ 判断结果是否溢出 结合题目分析步骤 例&#xff1a;设 x 2010 0.11011011&#x…

Hadoop3:HDFS、YARN、MapReduce三部分的架构概述及三者间关系(Hadoop入门必须记住的内容)

一、HDFS架构概述 Hadoop Distributed File System&#xff0c;简称HDFS&#xff0c;是一个分布式文件系统。 1&#xff09;NameNode(nn)&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件…

springboot整合mybatis-puls登陆注册

目录 创建springboot项目 目录结构&#xff1a; 启动类 测试类 idea建表 pom文件 编写yml文件 qq邮箱设置 登陆注册代码 编写持久层(Dao) 注册代码 业务层 业务实现类 mapper 控制层 前端代码 注册页面 邮件正文&#xff1a; 登录代码 控制层 业务层&#…

索引【MySQL】

文章目录 什么是索引测试表 磁盘和 MySQL 的交互了解磁盘MySQL 的工作原理Buffer Pool 理解索引引入Page 的结构页内目录&#xff08;Page Directory&#xff09;多页情况B 树和 B树聚簇索引和非聚簇索引 主键索引创建 唯一索引主要特点与主键索引的区别使用场景创建 联合索引工…

WEB攻防-ASP安全-MDB下载

MDB下载漏洞主要涉及到早期ASPAccess构架的数据库文件。当Web站点提供文件下载功能时&#xff0c;如果没有对下载请求进行充分的验证和过滤&#xff0c;或者服务器配置不当&#xff0c;就可能产生文件下载漏洞。攻击者可以利用这个漏洞&#xff0c;通过修改请求参数或尝试猜测或…

YOLOv8蒸馏 | 知识蒸馏 | 利用模型蒸馏改进YOLOv8进行无损涨点 | MimicLoss(在线蒸馏 + 离线蒸馏)

一、本文介绍 这篇文章给大家带来的是模型的蒸馏&#xff0c;利用教师模型指导学生模型从而进行模型的涨点&#xff0c;本文的内容不仅可以用于论文中&#xff0c;在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术&#xff0c;所以大家可以仔细学习一下本文的内容&#…

CTF-reverse-simpleRE(base64变表逆向)

题目链接 NSSCTF | 在线CTF平台 题目详情 [HUBUCTF 2022 新生赛]simple_RE 解题报告 下载得到的文件使用ida64分析&#xff0c;如果报错就换ida32&#xff0c;得到分析结果&#xff0c;有main函数就先看main main函数分析 main函数的逻辑看下来十分简单&#xff0c;因此关键…

Redis入门到通关之Redis数据结构-ZSet篇

文章目录 ZSet也就是SortedSet&#xff0c;其中每一个元素都需要指定一个 score 值和 member 值&#xff1a; 可以根据score值排序后member必须唯一可以根据member查询分数 因此&#xff0c;zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学习的哪种编…

STM32自动光控窗帘程序+Proteus仿真图 H桥L298驱动电机

目录 1、前言 2、仿真图 3、源程序 资料下载地址&#xff1a;STM32自动光控窗帘程序Proteus仿真图 H桥L298驱动电机 1、前言 基于STM32F103设计的智能光控窗帘&#xff0c;包含STM32芯片、光敏电阻、LCD1602显示屏、电机驱动控制模块等。 备注&#xff1a;通过ARM内部的…