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 outputSeçenek 2: Global adları değiştirme + kodlama (Dikkatli kullanın)
renameGlobals: true,vmBytecodeEncoding: truevevmBytecodeArrayEncoding: trueseçeneklerini etkinleştirin. Bu, kök düzeyindeki tanımlayıcıları yeniden adlandırır ve bayt kodu içinde şifreler.
