Dokümantasyon
/
VM Obfuscation
/

VM Kodu Nasıl Dönüştürür

VM Kodu Nasıl Dönüştürür

vmTargetFunctionsMode: 'root' (varsayılan) ile VM obfuscation, kök düzeyindeki her fonksiyonun gövdesini bayt koduna dönüştürür (vmObfuscationThreshold değerine bağlı olarak), ancak fonksiyon adını olduğu gibi bırakır.

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

Bu tasarım, bu fonksiyonları global kapsamdan çağıran veya onları global nesne üzerinde bekleyen kodlarla uyumluluğu korur. Fonksiyon gövdesi tümüyle korunur, ancak adı görünür kalır.

Hassas fonksiyon adlarını gizleme:

Bir fonksiyonun adı kodun ne yaptığını ele veriyorsa (örneğin validateLicense, decryptData), şu yaklaşımlardan birini kullanın:

  • Seçenek 1: Bir IIFE içine sarın (Önerilen)

    Hassas fonksiyonları bir IIFE'nin ya da herhangi başka bir fonksiyonun gövdesine yerleştirin. Başka fonksiyonların içindeki fonksiyonlar kök düzeyinde sayılmaz; bu nedenle adları da dahil olmak üzere tümüyle VM ile dönüştürülür.

    // 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
  • Seçenek 2: Global adları değiştirme + kodlama (Dikkatli kullanın)

    renameGlobals: true, vmBytecodeEncoding: true ve vmBytecodeArrayEncoding: true seçeneklerini etkinleştirin. Bu, kök düzeyindeki tanımlayıcıları yeniden adlandırır ve bayt kodu içinde şifreler.