webpack逆向——AES
字数 1534 2025-08-20 18:17:02
Webpack逆向分析:AES加密函数扣取实战指南
一、前言
本文详细讲解如何逆向分析一个使用Webpack打包并包含AES加密功能的JavaScript代码。通过本教程,您将学习到如何定位加密函数、扣取Webpack模块以及构建可用的本地加密环境。
二、目标分析
1. 加密特征识别
- 登录请求中
username和password参数被加密 - 加密值存储在请求包的
u(用户名)和l(密码)字段中 - 加密函数调用形式为
Object(m["c"]) - 疑似使用AES加密算法,
t变量为加密密钥
2. Webpack特征识别
- JS文件头部有
webpackJsonp字样 - 文件命名形式为
app和chunkxxxx - 使用模块化加载系统
三、加密函数定位
1. 搜索策略
- 直接搜索
name和pwd参数可能结果过多 - 替代方案:搜索请求包中的其他独特参数(如
uid)
2. 定位过程
- 通过
uid定位到请求发送位置 - 确认
u和l为加密后的用户名和密码 - 找到加密函数调用
Object(m["c"]) - 跟进
m["c"]函数,发现AES加密特征 - 跟进
D方法确认加密细节
3. 加密验证
- 使用在线AES加密工具测试
123456加密结果 - 对比网站加密结果确认算法一致性
四、Webpack模块扣取
1. Webpack结构分析
m变量代表导出的模块- 需要扣取目标函数模块和加载器
- 注意作用域范围,避免错误引用
2. 关键步骤
-
定位加载器:
- 下断点并刷新页面触发调试
- 观察
n("ed08")调用,n为加载器函数 ed08为所需模块ID
-
扣取加载器:
- 保存包含
a函数的整个JS文件(加载器代码) - 将
a函数导出到全局(如window.abc)
- 保存包含
-
导入模块:
- 全局搜索
ed08定位模块函数 - 扣取整个函数并保存为单独JS文件
- 格式化代码,提取JSON格式的模块
- 全局搜索
-
模块整合:
- 去除
webpack开头的代码 - 将JSON格式模块整合到加载器
- 用
window.abcd代替n加载模块
- 去除
3. 依赖处理
-
处理缺失模块:
- 当出现
96cf等模块缺失错误时 - 在目标网站全局搜索该模块所在的JS文件
- 扣取整个JS文件并格式化
- 提取JSON格式模块追加到加载器
- 当出现
-
模块追加技巧:
- 保持原有JSON结构
- 新模块用逗号隔开追加
- 重复此过程直到所有依赖满足
4. 加密函数调用
- 成功加载所有模块后无报错
- 按照原始调用方式测试加密函数:
Object(m["c"])(明文, 密钥) - 确认加密结果与网站一致
五、关键代码结构
1. Webpack加载器示例
// 加载器核心结构
function a(moduleId) {
// 模块加载逻辑
// ...
return modules[moduleId]
}
// 导出到全局
window.abc = a;
2. 模块结构示例
// Webpack模块通常格式
{
"ed08": function(e, t, n) {
// 模块内容
// 包含加密函数实现
},
"96cf": function(e, t, n) {
// 依赖模块
}
// 更多模块...
}
3. 加密函数调用示例
// 获取加密模块
const cryptoModule = window.abc("ed08");
// 调用加密函数
const encrypted = Object(cryptoModule["c"])("123456", "密钥");
六、扣取策略对比
1. 全部扣取法
-
优点:
- 减少手动补依赖的步骤
- 执行快速
- 适合复杂依赖关系
-
缺点:
- 可能包含无用代码
- 文件体积较大
2. 逐个扣取法
-
优点:
- 代码精简
- 理解更深入
-
缺点:
- 耗时较长
- 需要分析依赖关系
七、常见问题解决
-
模块缺失错误:
- 全局搜索缺失模块ID
- 扣取整个包含该模块的JS文件
- 追加到现有模块集合
-
作用域问题:
- 确保不超出变量作用域
- 注意函数闭包内的变量引用
-
加密结果不一致:
- 检查密钥是否正确
- 确认加密模式和填充方式
- 验证初始向量(IV)是否使用
八、总结
本教程详细介绍了从Webpack打包的JS代码中逆向分析并扣取AES加密函数的过程。关键点包括:
- 通过非明显参数定位加密位置
- 识别Webpack模块系统结构
- 扣取加载器和所需模块
- 处理依赖关系链
- 构建可用的本地加密环境
掌握这些技能后,您将能够应对大多数Webpack打包的JS逆向分析场景,不仅限于AES加密算法,也可应用于其他加密算法或核心业务逻辑的逆向分析。