【JS解密】JS解密踩坑思路

admin 2026-04-21 02:18:54 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文通过两个实战案例解析JS前端加密的解密思路:案例一演示如何通过断点调试获取动态AES密钥和偏移量,案例二详细分析DES函数strEnc的参数传递与加解密验证。核心方法论包括行为观测、数据流追踪、算法识别和验证闭环四步,强调从前端JS代码中复现加密链路的能力培养。文档最后提供实战案例资料获取渠道。 综合评分: 83 文章分类: WEB安全,渗透测试,代码审计,漏洞分析,实战经验


cover_image

【JS解密】JS解密踩坑思路

原创

隐雾安全 隐雾安全

隐雾安全

2026年4月3日 09:03 四川

在小说阅读器读本章

去阅读

📝 编者语

前端加密困扰了我很久,最近有所突破。

这篇文章是我最近的实战复盘:怎么从“看到一坨JS”走到“我知道它怎么加密、怎么还原”。

1

前置知识:

为什么登录接口总要“rsa= / rsa密文”这种东西?

先讲我最早卡住的点:很多系统登录并不是把数据明文发给后端,而是:

  • 前端对提交内容做加密/封装
  • 后端再拿密文做解密或比对
  • 这样可以降低明文抓包直接复用的风险

但这里有个很关键的“逆向乐趣点”: 只要加密发生在前端(JS),我就有机会通过分析 JS找到加密算法与参数。 当然,若校验强且密钥完全在后端,这会更难;但这类“算法在前端露着”的场景,是可以被学习/验证的。

先看页面提交的“加密字段”长什么样

打开目标登录页,看到网络请求里类似这种结构

  • 页面请求 POST …/tpass/login

  • 表单字段出现一个加密字段,例如:rsa=
  • rsa= 后面是一段看起来很像 密文/hex字符串的数据

我当时的想法很朴素:

既然它传了密文,那我就先确认:密文到底是由什么输入拼出来的。

这里虽然不是传统“漏洞”,但逻辑一样

虽然这不是“漏洞挖掘”那种直接利用,但它和src 的思维是同一套:

  1. 行为观测:前端何时、以什么参数加密?
  2. 数据流追踪:明文(账号/密码/其它字段)如何进入加密函数?
  3. 算法识别:加密函数用的是哪套算法(DES/AES/RSA等)?参数是什么?
  4. 可验证性闭环:能不能把“加密结果”反向得到明文/得到解密一致结果?

当把这四步走通,学习就从“看懂代码”变成“能复现链路”。

2

案例一

怎么用断点调试拿到“动态AES密钥”和偏移量

在这个案例里,我遇到的现象是:登录时输入账号(比如 admin/123456)后,前端会对密码做加密,并且加密所用的关键参数并不是死写的常量。

1 怎么定位“动态密钥从哪来”

我做法是:

  • 先用搜索(在源码里找 AES 相关关键词/加密函数引用)
  • 再在关键加密函数附近下断点
  • 观察运行时的参数:密钥(key)、偏移量(iv/offset)等

流程:“搜索aes找到位置后断点调试获取动态AES密钥和偏移量”。

2 我怎么理解请求/返回包在干什么

抓包里能看到登录请求里带了某些字段(如 username/password 或其它被加密后的组合),并且在前端可能还会:

  • 先对明文做处理
  • 再把密文编码成特定格式(例如 base64/URLencode/hex)
  • 最后塞进请求体字段里发给后端

结论是:

这套“动态密钥”通常意味着:不是简单的“固定密钥加密”,而是更偏“运行时生成+混淆”的前端实现。

3 我对这类加密的学习理解

我觉得这类系统的学习价值在于:

  • 你不是去“破解密码”
  • 而是去搞清楚:前端加密是否可被复现、哪些参数是可观测的、哪些依赖后端

就学习来说,做到“加密过程可读、可重放”就已经很够用了。

3

案例二

案例二提供了非常明确的函数结构:strEnc,以及对 DES 的实现代码。

1 先从加密函数签名下手:strEnc 是啥?

页面代码里出现类似:

js

$(“#rsa”).val(strEnc(u+p+lt,’1′,’2′,’3′));

把它翻译成“人的话”就是:

  • 先把 u + p + lt 拼成明文
  • 然后调用 strEnc(明文, firstKey, secondKey, thirdKey)
  • 输出密文写入 rsa 字段

这一下就舒服了:参数是显式传进来的(’1′,’2′,’3’),意味着可以追踪这些 key 到底如何参与DES运算。

代码分析:

$(“#rsa”).val(strEnc(u+p+lt , ‘1’ , ‘2’ , ‘3’));

U=username,p=password,lt=数据包字段数据

两套加密:账号密码登录一套,手机号登录一套(这里加解密内容为账号加密内容)

2 怎么找到对应的DES代码

JS源码目录中存在 des.js,对应 strEnc 使用的 DES 实现。

在学习中可以用这样的思路:

  • 先看 strEnc 里 key 是如何处理成字节数组的(getKeyBytes / generatekeys等)
  • 再顺藤摸瓜到 DESCore / DES加密函数

3 验证“加密/解密对不对”:就用控制台复现

闭环:

  • 添加下几行js代码,定义data待加密明文内容,定义encrypted调用strEnc()加密,后调用strDec()解密即可

  • 调用 strEnc(data, “1”,”2″,”3″) 得到 encrypted
  • 再调用 strDec(encrypted,”1″,”2″,”3″) 还原 decrypted
  • 加密解密成功

4

我的思考

这两份案例给我的统一体感是:

  • 看到密文字段(rsa=)→ 先做行为观测
  • 追加密函数(strEnc / AES encrypt)→ 做数据流追踪
  • 找 DES/AES 实现 → 做算法识别
  • 最后用控制台写复现脚本 → 做验证闭环

如果只学会“怎么套库”,只会会停在“看懂”; 但如果按这套证据链走,就会获得“能复现、能解释、能写报告”的能力

🎁 文末福利

联系客服获取《JS加解密实战案例》

!

微信号丨Hiddenfog001


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:隐雾安全 隐雾安全 隐雾安全《【JS解密】JS解密踩坑思路》

评论:0   参与:  0