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
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.
Webpack Yapılandırma Oluşturucu
Kısa bir formdan webpack 5 için bir webpack.config.js oluşturun: entry, çıkış klasörü ve modu ayarlayın; ardından TypeScript, Babel, bir CSS yükleyici, HtmlWebpackPlugin ve bir dev sunucu açın.
Dosya Boyutu Dönüştürücü
Bayt, KB, MB, GB, TB ve ikili IEC birimleri (KiB, MiB, GiB, TiB) arasında, ondalık ve ikiliyi dilediğiniz gibi birleştirerek dönüşüm yapın.
Kurgusal telefon numarası oluşturucu
Beş ülkede resmen ayrılmış aralıklardan 50 adede kadar kurgusal numara üretin.
Telefon numarası doğrulayıcı
Telefon numarasının ülkeye göre yapısını denetleyin; bölge, tür, E.164, uluslararası, ulusal ve RFC 3966 biçimlerini görün.
Rastgele adres oluşturucu
Arayüz maketleri ve testler için üç basitleştirilmiş biçimde 1–20 adres benzeri kayıt oluşturun.
Araç diğer dillerde mevcuttur
- مُبهِّم JavaScript [AR]
- Ofuscador de JavaScript [ES]
- JavaScript-obfuscator [NL]
- JavaScript 난독화 도구 [KO]
- Obfuscateur JavaScript [FR]
- Trình làm rối mã JavaScript [VI]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Obfuskator JavaScript [PL]
- JavaScript-obfuskerare [SV]
- Ofuscador de JavaScript [PT]
- Obfuscator JavaScript [ID]
- JavaScript難読化ツール [JA]
- JavaScript-Obfuscator [DE]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]
- Обфускатор JavaScript [RU]
- JavaScript混淆器 [ZH]