Обфускация JavaScript на основе виртуальной машины
Обфускатор JavaScript
JSVeil преобразует JavaScript в собственный байткод и создаёт виртуальную машину для его выполнения. Это усложняет анализ, воспроизведение и изменение кода в браузере.
Попробоватьconst project = {
name: "JSVeil",
greeting: "Hello",
excited: true
};
function createFormatter(settings) {
const prefix = settings.greeting + ", ";
let calls = 0;
return function (name) {
const label = String(name).trim() || "friend";
calls += 1;
let suffix = "";
if (settings.excited) {
for (let i = 0; i < calls && i < 3; i++) {
suffix += "!";
}
} else {
suffix = ".";
}
return prefix + label + suffix;
};
}
const greet = createFormatter(project);
console.log(greet(project.name));
(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Результат
// Здесь появится результат.
После обработки код можно скопировать или скачать.О JSVeil
JSVeil — обфускатор JavaScript, использующий виртуальную машину (VM) для выполнения защищённого кода. Это усложняет анализ и реверс-инжиниринг, а параметры защиты можно настроить под ваш проект.
Бесплатная версия
До 30 КБ — бесплатно.
Настройка обфускации
Настройте обфускацию кода и ограничения его выполнения. Каждый параметр можно включить отдельно.
Свой seed
Seed определяет случайные преобразования при обфускации. Одинаковые исходный код, параметры, версия компилятора и seed позволяют воспроизвести результат.
Если опция отключена, компилятор при каждой обфускации создаёт новое криптографически стойкое случайное значение seed.
Переименование глобальных имён
Переименовывает глобальные переменные и функции, которые можно обработать, чтобы исходную структуру было сложнее распознать.
Перед включением проверьте ссылки на эти имена в HTML, других скриптах и публичных интерфейсах.
Ложный поток управления
Добавляет ложные ветви, затрудняющие анализ реального пути выполнения.
Может увеличить размер результата и время выполнения. По умолчанию отключено.
Проверки окружения
Ограничивает выполнение в инструментах автоматизации, jsdom, Node.js и подобных средах.
Выполнение разрешено только в браузере.
Ограничение по домену
Поддерживает один или несколько хостов и маски поддоменов. Интернационализированные имена преобразуются в ASCII.
Маска *.example.com не включает example.com. При необходимости добавьте основной домен отдельно.
Обнаружение DevTools
Периодически проверяет, открыты ли инструменты разработчика. Интервал по умолчанию — 1 500 мс.
При обнаружении срабатывает защита во время выполнения.
Проверка тайм-аута VM
При включении проверяет, возникают ли длительные паузы при выполнении защищённого кода, например во время отладки. По умолчанию каждая обнаруженная пауза от 15 секунд считается одним событием. После двух таких пауз текущая VM прекращает выполнение защищённого кода.
Учитывается число длительных пауз, а не общее время работы кода. Можно настроить минимальную длительность паузы и количество пауз до остановки.
Отключение вывода в консоль
Отключает вывод в консоль при выполнении обфусцированного скрипта.
Подходит, если в рабочей версии не нужны логи, но усложняет поиск ошибок.
Защита от отладки
Периодически выполняет инструкции debugger, прерывающие процесс отладки. Интервал по умолчанию — 1 000 мс.
Частые вопросы
Что такое JSVeil?
JSVeil — обфускатор JavaScript, использующий виртуальную машину (VM) для выполнения защищённого кода. Это усложняет анализ и реверс-инжиниринг, а параметры защиты можно настроить под ваш проект.
Что такое VM-обфускация JavaScript?
VM-обфускация преобразует защищаемый код в собственный байткод. Его выполняет виртуальная машина, написанная на JavaScript и включённая в итоговый файл. Этот дополнительный слой усложняет анализ кода и восстановление исходной логики.
Вы сохраняете мой исходный код?
Никогда. Исходный код используется только для обработки текущего запроса на обфускацию и после этого не сохраняется.
JSVeil бесплатный?
Да. JavaScript-файлы размером до 30 КБ можно обфусцировать бесплатно. Попробуйте на своём коде.
Нужна более сильная обфускация или поддержка больших файлов?
Напишите нам на и расскажите о своих требованиях. Мы поможем подобрать решение для вашего проекта.