Diagnosing VM Runtime Errors
VM ile obfuscate edilmiş kodunuz çalışma zamanında hata veriyor - bu bir RangeError: Invalid array length olabilir, ancak
aynı kontrol listesi yalnızca obfuscation'dan sonra ortaya çıkan diğer beklenmedik hatalar için de geçerlidir. Aşağıdaki
adımları sırayla uygulayın. İlki, açık ara en yaygın nedeni yakalar; geri kalanı gerçek bir hatayı daraltır.
Adım 1 - Çalışma zamanını target seçeneğine göre kontrol edin
Invalid array length ve benzeri hataların açık ara en yaygın nedeni, target seçeneği ile kodun gerçekte çalıştığı
ortam arasındaki uyumsuzluğun vmSelfDefending: true ile birleşmesidir.
Bunun tetiklendiği ortamlar:
- Node.js (obfuscate edilmiş paketin doğrudan
nodeile çalıştırılması) - Headless Chrome / Chromium, PhantomJS
- Puppeteer, Playwright, Cypress, Selenium / ChromeDriver, Nightmare
- jsdom ve diğer sunucu tarafı DOM öykünmeleri
- Yerel tarayıcı yerleşiklerinin hook'landığı veya değiştirildiği herhangi bir ortam
Çalışma zamanınız bu listedeyse, hata bir arıza değil, korumanın tasarlandığı gibi çalışmasıdır. Durumunuza uyan çözümü seçin:
- Node.js'te bilinçli olarak çalıştırma (sunucu tarafı betik, CLI aracı, Electron ana süreci): obfuscate ederken
target: 'node'ayarlayın. Self-defending katmanı kendisini tarayıcı yerine Node için kalibre eder. - Obfuscate edilmiş bir derlemeye karşı otomatik testler / E2E çalıştırma (Cypress, Playwright, Puppeteer, Selenium):
vmSelfDefending: falseile ayrı bir test derlemesi üretin. Bu seçenek otomasyonu bozmak için tasarlanmıştır; tek tek araçlar için beyaz listeye alınamaz. Uyumsuz ortamların tam listesi için VM Self Defending sayfasına bakın. - Gerçek bir tarayıcıda çalıştırdığınız halde hâlâ hatayı görme: hiçbir eklentinin, devtools betiğinin veya sarmalayıcı sayfanın yerel yerleşikleri (
Array,Function.prototype,JSONvb.) hook'lamadığını doğrulayın. Bir hata olarak değerlendirmeden önce temiz bir profilde yeniden üretin.
Adım 2 - Tek bir fonksiyona daraltın
Adım 1 sorunu çözmediyse, hata dönüştürülmüş kodun belirli bir parçasındadır.
vmTargetFunctionsMode: 'comment' moduna geçin ve hata yeniden ortaya
çıkana kadar her seferinde bir fonksiyona /* javascript-obfuscator:vm */ ekleyin. Hata geri geldiğinde işaretlediğiniz
fonksiyon suçludur - destek ekibine göndereceğiniz minimal yeniden üretim budur.
Adım 3 - Hata bildirimi gönderin
Sorunun bir target/self-defending uyumsuzluğu olmadığını doğrulayıp daraltılmış bir fonksiyon elde ettikten sonra
support@obfuscator.io adresine e-posta gönderin. Aşağıdakilerden ne kadar çoğunu dahil
ederseniz, sorunu o kadar hızlı düzeltebiliriz:
- Tam hata yığın izi, konsolda göründüğü şekliyle - açımlaması değil.
- JSON olarak obfuscator seçenekleri. Kullandığınız seçenek nesnesinin tamamını (veya hazır ayar adını artı varsa geçersiz kılmaları) kopyalayın. Seçenekler arasındaki ince etkileşimler yaygındır, bu yüzden tam kümeye ihtiyacımız var.
- Obfuscator sürümü - düzenleyicinin sağ alt köşesinde gösterilir.
- Ortam - tarayıcı + sürüm, Node.js sürümü, işletim sistemi, çalışma zamanıyla ilgili sıra dışı herhangi bir şey (eklentiler, polyfill'ler, özel yerleşikler).
- Minimal yeniden üretim - ideal olarak Adım 2'deki tek fonksiyon, artı hatayı tetiklemek için gereken çağrı noktası.
- Orijinal (obfuscation öncesi) kaynak, mümkünse. Obfuscate edilmiş çıktı bizim tarafımızda da anlaşılmazdır; girdi olmadan kendi bayt kodumuzun tersine mühendisliğini yapıyoruz.
