JSVMP · JavaScript 虚拟机混淆

JS 加密与 JS 混淆

JSVeil 将 JavaScript 转换为自定义字节码,由生成的虚拟机执行。保留原有功能,让浏览器中的代码更难阅读、复制和篡改。

立即体验
(function/* JSVeil */ He(Y,d){const Q=d.Object,ee=d.Array,T=d.Function,fe=d.Reflect,S=d.Error,G=d.TypeError,ae=d.ReferenceError,Bt=d.RegExp,dt=d.BigInt,Ft=d.atob,bt=d.String.fromCharCode,Z=fe.apply,Ut=fe.construct,B=Q.defineProperty,Je=Q.getOwnPropertyDescriptor,F=Q.freeze,E=Math.imul,we=T.prototype.toString,ge=T.call.bind(T.call),Ne=T.call.bind(d.String.prototype.charCodeAt),kt=T.call.bind(ee.prototype.slice),Re=T.call.bind(ee.prototype.push),he=T.call.bind(ee.prototype.pop),qt=T.call.bind(ee.prototype.lastIndexOf),X=T.call.bind(WeakMap.prototype.get),me=T.call.bind(WeakMap.prototype.set);function ye(e){let t=2166136261;for(let n=0;n<e.length;n++)t=E(t^Ne(e,n),16777619);return t>>>0}const ve={},Qe=new WeakMap;let Xe=0;B(ve,"v",{get(){return Xe++,7}}),me(Qe,ve,9);const Ye=ve.v^7|Xe^1|X(Qe,ve)^9|E(2147483647,3)^2147483645,z=ye(Z(we,He,[]))^Ye,Ae=d.atob(Y[0]);let $=Y[1]^z;const Ce=new Uint8Array(Ae.length);for(let e=0;e<Ae.length;e++)$^=$<<13,$^=$>>>17,$^=$<<5,Ce[e]=Ne(Ae,e)^$&255;function Ze(e,t){if(!t)return e;if(t<0||t>134217728)throw new S;const n=new Uint8Array(t);let o=0,r=0;function i(f){if(f===15){let u;do{if(o>=e.length)throw new S;u=e[o++],f+=u}while(u===255)}return f}for(;o<e.length;){const f=e[o++],u=i(f>>>4);if(o+u>e.length||r+u>t)throw new S;if(n.set(e.subarray(o,o+u),r),o+=u,r+=u,o===e.length)break;if(o+2>e.length)throw new S;const c=e[o++]|e[o++]<<8;if(!c||c>r)throw new S;const a=i(f&15)+4;if(r+a>t)throw new S;if(a<=c)n.set(n.subarray(r-c,r-c+a),r),r+=a;else for

在线混淆器

输入代码

example.js

自定义混淆选项

0 / 9

代码结构

用指定种子复现混淆结果。

替换可重命名的全局变量和函数名称。

加入干扰分析的虚假分支。

运行限制

仅允许浏览器执行。

限制代码可以运行的域名。

调试与输出

定期检查开发者工具是否打开。

多次检测到长时间暂停后,停止受保护代码的运行。

关闭浏览器控制台中的日志输出。

增加单步调试的难度。

默认已启用内置混淆保护,可按需开启额外功能。

关于 JSVeil

JSVeil 是一款采用 JSVMP 技术的 JavaScript 混淆器,让代码更难分析和逆向还原。你可以根据项目需要,选择不同的混淆和防护功能。

免费版

30 KB 内免费使用。

自定义混淆选项

设置代码混淆方式与运行限制,各项功能可单独开启。

自定义种子

种子用于控制混淆时的随机变化。源码、选项和编译器版本相同时,使用同一个种子可以复现混淆结果。

关闭时,每次混淆都会自动生成密码学安全的随机种子。

全局名称重命名

替换符合条件的全局变量和函数名称,让原始代码结构更难辨认。

如果 HTML、其他脚本或外部接口使用了这些名称,请先检查相关引用。

虚假分支

插入用于干扰分析的分支,让真正的执行路径更难辨认。

可能让文件变大、运行变慢,默认关闭。

环境检测

开启后,限制自动化工具、jsdom、Node.js 等环境执行。

仅允许浏览器执行。

域名限制

可以填写一个或多个域名,也支持通配子域名。中文等国际化域名会自动转换为对应的 ASCII 域名。

*.example.com 只匹配子域名。如果也要允许 example.com,请单独添加。

开发者工具检测

定期检查开发者工具是否打开,默认每 1,500 毫秒检测一次。

检测到后会触发相应的防护措施。

VM 超时检测

开启后,会检查受保护代码执行时是否长时间暂停,例如调试时停在断点。默认每次检测到至少 15 秒的暂停记为一次,累计 2 次后,当前 VM 将停止运行受保护代码。

这里统计的是长时间暂停的次数,不是代码的总运行时长。暂停多久算一次、出现几次后停止,都可以自行设置。

禁用控制台输出

混淆后的脚本运行时,不再向控制台输出日志。

适合上线后不需要日志的场景,但也会增加排查问题的难度。

反调试

定期触发 debugger 语句,干扰调试过程。默认每 1,000 毫秒触发一次。

常见问题

JSVeil 是什么?

JSVeil 是一款采用 JSVMP 技术的 JavaScript 混淆器,让代码更难分析和逆向还原。你可以根据项目需要,选择不同的混淆和防护功能。

什么是 JSVMP(JavaScript 虚拟机混淆)?

JSVMP 会将需要保护的代码转换为自定义字节码,再由产物中附带的 JavaScript 虚拟机执行。分析者需要先理解字节码和虚拟机的工作方式,才能还原代码逻辑,因此分析难度更高。

会存储我的源代码吗?

不会。源代码仅用于完成本次混淆,处理后不会留存。

JSVeil 免费吗?

可以,30 KB 以内的 JavaScript 文件都能免费混淆。欢迎用自己的代码试试看。

需要更强的混淆保护,或混淆更大的文件?

欢迎通过邮箱 联系我们,告诉我们你的需求,获取适合项目的定制方案。