webpack js 逆向 --- 个人记录

  1. 网站
    aHR0cDovL2FlcmZheWluZy5jb20v
  2. 加密参数
    在这里插入图片描述
  3. 参数加密位置
    在这里插入图片描述

方法:

1. 构造自执行函数

!function(e) {// 加载器
}(// 模块1;// 模块2
)

2. 找到js的加载器
在这里插入图片描述
3. 把上述代码放入第一步构造的自执行函数(完整扣取一整个加载器里的代码),并用一个全局参数接收加载器,比如window.zzz = i;
自执行代码如下:

var window=global;
!function(e) {function t(t) {for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)i = l[f],Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),o[i] = 0;for (r in s)Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);for (c && c(t); p.length; )p.shift()();return a.push.apply(a, u || []),n()}function n() {for (var e, t = 0; t < a.length; t++) {for (var n = a[t], r = !0, l = 1; l < n.length; l++) {var s = n[l];0 !== o[s] && (r = !1)}r && (a.splice(t--, 1),e = i(i.s = n[0]))}return e}var r = {}, o = {0: 0}, a = [];function i(t) {if (r[t])return r[t].exports;var n = r[t] = {i: t,l: !1,exports: {}};return e[t].call(n.exports, n, n.exports, i),n.l = !0,n.exports}window.zzz = i; // 定义一个参数window.zzz接收加载器;var l = window.webpackJsonp = window.webpackJsonp || [], s = l.push.bind(l);l.push = t,l = l.slice();for (var u = 0; u < l.length; u++)t(l[u]);var c = s;
}({// 模块1;// 模块2
})

4. 把加密位置的代码扣取下来,放入自执行函数的模块里,然后定义一个模块名给,比如jsencrypt,自执行函数代码如下:

var window=global;
!function(e) {function t(t) {for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)i = l[f],Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),o[i] = 0;for (r in s)Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);for (c && c(t); p.length; )p.shift()();return a.push.apply(a, u || []),n()}function n() {for (var e, t = 0; t < a.length; t++) {for (var n = a[t], r = !0, l = 1; l < n.length; l++) {var s = n[l];0 !== o[s] && (r = !1)}r && (a.splice(t--, 1),e = i(i.s = n[0]))}return e}var r = {}, o = {0: 0}, a = [];function i(t) {if (r[t])return r[t].exports;var n = r[t] = {i: t,l: !1,exports: {}};return e[t].call(n.exports, n, n.exports, i),n.l = !0,n.exports}window.zzz = i; // 定义一个参数window.zzz接收加载器;var l = window.webpackJsonp = window.webpackJsonp || [], s = l.push.bind(l);l.push = t,l = l.slice();for (var u = 0; u < l.length; u++)t(l[u]);var c = s;}({// 模块名:jsencryptjsencrypt:function(e, t, n) {"use strict";Object.defineProperty(t, "__esModule", {value: !0});t.default = function(e, t) {var n = (new Date).getTime() + 2592e6 + (t || 3e4), r = (e || "") + "&t=" + n;return {t: n,s: Sha1.hash(r)}}
}},
)

5. 对上述代码new一下,然后执行jsencrypt方法,运行代码,发现报错

result = new window.zzz("jsencrypt").default()
console.log(result)

报错:
在这里插入图片描述
6. 然后去源码里扣取Sha1的代码

最后所有js代码如下:

