JS 混淆——脚本加密之外的第二层保护
工具集里的 JS 混淆
JsHook 工具集内置了 JS 代码混淆功能,和脚本加密是两套独立机制:
- 脚本加密:fridamod 专属,运行时解密,文件完全不可读
- JS 混淆:对明文脚本做代码变换,让脚本虽然可读但很难理解逻辑
两者可以叠加使用:先混淆、再加密。
什么时候用混淆
- 不想让别人直接看懂脚本逻辑(但又想保留明文形态)
- 加密脚本被反解密手段威胁时,混淆增加逆向成本
- 脚本需要兼容不支持加密的框架(fridainject / fridagadget),用混淆替代
混淆做了什么
典型 JS 混淆器做的变换包括:
- 变量名 → 随机字符串(
goldCount→_0x1a2b3c) - 字符串 → 数组索引 + 解密函数
- 控制流 → 打乱 if/else 和 switch/case
- 插入垃圾代码
- 编码(Base64 / Unicode)
JS Hook 内置混淆器的具体能力以实际版本为准,在工具集里选择混淆强度即可。
和加密的关系
| 方面 | 加密脚本 | JS 混淆 |
|---|---|---|
| 文件可读性 | ❌ 完全不可读 | ✅ 可执行 JS,难读懂 |
| 运行时开销 | 内存中解密后执行 | 直接执行(但代码更长更绕) |
| 框架限制 | 只能 fridamod | 所有框架都行 |
| 不可逆吗 | 是(JsHook 不解密) | 否(理论上可反混淆) |
| 保护强度 | 高 | 中 |
推荐策略
根据你的需求选:
| 需求 | 策略 |
|---|---|
| 绝对不想让别人看源码 | 加密脚本(fridamod) |
| 想让脚本可读但难理解 | 混淆 |
| 要兼容所有框架又想保护 | 混淆(不走加密,绕过框架限制) |
| 最高保护 | 先混淆 → 再加密(fridamod) |
注意
混淆后的脚本还是能正常执行的——它只是代码变换,功能逻辑不变。混淆完先跑一下空函数测试确认没改坏,再批量混淆生产脚本。