JavaScript Deobfuskatörü

Yetkili kod incelemesi, öğrenme, hata ayıklama ve daha güvenli betik incelemesi için JavaScript'i deobfuske edin.

Bu araç size yardımcı oldu mu?

3.9/5 From from from from from from from from from from from from from from from from from from from from from from from from from 28 derecelendirme notları

Yetkili hata ayıklama, sınıf içi çalışma, bakım ve savunma amaçlı analiz için zor okunan JavaScript kodunu incelemesi daha kolay hale getirin

Bir öğrenci; kısa değişken adları, kodlanmış dizeler, iç içe geçmiş ifadeler ve takip edilmesi zor fonksiyonlar içeren bir JavaScript projesini devralır. Sayfa çalışmaktadır, ancak gruptaki hiç kimse verilerin formdan nihai sonuca nasıl ulaştığını açıklayamaz.

Bir JavaScript Deobfuskatörü, dönüştürülmüş bazı kodların incelenmesini kolaylaştırmaya yardımcı olabilir. Girdiye bağlı olarak, yapıyı ortaya çıkarabilir, belirli kalıpları basitleştirebilir, bazı dizeleri çözebilir veya daha okunabilir, çalışan bir sürüm üretebilir.

Deobfuskasyon, orijinal kaynak kodunu geri kazanmakla aynı şey değildir. Yorumlar, anlamlı adlar, modül sınırları, TypeScript türleri ve geliştiricinin mantığı kalıcı olarak kaldırılmış olabilir. Karmaşık dönüşümler de otomatik analize direnç gösterebilir.

Bilinmeyen JavaScript, yalnızca ne yaptığını öğrenmek amacıyla asla çalıştırılmamalıdır. Savunma amaçlı analiz; yetkilendirme, korunmuş bir kopya, statik inceleme ve potansiyel olarak güvenli olmayan kod için tasarlanmış kontrollü bir ortamla başlar.

JavaScript Karmaşıklaştırması (Obfuscation) Ne Anlama Gelir

Karmaşıklaştırma, davranışını korumaya çalışırken kodu insanların anlamasını zorlaştıracak şekilde değiştirir. Bir geliştirici bunu rastgele kopyalamayı caydırmak, açık iş mantığını azaltmak veya tersine mühendisliği zorlaştırmak için kullanabilir.

Karmaşıklaştırılmış JavaScript şunları içerebilir:

  • Tek harfli veya anlamsız değişken adları.
  • Büyük kodlanmış dize dizileri.
  • Dolaylı fonksiyon çağrıları.
  • Gereksiz hesaplamalar.
  • Derinlemesine iç içe geçmiş koşullu ifadeler.
  • Kontrol akışı dönüşümleri.
  • Kaçış (escape) karakter dizileri.
  • Kodu dinamik olarak oluşturan veya değerlendiren fonksiyonlar.
  • Basit işlemlerin etrafındaki tekrarlayan sarmalayıcılar.
  • Gerçek davranışın dikkatini dağıtan ölü kod.

Küçültülmüş (minified) JavaScript de okunması zor olabilir, ancak küçültme genellikle dosya boyutunu azaltmaya odaklanır. Karmaşıklaştırma ise anlamı gizlemeyi daha doğrudan hedefler.

Düzenleme (Beautification) ve Deobfuskasyon Farklıdır

Görev Ana Amaç Tipik Sonuç
Düzenleme Girinti ve satır sonları eklemek Daha net görsel yapıya sahip aynı mantık
Küçültme Üretim dosya boyutunu azaltmak Biçimlendirmesi kaldırılmış kompakt kod
Karmaşıklaştırma Amacı anlaşılması güç hale getirmek Değiştirilmiş adlar, dizeler ve kontrol akışı
Deobfuskasyon Davranışı ve yapıyı ortaya çıkarmaya yardımcı olmak Daha anlaşılır ama eksik bir yeniden yapılandırma

Sorun yalnızca tek satırlık biçimlendirmeyse, JavaScript Düzenleyici ile başlayın. Kod, olağan biçimlendirmeden sonra da kasıtlı olarak kafa karıştırıcı kalıyorsa deobfuskasyon daha uygundur.

