Chrome DevTools 逆向 AES 加密:3步定位关键函数与密钥提取实战
Chrome DevTools 逆向 AES 加密3步定位关键函数与密钥提取实战当你在进行安全测试或接口逆向时前端加密往往是最先遇到的障碍。本文将带你深入探索如何利用 Chrome DevTools 系统性地逆向分析前端 AES 加密逻辑而不仅仅是简单的断点演示。我们将构建一个完整的逆向决策树并对比三种定位加密函数的核心方法。1. 逆向工程前的准备工作在开始逆向之前我们需要确保环境配置正确。打开 Chrome 浏览器按下F12或CtrlShiftIWindows/Linux调出开发者工具。建议将工具窗口停靠在右侧或底部以便同时观察页面和调试界面。关键准备工作确保网站已加载完毕清空网络请求记录Network 面板点击清除按钮打开控制台(Console)并过滤掉无关日志提示在 Sources 面板中点击{}按钮可以格式化压缩的 JavaScript 代码这对后续分析至关重要。2. 三种定位加密函数的核心方法2.1 事件监听器追踪法这是最直观的定位方式特别适合有明确触发点的加密操作如登录按钮点击。在 Elements 面板选中目标按钮查看右侧 Event Listeners 选项卡展开 click 事件找到绑定的处理函数// 示例典型的事件监听结构 document.getElementById(loginBtn).addEventListener(click, function() { // 加密逻辑通常在这里或调用的子函数中 const encryptedData encryptData(userInput); sendToServer(encryptedData); });优缺点对比方法优点缺点事件监听直观易用对动态绑定事件效果差XHR断点精准定位请求无法处理WebSocket通信全局搜索全面覆盖结果可能过多需要筛选2.2 XHR/Fetch 断点法当加密数据通过 AJAX 发送时这种方法尤为有效转到 Sources 面板在右侧找到 XHR/fetch Breakpoints添加包含关键路径的断点如 login触发请求后通过调用栈(Call Stack)回溯加密逻辑2.3 全局关键词搜索法当上述方法失效时可以尝试直接搜索加密相关关键词在 Sources 面板按CtrlShiftF搜索关键词如encryptAESCryptoJSkeyiv初始化向量// 典型的AES加密代码特征 CryptoJS.AES.encrypt(plainText, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });3. 密钥提取与加密逻辑分析找到加密函数后接下来的关键任务是提取密钥和完整理解加密流程。3.1 动态调试提取密钥在加密函数入口处设置断点触发加密操作在 Scope 面板查看局部变量重点关注以下变量密钥通常16/24/32字节初始化向量IV加密模式CBC/ECB等填充方式PKCS7等常见密钥存储方式硬编码在JS文件中通过接口动态获取基于用户信息计算生成3.2 加密参数验证提取到疑似密钥后可以通过以下方法验证在 Console 面板直接调用加密函数使用在线AES工具对比加密结果编写简易测试代码验证// 控制台验证示例 const testData test123; const encrypted window.encryptFunction(testData); console.log(加密结果:, encrypted);4. 实战案例登录接口AES逆向让我们通过一个真实案例整合上述方法。假设目标网站登录接口提交加密数据我们需要逆向其加密逻辑。操作流程在登录表单输入测试账号设置XHR断点于包含login的URL提交表单在断点处暂停通过调用栈向上查找加密逻辑定位到关键加密函数后格式化代码分析参数传递记录密钥和加密参数// 实际案例中发现的加密函数 function encryptLoginData(data) { const key CryptoJS.enc.Utf8.parse(h7s2k5p9w3b6y8d1); const iv CryptoJS.enc.Utf8.parse(x4v8q1t5r9z2m6c0); return CryptoJS.AES.encrypt(JSON.stringify(data), key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(); }遇到的典型问题及解决方案代码混淆严重使用{}按钮格式化代码关注CryptoJS等关键词跟踪关键变量传递路径动态生成密钥在密钥生成位置设断点记录生成算法提取必要种子数据多阶段加密绘制函数调用流程图分阶段验证中间结果注意数据编码转换Base64/Hex等5. 进阶技巧与注意事项掌握了基础逆向方法后以下技巧可以提升效率性能优化技巧使用黑盒脚本(Blackboxing)忽略第三方库设置条件断点避免频繁暂停利用Workspace持久化修改安全防护应对禁用断点检测代码// 在Console中执行 Debugger.prototype.constructor function(){};处理反调试逻辑提前打开开发者工具使用--auto-open-devtools-for-tabs启动参数自动化辅助工具使用 Chrome 插件如 Requestly 修改请求编写 Puppeteer 脚本自动提取密钥保存关键JS文件进行离线分析在实际项目中我经常遇到开发者将密钥隐藏在看似无关的函数中或者使用动态拼接的方式生成密钥。这种情况下耐心跟踪每个相关变量的变化过程至关重要。有一次我发现密钥竟然是用户邮箱的MD5哈希前16位这种创意虽然增加了逆向难度但一旦发现规律就很容易复现。