根据JShaman(JShaman是专业的JavaScript代码混淆加密网站)提供的消息,JavaScript混淆技术大体有以下几种:
- 变量混淆
将带有JS代码的变量名、方法名、常量名随机变为无意义的类乱码字符串,降低代码可读性,如转成单个字符或十六进制字符串。
- 字符串混淆
将字符串阵列化集中放置、并可进行 MD5 或 Base64 加密存储,使代码中不出现明文字符串,这样可以避免使用全局搜索字符串的方式定位到入口点。
- 属性加密
针对 JavaScript 对象的属性进行加密转化,隐藏代码之间的调用关系。
- 控制流平坦化
打乱函数原有代码执行流程及函数调用关系,使代码逻变得混乱无序。
- 僵尸代码
随机在代码中插入无用的僵尸代码、僵尸函数,进一步使代码混乱。
- 调试保护
基于调试器特性,对当前运行环境进行检验,加入一些强制调试 debugger 语句,使其在调试模式下难以顺利执行 JavaScript 代码。
- 多态变异
使 JavaScript 代码每次被调用时,将代码自身即立刻自动发生变异,变化为与之前完全不同的代码,即功能完全不变,只是代码形式变异,以此杜绝代码被动态分析调试。
- 锁定域名
使 JavaScript 代码只能在指定域名下执行。
- 反格式化
如果对 JavaScript 代码进行格式化,则无法执行,导致浏览器假死。
- 数值常量加密
将数字常量变为运算表达式。
- JSON数据加密
对JSON数据进行加密。
- 收缩控制流
将函数中符合条件的多行代码收缩为单行,形成逗号运算符语法。
- AST执行保护
将某些代码转为AST,即:抽象语法树,代码运行时,直接执行此AST。
以及赋值花指令、正则表达式加密、Eval加密嵌套、虚拟指令等等。
JavaScript 混淆技术目的就是使得 JavaScript 变得难以阅读和分析,大大降低代码可读性,使机器能看懂能运行、但人看不懂,是很实用的 JavaScript 保护方案。