文章总结: 本文通过两个实战案例详细解析JS前端加密的解密思路:案例一通过断点调试获取动态AES密钥和偏移量,案例二分析DES函数strEnc的参数传递与实现。核心方法论包括行为观测、数据流追踪、算法识别和验证闭环四步骤,强调从加密函数定位到控制台复现的完整学习路径,最终实现加密过程的可重放能力。 综合评分: 85 文章分类: WEB安全,代码审计,渗透测试,逆向分析,安全工具
【JS解密】JS解密踩坑思路
原创
隐雾安全 隐雾安全
隐雾安全
2026年4月3日 09:03 四川
📝 编者语
前端加密困扰了我很久,最近有所突破。
这篇文章是我最近的实战复盘:怎么从“看到一坨JS”走到“我知道它怎么加密、怎么还原”。
1
前置知识:
为什么登录接口总要“rsa= / rsa密文”这种东西?
先讲我最早卡住的点:很多系统登录并不是把数据明文发给后端,而是:
- 前端对提交内容做加密/封装
- 后端再拿密文做解密或比对
- 这样可以降低明文抓包直接复用的风险
但这里有个很关键的“逆向乐趣点”: 只要加密发生在前端(JS),我就有机会通过分析 JS找到加密算法与参数。 当然,若校验强且密钥完全在后端,这会更难;但这类“算法在前端露着”的场景,是可以被学习/验证的。
先看页面提交的“加密字段”长什么样
打开目标登录页,看到网络请求里类似这种结构
- 页面请求 POST …/tpass/login
- 表单字段出现一个加密字段,例如:rsa=
- rsa= 后面是一段看起来很像 密文/hex字符串的数据
我当时的想法很朴素:
既然它传了密文,那我就先确认:密文到底是由什么输入拼出来的。
这里虽然不是传统“漏洞”,但逻辑一样
虽然这不是“漏洞挖掘”那种直接利用,但它和src 的思维是同一套:
- 行为观测:前端何时、以什么参数加密?
- 数据流追踪:明文(账号/密码/其它字段)如何进入加密函数?
- 算法识别:加密函数用的是哪套算法(DES/AES/RSA等)?参数是什么?
- 可验证性闭环:能不能把“加密结果”反向得到明文/得到解密一致结果?
当把这四步走通,学习就从“看懂代码”变成“能复现链路”。
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解密踩坑思路》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论