Documentación
/
Ofuscación VM
/

Cómo transforma el código la VM

Cómo la VM transforma el código

Con vmTargetFunctionsMode: 'root' (por defecto), la ofuscación VM transforma el cuerpo de cada función de nivel raíz en bytecode (según vmObfuscationThreshold), pero mantiene el nombre de la función sin cambios.

// 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
}

Este diseño mantiene la compatibilidad con el código que llama a estas funciones desde el ámbito global o que espera encontrarlas en el objeto global. El cuerpo de la función queda totalmente protegido, pero el nombre permanece visible.

Ocultar nombres de funciones sensibles:

Si el nombre de una función revela lo que hace el código (por ejemplo, validateLicense, decryptData), utiliza uno de estos enfoques:

  • Opción 1: envolver en una IIFE (recomendado)

    Coloca las funciones sensibles dentro de una IIFE o de cualquier otro cuerpo de función. Las funciones dentro de otras funciones no son de nivel raíz, por lo que se transforman por completo con la VM, incluidos sus nombres.

    // 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
  • Opción 2: renombrar globales + codificación (usar con precaución)

    Activa renameGlobals: true, vmBytecodeEncoding: true y vmBytecodeArrayEncoding: true. Esto renombra los identificadores de nivel raíz y los cifra en el bytecode.