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 outputOpción 2: renombrar globales + codificación (usar con precaución)
Activa
renameGlobals: true,vmBytecodeEncoding: trueyvmBytecodeArrayEncoding: true. Esto renombra los identificadores de nivel raíz y los cifra en el bytecode.
