Dokümantasyon
/
VM Obfuscation
/

Doğrudan eval Davranışı

Doğrudan eval() VM Obfuscation'ı Devre Dışı Bırakır

Bir fonksiyon, gövdesinin herhangi bir yerinde (iç içe fonksiyonlar dahil) doğrudan bir eval(code) çağrısı içeriyorsa, fonksiyonun tamamı ve tüm iç içe fonksiyonları VM obfuscation tarafından atlanır. Bunun nedeni, doğrudan eval'in kendisini çevreleyen fonksiyonun yerel değişkenlerine erişebilmesi; bu değişkenlerin ise fonksiyon VM bayt koduna derlendiğinde kullanılamamasıdır.

// ❌ Entire IIFE is NOT VM-obfuscated because of direct eval inside
(function () {
    function loadConfig() {
        eval(decodedLoader); // direct eval - blocks VM for the whole IIFE
    }
    // ... all your code ...
})();

// ✅ Use indirect eval - runs in global scope, does not block VM
(function () {
    function loadConfig() {
        (0, eval)(decodedLoader); // indirect eval - VM obfuscates the IIFE
    }
    // ... all your code ...
})();

// ✅ Or unwrap the IIFE - each top-level function is checked independently
function loadConfig() {
    eval(decodedLoader); // only this function is skipped
}
// ... other top-level functions are still VM-obfuscated ...

Tespit mekanizması doğrudan eval çağrılarını yakalar (eval(code) ve eval?.(code)). (0, eval)(code) ve window.eval(code) gibi dolaylı biçimler global kapsamda çalışır ve VM obfuscation'ı engellemez.

Kaçış yolu (v6.14.0+): Çevreleyen fonksiyonu yine de bayt koduna dönüştürmek ve VMDynamicCodeSkipped uyarısını bastırmak için vmForceCompileDynamicCode: true ayarlayın (veya VM bölümünün Geçersiz Kılmalar grubundaki Force Compile Dynamic Code anahtarını açın). Bu yalnızca, çalışma zamanında oluşturulan gövdenin obfuscator'ın yeniden adlandırdığı bir tanımlayıcıya başvurma ihtimali yoksa güvenlidir; aksi takdirde kod çalışma zamanında ReferenceError fırlatır. Ödünleşimin tamamı için tarif sayfasına bakın.