Dokümantasyon
/
VM Obfuscation
/

Asenkron Yürütücü

Async Executor

Pro
v7.3.0+

VM'i asenkron çalıştırın; böylece bayt kodu şifre çözme anahtarı, paketin içinde gönderilmek yerine çalışma zamanında alınabilir.

vmAsyncExecutor seçeneği, asenkron VM yürütücüsünü etkinleştirir. Öne çıkan faydası, artık vmBytecodeArrayEncodingKeyGetter ifadesinin bir Promise döndürebilmesidir — asenkron bir anahtar getirici — böylece şifre çözme anahtarı, kod ilk çalıştığında senkron olarak hazır olmak yerine yükleme sırasında bir ağ isteğinden, IndexedDB'den veya herhangi bir asenkron kaynaktan gelebilir.

Arka uçtan anahtar getiren eksiksiz bir anlatım için Bayt Kodu Dizi Anahtarını Arka Uçtan Alma tarifine bakın.

Ne zaman kullanılır

Tamamen asenkron kod tabanları için şiddetle önerilir. Bu modda yalnızca async fonksiyonlar sanallaştırılır — senkron bir fonksiyon, dönüş değeri bir Promise haline getirilip çağıranları bozulmadan asenkron yapılamaz — dolayısıyla baştan sona async olan kod en geniş kapsamı elde eder. Kök senkron olduğunda da (örneğin senkron bir IIFE veya UMD sarmalayıcı) yine çalışır: içindeki en dıştaki async fonksiyonlar korunur, senkron kısımlar olduğu gibi bırakılır.

Neler dönüştürülür

Nerede görünürse görünsün (senkron sarmalayıcıların içinde iç içe olanlar dahil) her en dıştaki async fonksiyon. Her zincirdeki en dıştaki async, korunan birimdir — içindeki her şey, senkron ve asenkron, derlemeye dahil edilir. Senkron fonksiyonlar ve düz üreteçler obfuscate edilmeden bırakılır.

function foo() {              // sync — left as-is
    function bar() {}         // sync — left as-is

    async function baz() {    // transformed
        // any code here, including calls to other async or sync functions
    }

    async function bark() {   // transformed
        // any code here, including calls to other async or sync functions
    }
}

Atlamalar ve uyarılar

Asenkron bir anahtar getirici etkinken asenkron üreteçler de obfuscate edilmeden bırakılır — bir asenkron üreteç, yineleyicisini senkron olarak döndürmek zorundadır ve anahtarı bekleyemez. Varsayılan vmTargetFunctionsMode: 'root' modunda atlamalar sessizdir (seçim otomatiktir). 'comment' modunda, açıkça işaretlediğiniz bir fonksiyon sanallaştırılamadığında — senkron çıktığında veya asenkron bir anahtar getirici altındaki bir asenkron üreteç olduğunda — ObfuscationResult.getWarnings() üzerinden bir uyarı yayınlanır. Bu uyarılar (VMSyncFunctionSkippedInAsyncMode, VMAsyncGeneratorSkippedInAsyncMode) warnings seçeneği aracılığıyla tür bazında susturulabilir (v7.8.0+).

Gereksinimler

  • Asenkron anahtar getirici, bir vmBytecodeArrayEncodingKeyGetter ile birlikte vmBytecodeArrayEncoding gerektirir.
  • Obfuscator sürümü 7.3.0 veya üzeri.

Örnek

JavaScriptObfuscator.obfuscate(code, {
    vmObfuscation: true,
    vmAsyncExecutor: true,
    vmBytecodeArrayEncoding: true,
    vmBytecodeArrayEncodingKey: 'mySecretKey123',
    // the key getter may now return a Promise
    vmBytecodeArrayEncodingKeyGetter: 'fetch("/vm-key").then((res) => res.text())'
});