Документация
/
VM-обфускация
/

Как VM преобразует код

Как 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. Это переименовывает идентификаторы верхнего уровня и шифрует их в байт-коде.