VM Kodu Nasıl Dönüştürür
İzle
Obfuscator.io: Targeting Functions in VM Obfuscation (IIFE and Comment Mode)
vmTargetFunctionsMode: 'root' (varsayılan) ile VM obfuscation, kök düzeydeki her fonksiyonun (veya vmAsyncExecutor ile en dıştaki her async fonksiyonun) gövdesini bayt koduna dönüştürür. Kök düzeydeki fonksiyonlar adlarını korur; iç içe olanlar her zamanki gibi yeniden adlandırılır. Bunun yerine herhangi bir iç içelik düzeyindeki fonksiyonları tek tek seçmek için comment modunu kullanın.
Bu tasarım, bu fonksiyonları global kapsamdan çağıran veya onları global nesne üzerinde bekleyen kodla uyumluluğu korur. Fonksiyon gövdesi tamamen korunur, ancak ad görünür kalır ve obfuscator bu adları listeleyen bir VMGlobalFunctionNamesNotRenamed uyarısı bildirir.
VM obfuscation fonksiyon gövdelerini ve vmWrapTopLevelInitializers açıkken en üst düzey değişken başlatıcılarını da korur (aşağıya bakın). Girdide hiçbir fonksiyon ve böyle bir başlatıcı yoksa (alert(1); gibi yalnızca en üst düzeyde kod içeriyorsa) hiçbir şey sanallaştırılmaz: obfuscation işleminin geri kalanı yine çalışır, ancak VM koruması uygulanmaz ve obfuscator bir VMNoFunctionsToVirtualize uyarısı bildirir (v7.14.1+; 7.14.0 sürümünün kendisi devre dışıdır). Bu uyarı, fonksiyonlar mevcut olduğu halde her biri atlandığında da (örneğin doğrudan eval veya dinamik bir new Function, vmTargetFunctions/vmExcludeFunctions hiçbir şeyi seçili bırakmadığında ya da vmAsyncExecutor hiçbir async fonksiyon bulamadığında) verilir. Korumak istediğiniz kodu bir fonksiyona, örneğin bir IIFE'ye sarmalayın.
En üst düzey başlatıcılar
Root modunda vmWrapTopLevelInitializers, const MY_STRING = 'my-string'; gibi uygun en üst düzey değişken başlatıcılarını IIFE'lere sarmalar; böylece değerleri düz JavaScript olarak görünür kalmak yerine bayt koduna taşınır. Güncel VM ön ayarları bunu etkinleştirir. Yalnızca değişken başlatıcılarını kapsar, diğer en üst düzey ifadeleri kapsamaz ve comment modunda hiçbir etkisi yoktur. Düz JavaScript olarak kalan başlatıcılar bir VMTopLevelInitializerNotVirtualized uyarısında listelenir.
Hassas fonksiyon adlarını gizleme
Root modu adı koruduğu için validateLicense veya decryptData gibi ne yaptığını açığa vuran bir ad, gövdesi bayt koduna dönüştükten sonra bile okunabilir kalır. Çözüm, fonksiyonu en üst düzeyden çıkarmaktır - onu bir IIFE'ye sarmalayın; orada artık kök düzeyde olmaz ve adı dahil tamamen VM ile dönüştürülür - ya da kök düzeydeki tanımlayıcıları renameGlobals ile yeniden adlandırmaktır. Her iki teknik ve ödünleşimleri için Fonksiyon Adlarını LLM Analizinden Gizleme sayfasına bakın.