var window=global;function Sha1() {}
Sha1.hash = function(n, t) {var w = Object.assign({msgFormat: "string",outFormat: "hex"}, t), b, i, f, u, e, r, p, k, h, d;switch (w.msgFormat) {default:case "string":n = Sha1.utf8Encode(n);break;case "hex-bytes":n = Sha1.hexBytesToString(n)}b = [1518500249, 1859775393, 2400959708, 3395469782];i = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];n += String.fromCharCode(128);var g = n.length / 4 + 2, o = Math.ceil(g / 16), s = new Array(o);for (u = 0; u < o; u++)for (s[u] = new Array(16),f = 0; f < 16; f++)s[u][f] = n.charCodeAt(u * 64 + f * 4) << 24 | n.charCodeAt(u * 64 + f * 4 + 1) << 16 | n.charCodeAt(u * 64 + f * 4 + 2) << 8 | n.charCodeAt(u * 64 + f * 4 + 3);for (s[o - 1][14] = (n.length - 1) * 8 / Math.pow(2, 32),s[o - 1][14] = Math.floor(s[o - 1][14]),s[o - 1][15] = (n.length - 1) * 8 & 4294967295,u = 0; u < o; u++) {for (e = new Array(80),r = 0; r < 16; r++)e[r] = s[u][r];for (r = 16; r < 80; r++)e[r] = Sha1.ROTL(e[r - 3] ^ e[r - 8] ^ e[r - 14] ^ e[r - 16], 1);var c = i[0], l = i[1], a = i[2], v = i[3], y = i[4];for (r = 0; r < 80; r++)p = Math.floor(r / 20),k = Sha1.ROTL(c, 5) + Sha1.f(p, l, a, v) + y + b[p] + e[r] >>> 0,y = v,v = a,a = Sha1.ROTL(l, 30) >>> 0,l = c,c = k;i[0] = i[0] + c >>> 0;i[1] = i[1] + l >>> 0;i[2] = i[2] + a >>> 0;i[3] = i[3] + v >>> 0;i[4] = i[4] + y >>> 0}for (h = 0; h < i.length; h++)i[h] = ("00000000" + i[h].toString(16)).slice(-8);return d = w.outFormat == "hex-w" ? " " : "",i.join(d)
}
;
Sha1.f = function(n, t, i, r) {switch (n) {case 0:return t & i ^ ~t & r;case 1:return t ^ i ^ r;case 2:return t & i ^ t & r ^ i & r;case 3:return t ^ i ^ r}
}
;
Sha1.ROTL = function(n, t) {return n << t | n >>> 32 - t
}
;
Sha1.utf8Encode = function(n) {return unescape(encodeURIComponent(n))
}
;
Sha1.hexBytesToString = function(n) {var i, t;for (n = n.replace(" ", ""),i = "",t = 0; t < n.length; t += 2)i += String.fromCharCode(parseInt(n.slice(t, t + 2), 16));return i
}
!function(e) {function t(t) {for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)i = l[f],Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),o[i] = 0;for (r in s)Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);for (c && c(t); p.length; )p.shift()();return a.push.apply(a, u || []),n()}function n() {for (var e, t = 0; t < a.length; t++) {for (var n = a[t], r = !0, l = 1; l < n.length; l++) {var s = n[l];0 !== o[s] && (r = !1)}r && (a.splice(t--, 1),e = i(i.s = n[0]))}return e}var r = {}, o = {0: 0}, a = [];function i(t) {if (r[t])return r[t].exports;var n = r[t] = {i: t,l: !1,exports: {}};return e[t].call(n.exports, n, n.exports, i),n.l = !0,n.exports}window.zzz = i;   // 定义一个参数window.zzz接收加载器;var l = window.webpackJsonp = window.webpackJsonp || [], s = l.push.bind(l);l.push = t,l = l.slice();for (var u = 0; u < l.length; u++)t(l[u]);var c = s;}({// 模块名:jsencryptjsencrypt:function(e, t, n) {"use strict";Object.defineProperty(t, "__esModule", {value: !0});t.default = function(e, t) {var n = (new Date).getTime() + 2592e6 + (t || 3e4), r = (e || "") + "&t=" + n;return {t: n,s: Sha1.hash(r)}}
}},)result = new window.zzz("jsencrypt").default()
console.log(result)

最后运行结果:
在这里插入图片描述

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

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

相关文章

用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

目录 一、引言二、实现思路1. HTML 结构2. CSS 样式3. JavaScript 逻辑 三、代码实现四、效果展示 一、引言 贪吃蛇是一款经典的小游戏&#xff0c;曾经风靡一时。今天&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目&#xff0c…

基于α-β剪枝的含禁手AI五子棋

前言&#xff1a; 正常的五子棋应当设有禁手规则&#xff0c;否则先手黑棋必赢&#xff0c;基于此点设计出一款包含禁手的AI五子棋项目&#xff0c;该项目代码已在github开源&#xff0c;感兴趣的友友可以自取试玩:ace-trump-tech/AI-Gomoku-with-Prohibition-Moves: 含禁手的A…

Spring Boot 集成 Redis中@Cacheable 和 @CachePut 的详细对比,涵盖功能、执行流程、适用场景、参数配置及代码示例

以下是 Cacheable 和 CachePut 的详细对比&#xff0c;涵盖功能、执行流程、适用场景、参数配置及代码示例&#xff1a; 1. 核心对比表格 特性CacheableCachePut作用缓存方法的返回结果&#xff0c;避免重复计算执行方法并更新缓存&#xff0c;不覆盖原有缓存执行流程缓存命中…

可以使用费曼学习法阅读重要的书籍

书本上画了很多线&#xff0c;回头看等于没画出任何重点。 不是所有的触动都是有效的。就像你曾经看过很多好文章&#xff0c;当时被触动得一塌糊涂&#xff0c;还把它们放进了收藏夹&#xff0c;但一段时间之后&#xff0c;你就再也记不起来了。如果让你在一本书上画出令自己…

Nginx之https重定向为http

为了将Nginx中443端口的请求重定向到80端口&#xff0c;你可以按照以下步骤进行操作&#xff1a; ‌确认Nginx已经正确安装并运行‌&#xff1a; 确保Nginx服务已经在你的系统上安装并运行。你可以通过运行以下命令来检查Nginx的状态&#xff08;具体命令可能因操作系统而异&a…

【ARTS】【LeetCode-2873】有序三元组中的最大值!