Deobfuskasyon Neyi Ortaya Çıkarmaya Yardımcı Olabilir

  • Fonksiyon ve blok sınırlarını.
  • Tekrarlayan dize aramalarını.
  • Kodlanmış veya kaçışlı metin değerlerini.
  • Dolaylı olarak yazılmış ağ hedeflerini.
  • Olay işleyicilerini ve yürütme giriş noktalarını.
  • Betik tarafından seçilen veya değiştirilen sayfa öğelerini.
  • Depolama, çerez, pano veya form erişimini.
  • Oluşturulan kodu değerlendirmek için kullanılan fonksiyonları.
  • Kullanılmayan veya dikkat dağıtan dalları.
  • Girdiden çıktıya genel akışı.

Her sonuç doğrulama gerektirir. Bir dönüşüm bir alanı basitleştirirken başka bir alanı anlaşılması zor bırakabilir.

Otomatik Deobfuskasyonun Garanti Edemeyeceği Şeyler

Bir deobfuskatör şunları garanti edemez:

  • Orijinal fonksiyon ve değişken adlarının geri kazanılmasını.
  • Silinen yorumların geri yüklenmesini.
  • Projenin orijinal klasör yapısının geri kazanılmasını.
  • Her karmaşıklaştırma katmanının tamamen kaldırılmasını.
  • Çalışma zamanında oluşturulan kodun doğru yorumlanmasını.
  • Sonucun güvenli şekilde çalıştırılmasını.
  • Betiğin zararsız olduğunun kanıtını.
  • Başkasının kodunu kopyalama veya yeniden yayınlama izni.
  • Mantık hatalarının otomatik olarak düzeltilmesini.
  • Hiçbir zaman dahil edilmemiş sunucu tarafı kaynak kodun geri kazanılmasını.

JavaScript Daha Güvenli Nasıl Analiz Edilir

  1. Yetkiyi doğrulayın. Kendi kodunuzu, onaylanmış sınıf materyalini veya inceleme izniniz olan kodu analiz edin.
  2. Orijinali koruyun. Kaynağını kaydedin ve inceleme gerektiriyorsa güvenilir bir dosya karması (hash) hesaplayın.
  3. Çalıştırmayın. Statik incelemeyle başlayın.
  4. Bir kopyayı biçimlendirin. Betik sıkıştırılmışsa bir düzenleyici kullanın.
  5. Yalnızca hassas olmayan içeriği gönderin. Çevrimiçi bir araç kullanmadan önce özel anahtarları, jetonları, öğrenci verilerini ve gizli kodu kaldırın.
  6. Deobfuskasyon sürecini çalıştırın. Sonucu ayrı bir analiz dosyası olarak kaydedin.
  7. Orijinali ve çıktıyı karşılaştırın. Hangi dönüşümlerin gerçekleştiğini doğrulayın.
  8. Giriş noktalarını ve yan etkileri belirleyin. Ağ, depolama, DOM ve dinamik yürütme davranışını arayın.
  9. Bulguları belgeleyin. Kanıtları satır referansları ve belirsizlikle kaydedin.
  10. Riskli örnekleri üst mercilere iletin. Bilinmeyen veya potansiyel olarak kötü amaçlı kod, onaylanmış bir ortamda deneyimli bir güvenlik uzmanı tarafından ele alınmalıdır.

Statik İnceleme için Bir Çerçeve

Statik inceleme, kodu çalıştırmadan incelemek anlamına gelir. Bilinmeyen betikler için uygun başlangıç noktasıdır.

1. Giriş Noktalarını Belirleyin

Doğrudan fonksiyon çağrılarını, olay dinleyicilerini, sayfa yükleme işleyicilerini, zamanlayıcıları, modül başlatmayı ve içe aktarılan fonksiyonları arayın. Bunlar yürütmenin nerede başlayabileceğini gösterir.

2. Girdileri Belirleyin

Şunlara erişimi arayın:

  • Form alanları.
  • URL parametreleri.
  • Çerezler.
  • Yerel veya oturum depolaması.
  • API yanıtları.
  • Pano verileri.
  • Yüklenen dosyalar.
  • Sayfa metni ve öznitelikleri.

