Как VM преобразует код
При vmTargetFunctionsMode: 'root' (значение по умолчанию) VM-обфускация преобразует тело каждой функции верхнего уровня в байт-код (в зависимости от vmObfuscationThreshold), но оставляет имя функции неизменным.
// Input
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// Output - function NAME is preserved, BODY is VM-transformed
function fibonacci(b) { // name kept as-is
return vm.call(...); // body converted to bytecode
}
Такой подход сохраняет совместимость с кодом, который вызывает эти функции из глобальной области видимости или ожидает их на глобальном объекте. Тело функции полностью защищено, но имя остаётся видимым.
Скрытие чувствительных имён функций:
Если имя функции раскрывает, что делает код (например, validateLicense, decryptData), используйте один из этих подходов:
Вариант 1: обернуть в IIFE (рекомендуется)
Поместите чувствительные функции внутрь IIFE или любого другого тела функции. Функции внутри других функций не являются функциями верхнего уровня, поэтому они полностью преобразуются VM, включая их имена.
// Wrap sensitive code in IIFE (function() { function fibonacci(n) { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); } // Use fibonacci here... })(); // "fibonacci" name is completely hidden in outputВариант 2: переименование глобальных переменных + кодирование (использовать с осторожностью)
Включите
renameGlobals: true,vmBytecodeEncoding: trueиvmBytecodeArrayEncoding: true. Это переименовывает идентификаторы верхнего уровня и шифрует их в байт-коде.
