Async Executor
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
vmBytecodeArrayEncodingKeyGetterile birliktevmBytecodeArrayEncodinggerektirir. - 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())'
});
