Como a VM transforma o código
Com vmTargetFunctionsMode: 'root' (padrão), a ofuscação VM transforma o corpo de cada função de nível raiz em bytecode (conforme o vmObfuscationThreshold), mas mantém o nome da função inalterado.
// 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
}
Esse design mantém a compatibilidade com código que chama essas funções a partir do escopo global ou espera encontrá-las no objeto global. O corpo da função fica totalmente protegido, mas o nome continua visível.
Escondendo nomes de funções sensíveis:
Se o nome de uma função revela o que o código faz (por exemplo, validateLicense, decryptData), use uma destas abordagens:
Opção 1: envolver em uma IIFE (recomendado)
Coloque as funções sensíveis dentro de uma IIFE ou de qualquer outro corpo de função. Funções dentro de outras funções não são de nível raiz, então elas são totalmente transformadas pela VM, inclusive os nomes.
// 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 outputOpção 2: renomear globais + codificação (use com cautela)
Ative
renameGlobals: true,vmBytecodeEncoding: trueevmBytecodeArrayEncoding: true. Isso renomeia os identificadores de nível raiz e os criptografa dentro do bytecode.