3. Çıktıları Belirleyin

Şunları arayın:

  • Sayfada yapılan değişiklikler.
  • Ağ istekleri.
  • Yönlendirmeler.
  • İndirmeler.
  • Depolama değişiklikleri.
  • Konsol çıktısı.
  • Oluşturulan HTML.
  • Dış hizmetlere yapılan çağrılar.

4. Dinamik Yürütmeyi Bulun

eval() gibi fonksiyonlar, dinamik fonksiyon oluşturma ve dizelerden oluşturulan betikler dikkatli bir inceleme gerektirir. Bunların varlığı otomatik olarak kötü amaçlı davranışı kanıtlamaz, ancak statik anlaşılmayı zorlaştırır.

5. Kodlanmış Dizeleri Takip Edin

Karmaşıklaştırılmış bir betik, URL'leri veya mesajları kaçışlı, onaltılık (hexadecimal) veya Base64 metni olarak saklayabilir. Yalnızca zararsız kopyalanmış değerleri çözün ve sonucu çalıştırmayın.

Eğitim ve Savunma Amaçlı Gerçek Kullanım Örnekleri

1. Bir Grup Projesinde Okunabilirliği Geri Kazanmak

Bir öğrenci ekibi, önceki bir derleme (build) sürecinin yalnızca dönüştürülmüş bir JavaScript dosyası ürettiğini keşfeder. Orijinal kaynak kodunun yedeği alınmamıştır.

Ekip bir kopyayı düzenler ve deobfuske eder, ardından ana fonksiyonları ve sayfa seçicilerini belirler. Doğrulanmış davranışa dayanarak anlamlı adlar aşamalı olarak eklenir.

Yeniden yapılandırılan dosya geçici bir bakım kaynağı haline gelir, ancak ekip bunun tam olarak orijinal olmadığını belgeler.

2. Bir Bilgisayar Dersinde Karmaşıklaştırmayı İncelemek

Bir öğretmen, iki sayıyı toplayan zararsız bir betik sağlar. Bir sürüm okunabilirken diğeri yeniden adlandırılmış değişkenler ve kodlanmış dizeler kullanır.

Öğrenciler dosyaları karşılaştırır, deobfuskasyon araçlarını kullanır ve hangi bilgilerin geri kazanılabilir olduğunu, hangilerinin olamayacağını açıklarlar.

Ders; yazılım şeffaflığına, bakıma, fikri mülkiyete ve güvenlik sınırlarına odaklanır.

3. Üçüncü Taraf Bir Widget'ı İncelemek

Bir okul web sitesi yöneticisine, kurulumdan önce küçük bir üçüncü taraf widget'ı değerlendirme izni verilir.

Betik; dış istekler, çerez erişimi, form alanı toplama ve DOM değişiklikleri açısından incelenir. Resmi belgeler ve gizlilik koşulları, gözlemlenen kodla karşılaştırılır.

Açıklanamayan davranış, widget görsel olarak yararlı göründüğü için görmezden gelinmez, sağlayıcıya bildirilir.

4. Beklenmeyen Yönlendirmeleri Araştırmak

Yeni başlayan bir geliştirici, bilinmeyen bir betiği yükledikten sonra bir test sayfasının yönlendirme yaptığını fark eder.

Betik sayfadan kaldırılır, kanıt olarak korunur ve statik olarak incelenir. Deobfuskasyon, bir hedef dizeyi ve gezinmeyi tetikleyen koşulu ortaya çıkarmaya yardımcı olur.

Kaynağı ve amacı doğrulanana kadar kod canlı sayfaya geri yüklenmez.

5. Kodlanmış Bir Yapılandırmayı Anlamak

İzin verilen bir betik, arayüz etiketleri ve API yolları içeren bir dize tablosu içerir. Değerlerin kullanımlarıyla ilişkilendirilmesi zordur.

Geliştirici, dizi konumları ile çözülmüş değerler arasında bir eşleme oluşturur ve ardından bir çalışma kopyasındaki referansları yeniden adlandırır.

Base64 gibi görünen herhangi bir örnek, yalnızca değerin zararsız veri olduğu bilindiğinde Base64 Çözme Aracı ile ele alınır.

