Comment la VM transforme le code
Avec vmTargetFunctionsMode: 'root' (valeur par défaut), l'obfuscation VM transforme le corps de chaque fonction de niveau racine en bytecode (selon vmObfuscationThreshold), mais laisse le nom de la fonction inchangé.
// 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
}
Cette conception préserve la compatibilité avec le code qui appelle ces fonctions depuis la portée globale ou qui s'attend à les trouver sur l'objet global. Le corps de la fonction est entièrement protégé, mais son nom reste visible.
Masquer les noms de fonctions sensibles :
Si le nom d'une fonction révèle ce que fait le code (par exemple validateLicense, decryptData), adoptez l'une des approches suivantes :
Option 1 : encapsuler dans une IIFE (recommandé)
Placez les fonctions sensibles à l'intérieur d'une IIFE ou de n'importe quel autre corps de fonction. Les fonctions imbriquées dans d'autres fonctions ne sont pas de niveau racine : elles sont donc entièrement transformées par la VM, nom compris.
// 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 outputOption 2 : renommage des globales + encodage (à utiliser avec prudence)
Activez
renameGlobals: true,vmBytecodeEncoding: trueetvmBytecodeArrayEncoding: true. Les identifiants de niveau racine sont alors renommés et chiffrés dans le bytecode.
