网站首页 > 文章精选 正文
WebPack打包
webpack是一个基于模块化的打包(构建)工具, 它把一切都视作模块。
概念:
webpack是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源。所有的资源都是通过JavaScript渲染出来的。
如果一个页面大部分是script标签构成,80%以上是webpack打包。
1. webpack打包简介
1.0 多个JS文件打包:
如果模块比较多,就会将模块打包成JS文件, 然后定义一个全局变量 window["webpackJsonp"] = [ ],它的作用是存储需要动态导入的模块。
然后重写 window["webpackJsonp"] 数组的 push( ) 方法为 webpackJsonpCallback( ),也就是说 window["webpackJsonp"].push( ) 其实执行的是 webpackJsonpCallback( ),window["webpackJsonp"].push( )接收三个参数,第一个参数是模块的ID,第二个参数是 一个数组或者对象,里面定义大量的函数,第三个参数是要调用的函数(可选)
1.1 webpack数组形式
- 给需要处理业务的模块进行打包,通过下标取值。
!function(e) {
var t = {};
// 加载器 所有的模块都是从这个函数加载 执行
function n(r) {
if (t[r])
return t[r].exports;
var o = t[r] = {
i: r,
l: !1,
exports: {}
};
return e[r].call(o.exports, o, o.exports, n),
o.l = !0,
o.exports
}
n(0)
}
([
function () {
console.log('123456')
},
function () {
console.log('模块2')
},
])
1.2 webpack对象形式
- 给需要处理业务的模块进行打包,通过key取值。
!function(e) {
var t = {};
// 所有的模块 都是从这个加载器 执行的 分发器
function n(r) {
if (t[r])
return t[r].exports;
var o = t[r] = {
i: r,
l: !1,
exports: {}
};
return e[r].call(o.exports, o, o.exports, n),
o.l = !0,
o.exports
}
n(1) // 对象 根据KEY 找模块
}({
0: function () {
console.log('我是模块1')
},
1: function () {
console.log('我是模块2')
}
}
);
2. webpack处理代码
2.1 逆向目标
- 站点:http://www.kuwo.cn/
- 参数:reqId
2.2 逆向分析
- 全局搜索关键字,查看生成位置,方便后续调试
- 下断点调试,发现是C函数
- 继续调试发现是这个模块进行了处理
2.3 结果处理
3. webpack案例
3.2 逆向分析
- 地址:https://static.waitwaitpay.com/web/sd_se/index.html
- 接口:https://api.waitwaitpay.com/api/vendors/nearby
- 目标:响应数据
4.2 逆向分析
打开目标网站,往下拉,在开发者工具可以抓到这三个包,其中nearby接口请求到的数据是加密之后的密文
4.2.1 关键字搜索
这个时候可以尝试再在该文件里搜索 JSON.parse就会找到这样一个地方,这里可以发现有一个decode函数,就比较可疑,下个断点
数据处理
往上看堆栈,可以发现该函数就是解密的入口,讲请求得到的加密数据e传到f函数,即可解密得到明文数据
可以很明显的看到这个f函数内部关键调用了这两个函数来进行数据的解密,那么,我们首先就来看看这个 a.default.decode ,向上寻找a是在哪里被定义的
可发现 a = s(n(432)),这里的432就是代表导出webpack打包的大数组里面第432个大函数,大数组指的是这个大数组
4.2.2 JavaScript分析
那我们在本地js里面,怎么才能实现像浏览器这样导出呢,这个时候我们可以直接去找到 导出器 类似于 exports 这样的关键字,所有的 webpack 导出器都是长这样的
- 直接复制全部的代码,之前已经发现处理解密的话只有f函数,观察整个函数调用第三方库很少,那么就可以全复制代码,然后调用这个函数即可。
- 直接扣出加密代码,调用当前这个函数
// 本地的话,我们就可以这样来进行导出然后赋值给a还有o
function s(e) {
return e && e.__esModule ? e : {
default: e
}
};
// 这里的window.ts就是上面导出器函数
var a = s(window.ts(432));
var o = s(window.ts(423));
总结(webpack逆向步骤)
- 找到这个加载器
- 找到调用模块
- 构造一个自执行方法
- 导出加密方法
- 编写自定义方法 按照流程加密
声明:本文章所有演示内容仅供学习交流使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系作者立即删除!
- 上一篇: Vue3+Axios网络请求封装
- 下一篇: 使用 Vue 脚手架,为什么要学 webpack?(一)
猜你喜欢
- 2025-05-24 前端人必看!10 个实战优化技巧,让项目性能直接起飞!
- 2025-05-24 使用 nginx 同域名下部署多个 vue 项目,并使用反向代理
- 2025-05-24 React 组件频繁重绘?5 个实战技巧让页面流畅度暴涨 70%!
- 2025-05-24 前端踩坑血泪史!5 个 TypeScript 实战技巧拯救你的代码
- 2025-05-24 安装Node.js
- 2025-05-24 【HarmonyOS Next之旅】兼容JS的类Web开发(一)
- 2025-05-24 什么,你还使用 webpack?别人都在用 vite 搭建项目了
- 2025-05-24 微信百度字节小程序包过大解决方案(实战经验总结)
- 2025-05-24 从 Element UI 源码的构建流程来看前端 UI 库设计
- 2025-05-24 Tree Shaking 原理:如何让 JavaScript 包体积减少高达50%?
- 05-25β晶型PPH管压力等级的确定
- 05-25β晶型PPH管防静电参数
- 05-25魔兽WLK:P3五人本测试结果,冠军试炼加入观星者,掉落毕业饰品
- 05-25几滴血就能检测阿尔茨海默病?日本推出全球首款血液检测阿尔茨海默病装置
- 05-25日解析阿尔茨海默病致病蛋白构造
- 05-25抗菌药物皮试有讲究
- 05-258 周绒毛密度达 22 根 /cm^2,β-catenin 信号通路全解析
- 05-25《拳皇15》PS5/PS4平台开放性β测试用Demo上架商店
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)