JavaScript Kod Gizleme Aracı
Kod gizleme, JavaScript kaynağınızı okumanın maliyetini artırır; tam anlamıyla değil (hiçbir ön uç gizlemesi kurşun geçirmez değildir), ancak gelişigüzel incelemeyi caydıracak ve otomatik veri kazımayı yavaşlatacak kadar. Bu araç dize dizisi kodlaması, tanımlayıcı karıştırma, kontrol akışı düzleştirme ve isteğe bağlı ölü kod enjeksiyonu uygular; her seçeneği, ne kadar agresif olmak istediğinize göre seçebilirsiniz.
JavaScript nasıl gizlenir
-
1
Kaynağı yapıştırın
Geçerli her JS uygundur. Kod, bir ana sayfadaki belirli global özellik adlarına bağımlıysa bunları ayrılmış (reserved) olarak ayarlayın.
-
2
Teknikleri seçin
Dize kodlaması (hex / base64), tanımlayıcı karıştırma, kontrol akışı düzleştirme, ölü kod enjeksiyonu, kendini savunan sarmalayıcı.
-
3
Hedef profili seçin
Tarayıcı (ES5 güvenli, Node API'leri yok), Node.js (`require`, `Buffer` izinli) veya düşük (çoğunlukla yalnızca küçültme).
-
4
Gizle
Araç, dönüştürülmüş kodu boyut farkıyla birlikte verir. Agresif ayarlar çıktıyı kaynaktan 3–5 kat daha büyük yapabilir.
Teknikler ve size maliyeti
| Teknik | Saldırganın çabasını artırır | Çalışma zamanı maliyeti | Boyut maliyeti |
|---|---|---|---|
| Değişken adı değiştirme | Düşük | İhmal edilebilir | Daha küçük (küçültmenin yan etkisi) |
| Dize dizisi kodlaması | Orta | Çok az (dize başına bir arama) | +10–30% |
| Kontrol akışı düzleştirme | Yüksek | Ölçülebilir (~%2–5) | +50–150% |
| Ölü kod enjeksiyonu | Düşük (göstermelik güvenlik) | Küçük | +20–50% |
| Kendini savunan sarmalayıcı | Orta | Tek seferlik kontrol | +5–10% |
| Hata ayıklama koruması | Orta (DevTools’u algılar) | Tek seferlik kontrol | +5% |
| VM / sanallaştırma (premium) | Çok yüksek | Büyük (5–20x) | +300–500% |
Kod gizlemenin koruyamayacağı şeyler
- Sırlar. Ön uç kaynağınızdaki her sabit, yeterince zaman verilince okunabilir. API anahtarları, kimlik doğrulama sırları, fiyatlandırma mantığı, bunları gizlemek için asla kod gizlemeye güvenmeyin. Sunucu tarafına taşıyın.
- Gözlemlenebilir çıktısı olan algoritmalar. Tarayıcı çalıştırabiliyorsa, hata ayıklayıcısı olan bir saldırgan her girdi ve çıktıyı gözlemleyebilir. Kod gizleme bunu yavaşlatır; durdurmaz.
- Büyük ölçekli otomatik veri kazıma. Kazımaya karşı koruma, kaynak gizlemeye değil davranışsal tespite (parmak izi, hız sınırları, CAPTCHA) dayanır.
Kod gizleme ne zaman değer
- Kurcalamaya karşı koruma: gömülü SDK’larda (lisanslama, reklam SDK’ları, oyun istemcileri).
- Maliyeti yükseltmek: rakip bir uygulamanın zahmetsizce kopyalanıp yapıştırılmasına karşı.
- Otomatik betik sınıflandırmasını zorlaştırmak: geniş kapsamlı kazıyıcılar için.
Ne zaman ters teper
- Zaten bir paketleyiciniz var. Üretim modundaki Webpack + Terser yerel değişkenleri zaten küçültüp karıştırır. İkinci bir gizleme geçişi eklemek pek işe yaramaz ve paket boyutunu şişirir.
- First Paint / Core Web Vitals için optimize ediyorsunuz. Agresif gizleme paketi üç katına çıkarır; bu da FCP ve LCP’ye zarar verir.
- Üretimde hata ayıklamanız gerekiyor. Ağır gizleme, eşleşen bir kaynak haritası olmadan Sentry yığın izlerini neredeyse kullanışsız kılar, kaynak haritasını yayınlamak ise gizlemeyi boşa çıkarır.
Sık yapılan hatalar
- Kod gizlemeyi şifrelemeyle eşdeğer saymak. Öyle değildir, yalnızca yavaşlatan bir engeldir.
- Kaynak haritasını gizlenmiş paketle birlikte üretime göndermek. Bu, gizlemeyi tamamen etkisiz hâle getirir.
- CDN’den zaten yüklediğiniz üçüncü taraf kütüphaneleri gizlemek. Hiçbir kazanç olmadan boyut cezasını ödersiniz.
Sık Sorulan Sorular
Hayır. Kod gizleme bir engeldir, kilit değil. Hata ayıklayıcısı olan kararlı bir analist mantığı geri çıkarır. Gelişigüzel incelemeyi ve çoğu otomatik kazıyıcıyı caydıracak kadar maliyeti artırır, ama güvenlik değildir.
Özelliklere dinamik olarak erişiyorsanız (obj["field_name"], Object.keys(obj)) ya da ana sayfa için belirli işlev/sınıf adlarına bağımlıysanız, bunları ayrılmış listesine ekleyin. Aksi hâlde özellik adlarının değiştirilmesi dış entegrasyonları bozabilir.
Orijinal kaynağı saklayın. Gizleme aracı tek yönlü bir dönüşümdür; gizlenmiş çıktıdan orijinali birebir geri getiremezsiniz, yalnızca okunabilir bir yaklaşık elde edebilirsiniz.
Hafif gizleme ~%10–30 ekler. Kontrol akışı düzleştirme artı dize dizileri %50–150 ekler. En ağır ayarlar boyutu üç katına çıkarabilir. Göndermeden önce çıktı boyutu sayacını kontrol edin.
İlgili Araçlar
ASCII Tablosu Referansı
NUL, LF ve DEL dahil her kod için ondalık, onaltılık, sekizlik ve ikili değerlerle HTML sayısal karakter başvurusu gösterimini sunan tam ASCII tablosu.
HTML Karakter Referansı
HTML varlıklarının aranabilir listesi; adlandırılmış ve sayısal kodlarıyla birlikte özel karakter ve semboller için tek tıkla kopyalama.
Klavye kısayolları başvurusu
macOS, Windows ve Linux’ta VS Code, Chrome ve GNU Readline kullanan Bash için belgelenmiş varsayılan kısayolları arayın.
FPS Sayacı
requestAnimationFrame ile tarayıcı FPS değerini ölçün: yumuşatma, en düşük ve en yüksek kare hızı, uyarı eşiği ve isteğe bağlı grafik. Yerel çalışır, yükleme ve API yoktur.
EditorConfig Oluşturucu
Girinti stili ve boyutu, satır sonu, karakter kümesi ve boşluk kurallarınızla bir .editorconfig dosyası oluşturarak IDE ve editörler arasında tutarlı biçimlendirme sağlayın.
E-posta Doğrulayıcı
Bir e-posta adresini doğrulayın: RFC 5322 sözdizimi kontrolü, canlı MX kaydı sorgulama, ayrıca yerel kısım, alan adı ve uzunluk bilgileri. Hiçbir e-posta gönderilmez.
Araç diğer dillerde mevcuttur
- Obfuscator JavaScript [ID]
- JavaScript難読化ツール [JA]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Trình làm rối mã JavaScript [VI]
- JavaScript-Obfuscator [DE]
- JavaScript 난독화 도구 [KO]
- Obfuskator JavaScript [PL]
- Ofuscador de JavaScript [PT]
- Ofuscador de JavaScript [ES]
- JavaScript-obfuskerare [SV]
- مُبهِّم JavaScript [AR]
- Obfuscateur JavaScript [FR]
- JavaScript-obfuscator [NL]
- Обфускатор JavaScript [RU]
- JavaScript混淆器 [ZH]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]