webpack逆向——AES
字数 1534 2025-08-20 18:17:02

Webpack逆向分析:AES加密函数扣取实战指南

一、前言

本文详细讲解如何逆向分析一个使用Webpack打包并包含AES加密功能的JavaScript代码。通过本教程,您将学习到如何定位加密函数、扣取Webpack模块以及构建可用的本地加密环境。

二、目标分析

1. 加密特征识别

  • 登录请求中usernamepassword参数被加密
  • 加密值存储在请求包的u(用户名)和l(密码)字段中
  • 加密函数调用形式为Object(m["c"])
  • 疑似使用AES加密算法,t变量为加密密钥

2. Webpack特征识别

  • JS文件头部有webpackJsonp字样
  • 文件命名形式为appchunkxxxx
  • 使用模块化加载系统

三、加密函数定位

1. 搜索策略

  • 直接搜索namepwd参数可能结果过多
  • 替代方案:搜索请求包中的其他独特参数(如uid

2. 定位过程

  1. 通过uid定位到请求发送位置
  2. 确认ul为加密后的用户名和密码
  3. 找到加密函数调用Object(m["c"])
  4. 跟进m["c"]函数,发现AES加密特征
  5. 跟进D方法确认加密细节

3. 加密验证

  • 使用在线AES加密工具测试123456加密结果
  • 对比网站加密结果确认算法一致性

四、Webpack模块扣取

1. Webpack结构分析

  • m变量代表导出的模块
  • 需要扣取目标函数模块和加载器
  • 注意作用域范围,避免错误引用

2. 关键步骤

  1. 定位加载器

    • 下断点并刷新页面触发调试
    • 观察n("ed08")调用,n为加载器函数
    • ed08为所需模块ID
  2. 扣取加载器

    • 保存包含a函数的整个JS文件(加载器代码)
    • a函数导出到全局(如window.abc
  3. 导入模块

    • 全局搜索ed08定位模块函数
    • 扣取整个函数并保存为单独JS文件
    • 格式化代码,提取JSON格式的模块
  4. 模块整合

    • 去除webpack开头的代码
    • 将JSON格式模块整合到加载器
    • window.abcd代替n加载模块

3. 依赖处理

  1. 处理缺失模块

    • 当出现96cf等模块缺失错误时
    • 在目标网站全局搜索该模块所在的JS文件
    • 扣取整个JS文件并格式化
    • 提取JSON格式模块追加到加载器
  2. 模块追加技巧

    • 保持原有JSON结构
    • 新模块用逗号隔开追加
    • 重复此过程直到所有依赖满足

4. 加密函数调用

  1. 成功加载所有模块后无报错
  2. 按照原始调用方式测试加密函数:
    Object(m["c"])(明文, 密钥)
    
  3. 确认加密结果与网站一致

五、关键代码结构

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. 逐个扣取法

  • 优点

    • 代码精简
    • 理解更深入
  • 缺点

    • 耗时较长
    • 需要分析依赖关系

七、常见问题解决

  1. 模块缺失错误

    • 全局搜索缺失模块ID
    • 扣取整个包含该模块的JS文件
    • 追加到现有模块集合
  2. 作用域问题

    • 确保不超出变量作用域
    • 注意函数闭包内的变量引用
  3. 加密结果不一致

    • 检查密钥是否正确
    • 确认加密模式和填充方式
    • 验证初始向量(IV)是否使用

八、总结

本教程详细介绍了从Webpack打包的JS代码中逆向分析并扣取AES加密函数的过程。关键点包括:

  1. 通过非明显参数定位加密位置
  2. 识别Webpack模块系统结构
  3. 扣取加载器和所需模块
  4. 处理依赖关系链
  5. 构建可用的本地加密环境

掌握这些技能后,您将能够应对大多数Webpack打包的JS逆向分析场景,不仅限于AES加密算法,也可应用于其他加密算法或核心业务逻辑的逆向分析。

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. 加密函数调用 成功加载所有模块后无报错 按照原始调用方式测试加密函数: 确认加密结果与网站一致 五、关键代码结构 1. Webpack加载器示例 2. 模块结构示例 3. 加密函数调用示例 六、扣取策略对比 1. 全部扣取法 优点 : 减少手动补依赖的步骤 执行快速 适合复杂依赖关系 缺点 : 可能包含无用代码 文件体积较大 2. 逐个扣取法 优点 : 代码精简 理解更深入 缺点 : 耗时较长 需要分析依赖关系 七、常见问题解决 模块缺失错误 : 全局搜索缺失模块ID 扣取整个包含该模块的JS文件 追加到现有模块集合 作用域问题 : 确保不超出变量作用域 注意函数闭包内的变量引用 加密结果不一致 : 检查密钥是否正确 确认加密模式和填充方式 验证初始向量(IV)是否使用 八、总结 本教程详细介绍了从Webpack打包的JS代码中逆向分析并扣取AES加密函数的过程。关键点包括: 通过非明显参数定位加密位置 识别Webpack模块系统结构 扣取加载器和所需模块 处理依赖关系链 构建可用的本地加密环境 掌握这些技能后,您将能够应对大多数Webpack打包的JS逆向分析场景,不仅限于AES加密算法,也可应用于其他加密算法或核心业务逻辑的逆向分析。