6. Sınıf İçi Bir Oyunu Denetlemek

Bir öğretmen, eski bir öğrenci tarafından oluşturulan bir tarayıcı oyununu kullanmak ister. Oyunun JavaScript kodu kasıtlı olarak okunması zor haldedir.

Kod; ağ bağlantıları, veri toplama, reklamlar, dış betikler ve güvenli olmayan HTML ekleme açısından gözden geçirilir. Oyun yalnızca onaylanmış, izole bir ortamda test edilir.

Davranış güvenle açıklanamıyorsa öğretmen başka bir kaynak seçer.

7. Bozuk Bir Üretim Paketini (Bundle) Teşhis Etmek

Bir öğrenci, küçültülmüş ve karmaşıklaştırılmış bir uygulamayı dağıtır, ancak bir düğme yalnızca üretim sürümünde başarısız olur.

Öncelikle kaynak kod, derleme yapılandırması ve kaynak haritaları (source maps) kontrol edilir. Etkilenen paketin deobfuske edilmiş bir kopyası, üretim dönüşümünün davranışı nerede değiştirdiğini belirlemeye yardımcı olur.

Düzeltme, doğrudan üretilen pakette değil, okunabilir kaynak kodda ve derleme sürecinde yapılır.

8. Savunma Amaçlı Triyaj Yapmak

Bir yönetici, bir test web sitesine eklenmiş bilinmeyen bir betik keşfeder. Dosya izole edilir ve kaynağı belgelenir.

Statik analiz; şüpheli hedefleri, kimlik bilgisi toplamayı, enjekte edilmiş betikleri ve kalıcılık mekanizmalarını arar. Örnek, sıradan bir okul bilgisayarında çalıştırılmaz.

Deneyimli güvenlik personeli, kuruluşun olay müdahale sürecine uygun olarak ileri analizi üstlenir.

İncelenmeye Değer Kalıplar

Kalıp Neden Dikkat Gerektirir Olası Meşru Kullanım
eval() Bir dizeden kod çalıştırır Eski araçlar veya kontrollü geliştirme örnekleri
Dinamik betik oluşturma Ek kod yükleyebilir Onaylanmış widget veya modül yükleme
Kodlanmış dize dizileri URL'leri ve mesajları gizleyebilir Karmaşıklaştırma veya kompakt üretilmiş varlıklar
Çerez veya depolama erişimi Kullanıcı veya oturum verilerini okuyabilir Tercihler ve kimliği doğrulanmış uygulama durumu
Form değeri toplama Gönderilen bilgileri yakalayabilir Beklenen form işleme
Beklenmeyen dış istekler Verileri başka bir yere aktarabilir Belgelenmiş API'ler, analitik veya medya hizmetleri
Tekrarlayan yönlendirmeler Kullanıcıları başka bir siteye taşıyabilir Onaylanmış oturum açma veya ödeme akışı
Pano erişimi Kopyalanan içeriği okuyabilir veya değiştirebilir Kullanıcının talep ettiği kopyala-yapıştır özellikleri

Bağlam önemlidir. Bir kalıp otomatik olarak kötü amaçlı olarak etiketlenmemeli, araştırılmalıdır.

Analiz Sırasında Değişkenleri Yeniden Adlandırma

Karmaşıklaştırılmış kod, a, b ve _0x4fa2 gibi adlar kullanabilir. Değişkenleri yalnızca rolleri hakkında kanıt topladıktan sonra yeniden adlandırın.

Örneğin:

const a = document.querySelector("#email");
const b = a.value;

Bir çalışma kopyası şunu kullanabilir:

const emailField = document.querySelector("#email");
const emailValue = emailField.value;

Adlar, doğrulanmış davranışı tanımlamalıdır. Kanıtlar bu sonucu gerçekten desteklemedikçe stolenPassword gibi adlardan kaçının.

Bir Analiz Kopyası için Yorumlar

Gözlemi çıkarımdan ayıran yorumlar ekleyin:

// Gözlem: e-posta alanının değerini okur.
// Çıkarım: bu, form gönderimi için kullanılabilir.
// Amacına karar vermeden önce emailValue'nin nereye gönderildiğini doğrulayın.

