声明:本文所有内容仅用于授权渗透测试与网络安全学习研究,禁止用于任何非法用途。
前言
在前后端分离的现代 Web 开发中,为了保证数据传输的安全性,敏感数据往往不会直接明文传输,而是经过加密处理。其中,AES(高级加密标准) 是最常用的对称加密算法之一。
本文将通过一个电影列表数据的靶场案例,演示如何从发现加密数据、定位解密代码、分析 AES 参数,到最终在控制台和工具中还原明文数据的全过程。
一、 理论基础:AES 解密五要素
在开始实战前,需要了解 AES 解密的核心逻辑。正如我们在理论部分所学,AES 解密并非只有一个"密码",它通常涉及以下五个关键要素:
-
数据 (data):被加密的密文。
-
密钥 (key):用于解密的钥匙。
-
初始向量 (iv):增加加密随机性的参数。
-
模式 (mode):加密的工作模式(如 CBC、ECB)。
-
填充 (padding):数据块不足时的填充方式(如 Pkcs7)。
特别注意模式的特征:
-
CBC 模式 :解密时一定需要 iv。
-
ECB 模式 :解密时一定没有 iv。
掌握这些理论,在逆向时就能有的放矢。
二、 寻找入口:发现加密数据
实战的第一步是确认目标数据是否被加密。

首先,打开靶场页面,可以看到页面上正常展示着电影列表数据,包括 ID、标题、主演等信息。这说明浏览器最终渲染的是明文。

为了探究数据传输过程,按 F12 打开开发者工具,切换到 Network(网络) 面板。刷新页面后,在请求列表中寻找获取数据的接口。通常这类接口会命名为 data.php、list.json 或 api 等。在这里,找到了 data.php 这个请求。

点击 data.php 查看响应内容(Response)。令人意外的是,这里并没有直接的中文电影名,而是一串乱码般的字符串。仔细观察返回的 JSON 结构,发现它包含了 code、key、iv 和 data 四个字段。
-
data:显然是加密后的密文。 -
key和iv:这直接印证了之前的理论------这是一个使用 CBC 模式 的 AES 加密,因为服务器把密钥和向量都下发给了前端。
三、 定位源码:搜索 CryptoJS
既然知道了是 AES 加密,下一步就是找到前端负责解密的 JavaScript 代码。
大多数现代网站不会手写 AES 算法,而是使用成熟的库,其中最著名的就是 CryptoJS 。 在开发者工具的 Sources(源代码) 面板中,按下 Ctrl + Shift + F 打开全局搜索框,输入关键词 CryptoJS。 搜索结果直接指向了 aes.js 文件。点击进入该文件,看到了熟悉的解密逻辑代码。

阅读 aes.js 的代码,可以清晰地看到解密流程:
-
调用
CryptoJS.AES.decrypt。 -
传入参数:
ciphertext(密文)、keyWordArray(密钥)、iv(向量)。 -
配置对象中明确写着:
mode: CryptoJS.mode.CBC和padding: CryptoJS.pad.Pkcs7。
这完全符合的理论预期:AES + CBC 模式 + Pkcs7 填充。

四、 提取参数:准备解密
找到了代码逻辑,需要从网络请求中提取出具体的参数值,以便进行模拟解密。
回到 data.php 的响应包,将所需的参数一一提取出来:
-
iv :
MTIzNDU2Nzg5MEFCQ0RFRg== -
key :
e10adc3949ba59abbe56e057f2012345 -
mode :
CBC -
padding :
Pkcs7 -
data: (那一大串 Base64 编码的密文)
五、 模拟执行:控制台还原数据
有了参数和逻辑,最快的方法是直接在浏览器控制台(Console)中运行解密代码。
由于 aes.js 中的解密函数可能封装在闭包里,可以尝试直接在控制台调用页面上暴露的全局函数,或者根据源码逻辑构造调用语句。 如图所示,在控制台输入类似 encrypt("密文", "密钥", "iv") 的语句(注:此处函数名可能因混淆而异,重点是传入这三个参数)。

按下回车,控制台打印出了一个包含 5 个对象的数组。展开查看,title 字段变成了"大话西游之大圣娶亲",actors 变成了"周星驰..."。 这说明成功利用前端逻辑还原了数据。

六、 工具验证:Ctool 插件解密
除了控制台,也可以使用浏览器插件或在线工具来验证解密结果,这在编写爬虫脚本时非常有用。
打开 Ctool 插件(或其他 AES 解密工具),切换到 AES 选项卡:
-
模式 :选择
CBC。 -
填充 :选择
Pkcs7。 -
密钥 (Key):粘贴提取出的 key。
-
偏移量 (IV):粘贴提取出的 iv。
-
密文:粘贴那一大串 data。
点击解密后,看到输出了一堆 \u5927\u8bdd\u897f... 格式的字符。这是 Unicode 编码 的中文。

接着,切换到 Ctool 的 编解码 -> Unicode 功能。 将刚才解密出来的 Unicode 字符串粘贴进去,点击"解码"。 原本看不懂的编码就变成了清晰的中文 JSON 数据

七、 总结
通过本次实战,我们完整体验了 JS 数据逆向的标准流程:
-
抓包分析 :发现响应数据包含
key、iv、data,判断为 AES CBC 模式。 -
源码审计 :全局搜索
CryptoJS定位解密逻辑,确认算法细节。 -
参数提取:从网络请求中获取解密所需的五要素。
-
模拟还原:通过控制台或第三方工具(Ctool)成功还原明文。