前言
日常工作中,产品同学经常会甩过来一个贼拉炫酷的网页问我:'这个效果能做吗?我就要这样的!' 面对这种需求,我们当然要干他(为了生活隐忍下来)。
为了复现效果,我们便去查看网页源代码,结果一看------瞬间蒙圈!

这种便是JavaScript的压缩混淆
JavaScript 压缩混淆
在现代网页开发中,JavaScript 压缩(Minification) 与 混淆(Obfuscation) 几乎是必不可少的环节。
早期的 JS 代码承担功能少,逻辑简单且体积小,不需要保护。但随着技术的发展,JS 承担的功能越来越多, 文件体积增大。为了优化用户体验,开发者们想了很多办法去减小 JS 文件体积,以加快 HTTP 传输速度。JS 压缩(Minification)技术应运而生。
压缩工具开发的初衷是减小 JS 文件体积,但 JS 代码经过压缩替换后,其可读性也大大降低,间接起到了保护代码的作用。
JavaScript 混淆(Obfuscation)是指通过一系列技术手段,使 JS 代码变得难以理解和分析,增加代码的复杂性和混淆度,实际上就是一种保护 JS 代码的手段。
常见混淆手段
变量名/函数名的替换,通过将有意义的变量名和函数名替换为随机生成的名称。
lua
/*
function calculateArea(radius) {
return Math.PI * radius * radius;
}
console.log(calculateArea(5));
*/
function _0x2d8f05(_0x4b083b) {
return Math.PI * _0x4b083b * _0x4b083b;
}
console.log(_0x2d8f05(5));
代码转换,将代码转换为等价的,但更难理解的形式。
ini
/*
let a = 1;
let b = 2;
let c = a + b;
console.log(c);
*/
let a = 1;
let b = 2;
let c = a - (-b);
console.log(c);
如何理解这些代码?
1. 格式化

现代浏览器通常都支持自动格式化功能。只需点击"Source"选项卡,然后选中相应的 JavaScript 文件,再点击"美化输出"(Pretty Print)按钮,即可实现代码的自动格式化。
2. 使用工具debug进行调试
在网页运行时,我们同样可以利用浏览器内置的调试功能进行代码调试。通过调试工具,可以查看 JavaScript 代码的执行过程,监控变量的变化,以及分析逻辑实现。 然而,这种方式的调试效率仍然较低,尤其是在代码经过压缩或混淆后,变量名被替换为诸如 a
、b
、c
等无意义的名称,使人难以理解。

解决方案
用AI进行理解学习
我们可以通过将代码转换为抽象语法树(AST),利用 AI 对其进行分析与理解。在此基础上,结合 AI Agent 的协同能力,让 AI 能够深入理解代码的复杂上下文,有效解决第三方库识别、变量名混淆等难题。

这是一个国外有趣的pixi游戏demo,整个游戏好玩有趣,交互灵活。但偏游戏类实现起来往往比较复杂,需要找对正确的实现思路。
我花了几天时间开发了一个小工具网站,帮助大家省去手动进行AST转换和接入Agent分析的麻烦。只需复制需要解析的源代码,即可直接输出分析结果。
www.jsunpack.tech (欢迎大家体验一下)
我们把一部分需要分析的函数粘贴到这个网站,点击执行后,立刻得到了结果。


可以看到有完整的注释,ts类型的代码也非常健壮。
我拿自己的一些代码测试的过程中,甚至发现生成的代码比我自己写的源码还要优秀 - -||