前言 仅做学习使用&#xff0c;侵删 什么是ARTS&#xff1f; 算法(Algorithm): 每周至少一道LeetCode算法题&#xff0c;加强编程训练和算法学习 阅读(Review)&#xff1a; 阅读并点评至少一篇英文技术文章&#xff0c;提高英文水平 技巧 (Tip)&#xff1a;学习至少一个技…

基于spring boot 鲜花销售系统PPT(源码+lw+部署文档+讲解),源码可白嫖!

课题意义 随着网络不断的普及发展&#xff0c;鲜花销售系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性的信息管理系统&#xff0c;利用目前网络给用户带来的方便快捷这一特点对系统进行调整&am…

Redis常用的数据结构及其使用场景

字符串(String) string 是 redis 最基本的类型&#xff0c;你可以理解成与 Memcached 一模一样的类型&#xff0c;一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据&#xff0c;比如jpg图片或者序列化的对象。 string 类型是 R…

设计模式简述(五)建造者模式

建造者模式 描述基本要素协调类使用 描述 建造者模式属于创造型设计模式。 通常用于构建一系列复杂对象&#xff0c;这些对象有一定的共性。 我们可以通过不同的建造者&#xff0c;组装不同的对象 与工厂模式的区别&#xff0c;建造者模式更侧重与基于基础构件组装而非直接创…

Java基础 4.6

1.成员方法练习 //编写类A&#xff1a;判断一个数是奇数还是偶数&#xff0c;返回boolean //根据行、列、字符打印对应行数和列数的字符&#xff0c;比如&#xff1a;行4 列4 字符# 则打印相应的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c…

瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战

近日&#xff0c;瑞数信息正式发布《BOTS自动化威胁报告》&#xff0c;力求通过全景式观察和安全威胁的深度分析&#xff0c;为企业在AI时代下抵御自动化攻击提供安全防护策略&#xff0c;从而降低网络安全事件带来的影响&#xff0c;进一步增强业务韧性和可持续性。 威胁一&am…

Docker设置代理

目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败&#xff0c;用DaoCloud源也没拉下来&#xff0c;不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…

Debezium嵌入式连接postgresql封装服务

文章目录 1.项目结构&#xff1a;2.依赖&#xff1a;3.application.properties4.DebeziumConnectorConfig类5.TableEnum类6.TableHandler接口&#xff08;表处理抽象&#xff09;7.DefaultTableHandler默认实现类8.UserTableHandler处理类9.TableHandlerFactory工厂10.Debezium…

ER-图,详情和画法

一、E-R图的核心元素 1.实体 表示现实中对象或概念&#xff0c;用矩形表示 示例&#xff1a;用户、老师、学生 2.属性 描述实体的特征&#xff0c;用椭圆表示。 分为主键&#xff08;用户id&#xff09; 和非主键&#xff08;用户昵称&#xff09; 3.关系 表示实体间的…

Windows Flip PDF Plus Corporate PDF翻页工具

软件介绍 Flip PDF Plus Corporate是一款功能强大的PDF翻页工具&#xff0c;也被称为名编辑电子杂志大师。这款软件能够迅速将PDF文件转换为具有翻页动画效果的电子书&#xff0c;同时保留原始的超链接和书签。无论是相册、视频、音频&#xff0c;还是Flash、视频和链接&#…

Linux文件系统中的Page Cache和内存管理中的Page之间的关系

Linux文件系统中的Page Cache和内存管理中的Page之间有密切的关联&#xff0c;两者在底层机制上紧密结合&#xff0c;共同实现高效的内存和文件系统管理。以下是它们的关系和关键点&#xff1a; 核心关系 Page Cache的底层是内存Page Page Cache是由内存管理中的物理内存页&…

每日一个小病毒(C++)EnumChildWindows+shellcode

这里写目录标题 1. `EnumChildWindows` 的基本用法2. 如何利用 `EnumChildWindows` 执行 Shellcode?关键点:完整 Shellcode 执行示例3. 为什么 `EnumChildWindows` 能执行 Shellcode?4. 防御方法5. 总结EnumChildWindows 是 Windows API 中的一个函数,通常用于枚举所有子窗…

AI爬虫?爬!

1.你是否还在为大模型的key而感到忧伤和囊中羞涩&#xff0c;openrouter.ai&#xff0c;目前可免费白嫖多个大模型&#xff0c;代码如下 from openai import OpenAIclient OpenAI(base_url"https://openrouter.ai/api/v1",api_key"", )completion clien…

洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构

题目描述 《庄子》中说到&#xff0c;“一尺之棰&#xff0c;日取其半&#xff0c;万世不竭”。第一天有一根长度为 a a a 的木棍&#xff0c;从第二天开始&#xff0c;每天都要将这根木棍锯掉一半&#xff08;每次除 2 2 2&#xff0c;向下取整&#xff09;。第几天的时候木…