欢迎光临
我们一直在努力

Web Crypto API实战:AES-CBC加密逆向分析与Node.js复现

1. 项目概述:一次教科书式的AES逆向分析

最近在分析一些教育类应用的登录流程时,遇到了“升学e网通”这个案例。它的密码加密方式让我眼前一亮——这竟然是一个相当标准的AES加密实现。在如今各种魔改、混淆、自定义算法横行的逆向环境中,能遇到一个规规矩矩遵循标准协议的加密,简直像在沙漠里找到了一片绿洲。对于逆向新手来说,这无疑是一个绝佳的练手材料,因为它剥离了那些令人头疼的“黑盒”操作,让你能清晰地看到数据从明文到密文的完整、标准的转换过程。这个案例的核心,就是定位到其前端JavaScript代码中调用Web Crypto API进行AES-CBC加密的逻辑,并完整复现其加密过程,最终实现密码的模拟加密。整个过程涉及前端代码调试、加密参数提取和算法复现三个关键环节。

2. 逆向环境与目标分析

2.1 目标网站与工具准备

我们的目标是“升学e网通”的登录页面。在开始之前,需要准备好一套顺手的逆向工具链。浏览器自然是核心战场,Chrome或Edge的开发者工具是首选,其Sources面板和Network面板将是我们主要的侦察阵地。为了更高效地调试JavaScript,特别是处理经过压缩或混淆的代码,一个格式化工具(Pretty Print)是必不可少的。此外,因为涉及加密操作,我们需要一个能够执行JavaScript代码片段的环境,浏览器的Console面板就很好用,但对于更复杂的复现,也可以准备一个Node.js环境。最后,为了验证我们的复现结果,一个能够发送HTTP请求的工具如Postman或Hoppscotch也会很有帮助。

2.2 登录流程初探与加密定位

打开登录页面,输入账号密码(请务必使用测试账号),点击登录前,先打开开发者工具的Network面板,并勾选“Preserve log”。点击登录后,你会看到浏览器发起了一个登录请求。重点关注这个请求的Request Payload,你会发现密码字段(通常叫 password )已经不再是明文,而是一长串看似随机的字符,这证实了密码在客户端被加密了。我们的任务就是找到生成这串字符的JavaScript代码。通常,加密函数会在点击登录按钮时被触发。我们可以在Sources面板中,对可能的按钮点击事件监听器或者表单提交事件打上断点,然后再次点击登录,让代码执行暂停在加密发生之前。另一种更直接的方法是,在Network面板中找到那个登录请求,右键点击它,选择“Copy -> Copy as cURL”,然后粘贴到一个文本编辑器中,搜索 password 这个关键词,看看它的值是什么样子,这能给我们一个关于密文格式(比如是否是Base64编码)的初步印象。

3. 核心加密逻辑的定位与解析

3.1 搜索与追踪加密入口点

在庞大的前端代码库中寻找加密函数,需要一些技巧。最直接的方法是在Sources面板中,对所有已加载的JavaScript文件进行全局搜索。搜索关键词可以尝试“encrypt”、“AES”、“CBC”、“password”、“crypto”等。在“升学e网通”的案例中,通过搜索“encrypt”或“AES”,我们很快就能定位到关键代码段。这些代码通常不会深度混淆,因为Web Crypto API的使用本身比较标准。找到疑似函数后,在其第一行打上断点,然后再次触发登录操作。代码执行会在此处暂停,这时我们就能进入这个函数内部,一步步观察它如何工作。

3.2 标准AES-CBC参数剖析

当断点命中后,我们进入函数内部单步执行(F11)。关键的发现就在这里:代码中明确使用了 crypto.subtle.encrypt 这个API。这是现代浏览器提供的用于执行底层加密操作的Web Cryptography API接口。我们需要在调试器中仔细观察传递给这个函数的参数。一个标准的AES-CBC加密调用通常如下所示:

const encrypted = await crypto.subtle.encrypt(
{
name: \”AES-CBC\”, // 算法模式
iv: ivArrayBuffer, // 初始化向量
},
keyObject, // 加密密钥
pla

赞(0)
未经允许不得转载:171主机测评 » Web Crypto API实战:AES-CBC加密逆向分析与Node.js复现
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址