Dokümantasyon
/
Tarifler
/

VM Çalışma Zamanı Hatalarını Teşhis Etme

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 node ile ç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: false ile 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, JSON vb.) 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.