Documentation
/
Obfuscation VM
/

Comment la VM transforme le code

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 output
  • Option 2 : renommage des globales + encodage (à utiliser avec prudence)

    Activez renameGlobals: true, vmBytecodeEncoding: true et vmBytecodeArrayEncoding: true. Les identifiants de niveau racine sont alors renommés et chiffrés dans le bytecode.