Dokumentation
/
VM-Obfuskierung
/

Wie die VM Code transformiert

Wie die VM Code transformiert

Mit vmTargetFunctionsMode: 'root' (Standard) wandelt die VM-Obfuskierung den Rumpf jeder Funktion auf Root-Ebene in Bytecode um (abhängig von vmObfuscationThreshold), lässt den Funktionsnamen dabei aber unverändert.

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

Dieses Vorgehen wahrt die Kompatibilität mit Code, der diese Funktionen aus dem globalen Scope aufruft oder sie am globalen Objekt erwartet. Der Funktionsrumpf ist vollständig geschützt, der Name bleibt jedoch sichtbar.

Sensible Funktionsnamen verbergen:

Wenn ein Funktionsname verrät, was der Code tut (z. B. validateLicense, decryptData), verwenden Sie einen der folgenden Ansätze:

  • Option 1: In ein IIFE einpacken (empfohlen)

    Platzieren Sie sensible Funktionen innerhalb eines IIFE oder eines beliebigen anderen Funktionsrumpfs. Funktionen innerhalb anderer Funktionen liegen nicht auf Root-Ebene und werden daher vollständig per VM transformiert, einschließlich ihrer Namen.

    // 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: Globals umbenennen + Codierung (mit Vorsicht einsetzen)

    Aktivieren Sie renameGlobals: true, vmBytecodeEncoding: true und vmBytecodeArrayEncoding: true. Damit werden Bezeichner auf Root-Ebene umbenannt und im Bytecode verschlüsselt.