Bu tarz, belirsizliği görünür kılar ve varsayımların gerçekmiş gibi tekrar edilmesini önler.

Bunun Çözdüğü Yaygın Sorunlar

  • İzin verilen bir JavaScript dosyası, biçimlendirmeden sonra bile anlaşılması zor kalır.
  • Bir grup projesinde yalnızca dönüştürülmüş bir üretim paketi bulunur.
  • Bir sınıf dersi, okunabilir ve karmaşıklaştırılmış kodu karşılaştırır.
  • Üçüncü taraf bir widget savunma amaçlı bir inceleme gerektirir.
  • Bir test sayfası açıklanamayan bir yönlendirme içerir.
  • Kodlanmış dize dizileri yapılandırma değerlerini gizler.
  • Yalnızca üretimde görülen bir hata, derleme süreciyle ilgili olabilir.
  • Bilinmeyen bir betik statik, savunma amaçlı bir triyaj gerektirir.

Yaygın Deobfuskasyon Hataları

Önce Betiği Çalıştırmak

Bilinmeyen kod sayfayı değiştirebilir, dış hizmetlerle iletişime geçebilir, bilgi toplayabilir veya içerik indirebilir. Statik incelemeyle başlayın.

Çıktının Güvenli Olduğunu Varsaymak

Daha okunabilir bir betik, orijinaliyle aynı güvenli olmayan eylemleri gerçekleştirebilir.

Tam Orijinal Kaynak Kodunu Beklemek

Silinen yorumlar, adlar, modüller ve türler geri kazanılamayabilir.

Gizli Kodu Çevrimiçi Bir Araca Göndermek

Özel iş mantığı, jetonlar, okul sistemleri ve öğrenci verileri izin alınmadan yüklenmemelidir.

İzinsiz Kod Analiz Etmek

Kodun okunabilir olması, yasal, sözleşmeye dayalı veya etik kısıtlamaları ortadan kaldırmaz. Yalnızca yetkili materyali analiz edin.

Çok Erken Yeniden Adlandırma

Yanlış bir ad, araştırmanın geri kalanını yanlış yönlendirebilir. Anlam atamadan önce veri akışını takip edin.

Üretilen Paketi Düzenlemek

Değişiklikler bir sonraki derlemede kaybolabilir. Mevcut olduğunda okunabilir kaynak kodu ve derleme ayarlarını düzeltin.

Kaynak Haritalarını (Source Maps) Görmezden Gelmek

Kaynak haritaları, üretim kodunu orijinal dosyalara bağlayabilir. Manuel bir yeniden yapılandırma denemeden önce onaylanmış haritaların olup olmadığını kontrol edin.

Güvenlik ve Gizlilik

JavaScript; URL'ler, API tanımlayıcıları, jetonlar, dahili yorumlar, test hesapları ve kullanıcı verileri içerebilir. Deobfuskasyon, daha önce okunması zor ama hiçbir zaman gerçekten gizli olmayan değerleri ortaya çıkarabilir.

Üretim kimlik bilgilerini, özel okul kodunu, öğrenci kayıtlarını veya gizli üçüncü taraf betikleri çevrimiçi bir hizmete yapıştırmayın.

Potansiyel olarak kötü amaçlı kod keşfedilirse:

  • Canlı sayfadan bağlantısını kesin.
  • Orijinali güvenli bir şekilde koruyun.
  • Nerede ve ne zaman bulunduğunu kaydedin.
  • Normal bir cihazda çalıştırmaktan kaçının.
  • Sorumlu yöneticiyi bilgilendirin.
  • Kuruluşun olay müdahale sürecini izleyin.

Sık Sorulan Sorular

Bir JavaScript Deobfuskatörü ne yapar?

Yapıyı ortaya çıkararak ve desteklenen karmaşıklaştırma kalıplarını basitleştirerek dönüştürülmüş JavaScript'in incelenmesini kolaylaştırmaya çalışır.

Tam olarak orijinal kodu geri kazanabilir mi?

Hayır. Orijinal adlar, yorumlar, modüller, türler ve kaynak organizasyonu kalıcı olarak kaldırılmış olabilir.

