VM Çalışma Zamanı Hatalarını Teşhis Etme
Bu adımları sırayla izleyin. Her biri, hatalı kodu daraltmaya zaman harcamadan önce yaygın bir nedeni eler.
1. Gelişmiş savunmaları eleyin
Kodunuzla bağdaşmayan bir hata, çoğunlukla RangeError: Invalid array length, genellikle bir üretim derlemesinin, üretim derlemelerinin çalışmaması gereken bir yerde çalıştığı anlamına gelir. VM Self Defending ve VM Debug Protection; test çalıştırıcılarında ve diğer otomasyon araçlarında, headless tarayıcılarda, tarayıcı derlemesini çalıştıran Node.js veya jsdom'da ve DevTools'u açık tarayıcılarda kodu bilerek bozar. Her şeyden önce, hata veren kodun nerede çalıştığını kontrol edin.
Önce gelişmiş savunmaları (VM Self Defending, VM Debug Protection, VM Domain Lock) eleyin: hatayı, Test ve CI sayfasındaki geçersiz kılmaları kullanan bir test derlemesiyle yeniden üretin. Test derlemesi çalışıyorsa savunmalar kodunuzu bozmuyor, araçlarınıza veya ortamınıza tepki veriyordur.
2. Çalışma ortamı uyumluluğunu kontrol edin ve hatalı fonksiyonu daraltın
target değerinin, derleme hattının ve tüm ortam bildirimlerinin kodun gerçekte çalıştığı yerle eşleştiğini kontrol edin.
Bir derleme VMNoFunctionsToVirtualize gibi kapsam uyarıları bildiriyorsa, VM korumasının neleri kapsadığı için VM Obfuscation sayfasına bakın.
Hatalı durumu, hatayı hâlâ yeniden üreten en küçük fonksiyona ve çağrı noktasına indirgeyin. Hangi fonksiyonların sanallaştırılacağını daraltmak için comment modunu kullanın.
vmBytecodeArrayEncoding seçeneğini vmBytecodeArrayEncodingKeyGetter ile birlikte kullanıyorsanız, getirici tam olarak derleme anında kullanılan anahtarı döndürmelidir. Eşzamanlı bir getirici için anahtarın obfuscate edilmiş kod çalışmadan önce ayarlanmış olması gerekir. Promise döndüren bir getirici vmAsyncExecutor gerektirir. Bunlardan biri eksikse bayt kodu çözülemez.
Çalışma Ortamı Uyumluluğu · Bytecode Array Encoding anahtarı
3. Hata raporu gönderin
support@obfuscator.io adresine e-posta gönderin. Aşağıdakilerden ne kadar çoğunu eklerseniz sorunu o kadar hızlı düzeltebiliriz:
- Hata yığın izinin tamamı, konsolda göründüğü haliyle, başka sözcüklerle ifade edilmeden.
- JSON biçiminde obfuscator seçenekleri. Kullandığınız seçenekler nesnesinin tamamını (veya ön ayar adını ve varsa geçersiz kılmaları) kopyalayın. Seçenekler arasındaki ince etkileşimler yaygındır; bu nedenle tam seti bilmemiz gerekir.
- Derleme uyarıları, varsa: her birinin
type,messagevefunctionNamedeğerleri. - Obfuscator sürümü: panelde düzenleyicinin altındaki sürüm seçicide gösterilir. Doğrudan API çağrıları için
resultveyachunk_endmesajındakiversionalanıdır.javascript-obfuscatorpaketiyle, CLI'ın yazdırdığı veobfuscateProfonksiyonununonProgressgeri çağırmasına ilettiği ilerleme mesajında (Obfuscating with VM protection (vX.Y.Z)...) görünür. - Ortam: tarayıcı ve sürümü, Node.js sürümü, işletim sistemi, çalışma ortamıyla ilgili olağan dışı her şey (uzantılar, polyfill'ler, özel yerleşikler).
- Minimal yeniden üretim: ideal olarak 2. bölümdeki tek fonksiyon ve hatayı tetiklemek için gereken çağrı noktası.
- Mümkün olduğunda özgün (obfuscation öncesi) kaynak kod. Obfuscate edilmiş çıktı bizim tarafımızda da anlaşılmazdır; girdi olmadan kendi bayt kodumuza tersine mühendislik uygulamak zorunda kalırız.
Kaynak kod size özelse bunu e-postada belirtin; paylaşmadan önce bir gizlilik sözleşmesi (NDA) imzalayabiliriz. Bozuk bayt kodunu üreten girdi kalıbını görmeden VM hatalarını güvenilir biçimde teşhis edemeyiz; bu nedenle bu ek adıma değer.