Deobfuske edilmiş JavaScript'i çalıştırmak güvenli midir?

Hayır. Okunabilir çıktı, orijinaliyle aynı eylemleri gerçekleştirebilir. Herhangi bir kontrollü çalıştırmadan önce inceleyin.

Düzenleme (beautifying) ile deobfuskasyon arasındaki fark nedir?

Düzenleme biçimlendirme ekler. Deobfuskasyon, değiştirilmiş adlar, dizeler ve kontrol akışı tarafından gizlenen anlamı ortaya çıkarmaya çalışır.

Öğrenciler bu aracı kullanabilir mi?

Evet, zararsız sınıf örnekleriyle veya kendi yetkili projeleriyle. Bilinmeyen betikler öğretmen veya güvenlik uzmanı rehberliğinde ele alınmalıdır.

Gizli her dizeyi çözebilir mi?

Hayır. Dizeler çalışma zamanında oluşturulmuş, şifrelenmiş, sıkıştırılmış olabilir veya mevcut olmayan verilere bağlı olabilir.

Üçüncü taraf kodu deobfuske etmeli miyim?

Yalnızca izniniz ve meşru bir inceleme amacınız varsa. Lisanslara, sözleşmelere ve geçerli kurallara uyun.

Karmaşıklaştırma, tarayıcı kodundaki sırları korur mu?

Hayır. Rastgele incelemeyi yavaşlatabilir, ancak tarayıcılar kodu almak zorundadır ve kararlı analistler bunu araştırabilir. Sırlar, korunan sunucu sistemlerine ait olmalıdır.

Şüpheli JavaScript ile ne yapmalıyım?

Aktif kullanımdan kaldırın, kanıtları koruyun, normal çalıştırmadan kaçının ve sorumlu yöneticiyi veya bir güvenlik uzmanını bilgilendirin.

Son Analiz Kontrol Listesi

  • Kodu inceleme yetkisi doğrulandı.
  • Orijinal dosya korundu.
  • Bilinmeyen kod rastgele çalıştırılmadı.
  • Önce düzenlenmiş bir kopya incelendi.
  • Deobfuske edilmiş sonuç ayrı olarak saklanıyor.
  • Giriş noktaları, girdiler, çıktılar ve yan etkiler belirlendi.
  • Ağ hedefleri belgelendi.
  • Dinamik kod yürütmesi ek inceleme aldı.
  • Gözlemler varsayımlardan ayrıldı.
  • Hiçbir gizli kod veya öğrenci verisi yüklenmedi.
  • Potansiyel olarak kötü amaçlı örnekler güvenli bir şekilde üst mercilere iletildi.

İlgili Araçlar

Ana sorun sıkıştırılmış biçimlendirmeyse JavaScript Düzenleyici'yi kullanın. JavaScript Küçültücü yalnızca okunabilir kaynak kodun test edilmiş bir üretim kopyası için kullanılmalıdır.

İlgili sayfa yapısını ve stillerini incelemek için HTML Düzenleyici ve CSS Düzenleyici'yi kullanın.

Zararsız bir dizenin Base64 olduğu doğrulandığında, Base64 Çözme Aracı'nı kullanın ve sonucu güvenilmeyen veri olarak değerlendirin.

Son Düşünceler

Bir JavaScript Deobfuskatörü; yetkili bakımı, sınıf içi çalışmayı, hata ayıklamayı, üçüncü taraf incelemesini ve savunma amaçlı araştırmayı destekleyebilir. Zor kodu daha erişilebilir hale getirebilir, ancak kaldırılan her şeyi yeniden oluşturamaz.

İzin ve statik incelemeyle başlayın. Orijinali koruyun, kopyaları biçimlendirin ve deobfuske edin, kanıtları belgeleyin ve bilinmeyen betikleri normal bir cihazda çalıştırmaktan kaçının.

Amaç yalnızca kodu daha temiz göstermek değildir. Amaç; kullanıcıları, sistemleri ve özel bilgileri korurken betiğin ne okuduğunu, neyi değiştirdiğini, neyi gönderdiğini, neyi sakladığını ve neyi yüklediğini anlamaktır.

Öğretmenler içinÖğrenciler için