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 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 öğrenciye, kısa değişken adları, kodlanmış diziler, iç içe geçmiş ifadeler ve izlenmesi zor işlevlerle dolu bir JavaScript projesi kalır. Sayfa çalışmaktadır, ama gruptan kimse verinin formdan sonuca hangi yoldan gittiğini anlatamaz.

JavaScript karışıklık giderici, dönüştürülmüş kodun bir kısmını incelenebilir hâle getirmeye yardım edebilir. Girdiye göre yapıyı açığa çıkarabilir, bazı kalıpları sadeleştirebilir, kimi dizilerin kodunu çözebilir ya da daha okunur, çalışır bir sürüm üretebilir.

Karışıklık gidermek, özgün kaynak kodu geri getirmekle aynı şey değildir. Açıklamalar, anlamlı adlar, modül sınırları, TypeScript türleri ve geliştiricinin düşünce yolu kalıcı olarak silinmiş olabilir. Karmaşık dönüşümler de otomatik çözümlemeye direnir.

Tanımadığınız bir JavaScript'i yalnızca ne yaptığını görmek için asla çalıştırmayın. Savunma amaçlı inceleme; izinle, saklanmış bir kopyayla, çalıştırmadan yapılan incelemeyle ve tehlikeli olabilecek kod için kurulmuş denetimli bir ortamla başlar.

JavaScript Karıştırma Ne Demek

Karıştırma, kodu insanların anlaması zorlaşacak biçimde değiştirirken davranışını olduğu gibi korumaya çalışır. Bir geliştirici bunu gelişigüzel kopyalamayı caydırmak, iş mantığını göz önünden kaldırmak ya da tersine mühendisliği zorlaştırmak için kullanabilir.

Karıştırılmış JavaScript şunları içerebilir:

  • Tek harflik ya da anlamsız değişken adları.
  • Kodlanmış dizilerden oluşan büyük diziler.
  • Dolaylı işlev çağrıları.
  • Gereksiz hesaplamalar.
  • Derin iç içe geçmiş koşul ifadeleri.
  • Denetim akışı dönüşümleri.
  • Kaçırılmış karakter dizileri.
  • Çalışma anında kod üreten ya da değerlendiren işlevler.
  • Basit işlemlerin çevresine sarılmış tekrar tekrar katmanlar.
  • Gerçek davranıştan uzaklaştıran ölü kod.

Küçültülmüş JavaScript'i okumak da zordur, ama küçültme genelde dosya boyutunu düşürmeye bakar. Karıştırma ise doğrudan anlamı gizlemeyi amaçlar.

Güzelleştirme ile Karışıklık Giderme Farklı Şeylerdir

İşlem Asıl amacı Tipik sonucu
Güzelleştirme Girinti ve satır sonu eklemek Aynı mantık, gözle daha anlaşılır bir yapı
Küçültme Yayın dosyasının boyutunu düşürmek Biçimlendirmesi alınmış, sıkışık kod
Karıştırma Niyeti anlaşılmaz kılmak Dönüştürülmüş adlar, diziler ve denetim akışı
Karışıklık giderme Davranışı ve yapıyı görünür kılmaya yardım etmek Daha anlaşılır ama eksik bir yeniden kurulum

Sorun yalnızca kodun tek satıra sıkışmasıysa, işe JavaScript Güzelleştirici ile başlayın. Karışıklık giderme, kod sıradan biçimlendirmeden sonra da bile bile kafa karıştırıcı kaldığında anlam kazanır.

Karışıklık Gidermenin Açığa Çıkarabilecekleri

  • İşlev ve blok sınırları.
  • Yinelenen dizi aramaları.
  • Kodlanmış ya da kaçırılmış metin değerleri.
  • Dolaylı yazılmış ağ hedefleri.
  • Olay işleyicileri ve çalışmanın başladığı noktalar.
  • Betiğin seçtiği ya da değiştirdiği sayfa öğeleri.
  • Depolama, çerez, pano ya da form erişimi.
  • Üretilen kodu değerlendiren işlevler.
  • Kullanılmayan ya da dikkat dağıtan dallar.
  • Girdiden çıktıya uzanan genel akış.

Her sonuç doğrulama ister. Bir dönüşüm bir yeri sadeleştirirken bir başka yeri anlaşılmaz bırakabilir.

Otomatik Karışıklık Gidermenin Söz Veremeyecekleri

Bir karışıklık giderici şunları güvence altına alamaz:

  • Özgün işlev ve değişken adlarının geri gelmesi.
  • Silinmiş açıklamaların geri getirilmesi.
  • Projenin özgün klasör yapısının bulunması.
  • Her karıştırma katmanının tamamen kaldırılması.
  • Çalışma anında üretilen kodun doğru yorumlanması.
  • Sonucun güvenle çalıştırılabilmesi.
  • Betiğin zararsız olduğunun kanıtlanması.
  • Başkasının kodunu kopyalama ya da yeniden yayımlama izni.
  • Mantık hatalarının kendiliğinden düzelmesi.
  • Hiç gönderilmemiş sunucu kaynağının bulunması.

JavaScript'i Daha Güvenli Nasıl İncelersiniz

  1. İzni doğrulayın. Kendi kodunuzu, onaylı ders materyalini ya da incelemeye izniniz olan kodu ele alın.
  2. Özgün dosyayı saklayın. Kaynağını kaydedin; inceleme gerektiriyorsa güvenilir bir dosya özeti hesaplayın.
  3. Çalıştırmayın. İşe çalıştırmadan incelemeyle başlayın.
  4. Bir kopyayı biçimlendirin. Betik sıkıştırılmışsa bir güzelleştirici kullanın.
  5. Yalnızca hassas olmayan içerik gönderin. Çevrim içi bir araç kullanmadan önce özel anahtarları, erişim anahtarlarını, öğrenci verilerini ve gizli kodu çıkarın.
  6. Karışıklık gidermeyi çalıştırın. Sonucu ayrı bir inceleme dosyası olarak kaydedin.
  7. Özgün hâli çıktıyla karşılaştırın. Hangi dönüşümlerin olduğunu saptayın.
  8. Başlangıç noktalarını ve yan etkileri bulun. Ağ, depolama, DOM ve çalışma anında kod çalıştırma davranışlarına bakın.
  9. Bulgularınızı yazın. Kanıtları satır numaralarıyla ve belirsiz kalan yönleriyle birlikte kaydedin.
  10. Riskli örnekleri üst makama iletin. Tanınmayan ya da zararlı olabilecek kodu, onaylı bir ortamda deneyimli bir güvenlik uzmanı ele almalıdır.

Çalıştırmadan İnceleme İçin Bir Çerçeve

Çalıştırmadan inceleme, kodu çalıştırmaksızın gözden geçirmek demektir. Tanımadığınız betikler için doğru başlangıç noktası budur.

1. Başlangıç Noktalarını Bulun

Doğrudan işlev çağrılarına, olay dinleyicilerine, sayfa yüklenme işleyicilerine, zamanlayıcılara, modül başlatmalarına ve içe aktarılmış işlevlere bakın. Bunlar çalışmanın nereden başlayabileceğini gösterir.

2. Girdileri Bulun

Şunlara erişim olup olmadığını arayın:

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

3. Çıktıları Bulun

Şunlara bakın:

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

4. Çalışma Anında Kod Çalıştırmayı Bulun

eval() gibi işlevler, çalışma anında işlev kurma ve dizilerden üretilen betikler dikkatli bir inceleme ister. Bunların varlığı kendiliğinden kötü niyet kanıtlamaz, ama kodu çalıştırmadan anlamayı zorlaştırır.

5. Kodlanmış Dizileri İzleyin

Karıştırılmış bir betik adresleri ya da iletileri kaçırılmış, onaltılık veya Base64 metin olarak saklayabilir. Yalnızca kopyaladığınız zararsız değerlerin kodunu çözün ve çıkan sonucu çalıştırmayın.

Gerçek Eğitim ve Savunma Örnekleri

1. Grup Projesinde Okunurluğu Geri Kazanmak

Bir öğrenci ekibi, eski bir derleme sürecinden geriye yalnızca dönüştürülmüş bir JavaScript dosyası kaldığını görür. Özgün kaynağın yedeği alınmamıştır.

Ekip bir kopyayı güzelleştirip karışıklığını giderir, sonra başlıca işlevleri ve sayfa seçicilerini saptar. Anlamlı adlar, doğrulanmış davranışa dayanarak yavaş yavaş eklenir.

Yeniden kurulan dosya geçici bir bakım kaynağı olur, ama ekip bunun birebir özgün hâli olmadığını not eder.

2. Bilişim Dersinde Karıştırmayı İncelemek

Bir öğretmen iki sayıyı toplayan zararsız bir betik verir. Sürümlerden biri okunur, diğeri ise yeniden adlandırılmış değişkenler ve kodlanmış diziler kullanır.

Öğrenciler dosyaları karşılaştırır, karışıklık giderme araçlarını kullanır ve hangi bilginin geri gelebildiğini, hangisinin gelemediğini açıklar.

Ders; yazılımın şeffaflığına, bakımına, fikrî mülkiyete ve güvenliğin sınırlarına odaklanır.

3. Üçüncü Taraf Bir Bileşeni İncelemek

Bir okul sitesinin yöneticisi, kurmadan önce küçük bir üçüncü taraf bileşeni değerlendirme izni alır.

Betik; dışarıya giden istekler, çerez erişimi, form alanı toplama ve DOM değişiklikleri açısından incelenir. Resmî belgeler ve gizlilik koşulları, kodda görülenlerle karşılaştırılır.

Açıklanamayan davranış, bileşen göze hoş göründü diye geçiştirilmez; sağlayıcıya bildirilir.

4. Beklenmedik Yönlendirmeleri Araştırmak

Yeni başlayan bir geliştirici, bir deneme sayfasının tanımadığı bir betiği yükledikten sonra başka yere yönlendiğini fark eder.

Betik sayfadan çıkarılır, kanıt olarak saklanır ve çalıştırılmadan incelenir. Karışıklık giderme, bir hedef adresi ve yönlendirmeyi tetikleyen koşulu açığa çıkarmaya yardım eder.

Kaynağı ve amacı doğrulanmadan kod yayındaki sayfaya geri konmaz.

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

İzinli bir betikte, arayüz etiketleri ve API yollarını taşıyan bir dizi tablosu vardır. Değerlerin nerede kullanıldığını eşleştirmek zordur.

Geliştirici, dizi konumlarıyla çözülmüş değerler arasında bir eşleme kurar, sonra bir çalışma kopyasındaki başvuruları yeniden adlandırır.

Base64'e benzeyen bir örnek, yalnızca değerin zararsız veri olduğu biliniyorsa Base64 Kod Çözme Aracı ile ele alınır.

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

Bir öğretmen, eski bir öğrencisinin yaptığı tarayıcı oyununu kullanmak ister. Oyunun JavaScript'i bilerek okunmaz hâle getirilmiştir.

Kod; ağ bağlantıları, veri toplama, reklamlar, dış betikler ve güvensiz HTML eklemesi açısından gözden geçirilir. Oyun yalnızca onaylı, yalıtılmış bir ortamda denenir.

Davranışı güvenle açıklanamıyorsa öğretmen başka bir kaynağa yönelir.

7. Bozuk Bir Yayın Paketini Teşhis Etmek

Bir öğrenci küçültülmüş ve karıştırılmış bir uygulama yayımlar, ama bir düğme yalnızca yayın sürümünde çalışmaz.

Önce kaynak kod, derleme ayarları ve kaynak haritaları denetlenir. Etkilenen paketin karışıklığı giderilmiş bir kopyası, yayın dönüşümünün davranışı nerede değiştirdiğini bulmaya yardım eder.

Onarım, üretilen paketin içinde değil, okunur kaynakta ve derleme sürecinde yapılır.

8. Savunma Amaçlı İlk Değerlendirme Yapmak

Bir yönetici, deneme sitesine eklenmiş tanımadığı bir betik bulur. Dosya yalıtılır ve nereden geldiği kayda geçer.

Çalıştırmadan yapılan çözümleme; şüpheli hedefleri, kimlik bilgisi toplamayı, enjekte edilmiş betikleri ve kalıcılık düzeneklerini arar. Örnek, sıradan bir okul bilgisayarında çalıştırılmaz.

Sonraki inceleme, kurumun olay müdahale sürecine göre deneyimli güvenlik ekibince yürütülür.

İncelenmeye Değer Kalıplar

Kalıp Neden dikkat ister Olası meşru kullanımı
eval() Bir diziden gelen kodu çalıştırır Eski araçlar ya da denetimli geliştirme örnekleri
Çalışma anında betik oluşturma Ek kod yükleyebilir Onaylı bileşen ya da modül yükleme
Kodlanmış dizi tabloları Adresleri ve iletileri gizleyebilir Karıştırma ya da derli toplu üretilmiş dosyalar
Çerez ya da depolama erişimi Kullanıcı veya oturum verisini okuyabilir Tercihler ve oturum açılmış uygulama durumu
Form değeri toplama Gönderilen bilgileri yakalayabilir Beklenen form işleme
Beklenmedik dış istekler Veriyi başka yere taşıyabilir Belgelenmiş API'ler, analitik ya da medya hizmetleri
Yinelenen yönlendirmeler Kullanıcıyı başka bir siteye götürebilir Onaylı oturum açma ya da ödeme akışı
Pano erişimi Kopyalanan içeriği okuyabilir ya da değiştirebilir Kullanıcının istediği kopyala-yapıştır özellikleri

Bağlam önemlidir. Bir kalıp araştırılmalıdır; kendiliğinden kötü niyetli sayılmamalıdır.

İnceleme Sırasında Değişkenleri Yeniden Adlandırmak

Karıştırılmış kodda a, b ve _0x4fa2 gibi adlar bulunabilir. Değişkenleri, görevlerine ilişkin kanıt toplamadan yeniden adlandırmayın.

Örneğin:

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

Bir çalışma kopyasında şöyle olabilir:

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

Adlar doğrulanmış davranışı anlatmalıdır. Kanıt gerçekten o sonuca götürmüyorsa stolenPassword gibi adlardan kaçının.

İnceleme Kopyası İçin Açıklamalar

Gözlemi çıkarımdan ayıran açıklamalar yazın:

// Gözlem: e-posta alanının değerini okur.
// Çıkarım: form gönderiminde kullanılıyor olabilir.
// emailValue nereye gidiyor, amacına karar vermeden önce doğrula.

Bu üslup belirsizliği görünür kılar ve varsayımların sonradan olgu diye tekrarlanmasını önler.

Bu Hangi Sorunları Çözer

  • İzinli bir JavaScript dosyası biçimlendirmeden sonra da anlaşılmaz kalır.
  • Bir grup projesinden geriye yalnızca dönüştürülmüş bir yayın paketi kalmıştır.
  • Bir derste okunur kodla karıştırılmış kod karşılaştırılacaktır.
  • Üçüncü taraf bir bileşen savunma amaçlı incelenmelidir.
  • Bir deneme sayfasında açıklanamayan bir yönlendirme vardır.
  • Kodlanmış dizi tabloları yapılandırma değerlerini gizler.
  • Yalnızca yayın sürümünde çıkan bir hata derleme süreciyle ilgili olabilir.
  • Tanınmayan bir betik, çalıştırmadan yapılan bir ilk değerlendirme ister.

Karışıklık Giderirken Yapılan Yaygın Hatalar

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

Tanımadığınız kod sayfayı değiştirebilir, dış hizmetlerle bağlantı kurabilir, bilgi toplayabilir ya da içerik indirebilir. İşe çalıştırmadan incelemeyle başlayın.

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

Daha okunur bir betik, özgün hâlinin yaptığı güvensiz işleri aynen yapabilir.

Birebir Özgün Kaynağı Beklemek

Silinmiş açıklamaları, adları, modülleri ve türleri geri getirmek olanaksız olabilir.

Gizli Kodu Çevrim İçi Bir Araca Göndermek

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

İzinsiz Kod İncelemek

Kodun okunabilir olması yasal, sözleşmesel ve etik kısıtları ortadan kaldırmaz. Yalnızca izinli materyali inceleyin.

Çok Erken Ad Değiştirmek

Yanlış bir ad, incelemenin geri kalanını yanıltabilir. Anlam yüklemeden önce veri akışını izleyin.

Üretilen Paketi Düzenlemek

Yapılan değişiklikler bir sonraki derlemede kaybolabilir. Elinizde varsa okunur kaynağı ve derleme ayarlarını düzeltin.

Kaynak Haritalarını Görmezden Gelmek

Kaynak haritaları yayın kodunu özgün dosyalara bağlayabilir. Elle yeniden kurmaya girişmeden önce onaylı harita var mı bakın.

Güvenlik ve Gizlilik

JavaScript içinde adresler, API tanımlayıcıları, erişim anahtarları, iç açıklamalar, deneme hesapları ve kullanıcı verileri bulunabilir. Karışıklık giderme, okunması zor olan ama aslında hiçbir zaman gerçekten gizli olmayan değerleri açığa çıkarabilir.

Yayındaki kimlik bilgilerini, okula ait özel kodu, öğrenci kayıtlarını ya da üçüncü tarafa ait gizli betikleri çevrim içi bir hizmete yapıştırmayın.

Zararlı olabilecek bir kod bulunursa:

  • Onu yayındaki sayfadan ayırın.
  • Özgün hâlini güvenli biçimde saklayın.
  • Nerede ve ne zaman bulunduğunu kaydedin.
  • Sıradan bir cihazda çalıştırmayın.
  • Sorumlu yöneticiye haber verin.
  • Kurumun olay müdahale sürecini izleyin.

Sık Sorulan Sorular

JavaScript karışıklık giderici ne yapar?

Yapıyı açığa çıkararak ve desteklediği karıştırma kalıplarını sadeleştirerek, dönüştürülmüş JavaScript'i daha incelenebilir kılmaya çalışır.

Birebir özgün kodu geri getirebilir mi?

Hayır. Özgün adlar, açıklamalar, modüller, türler ve kaynağın düzeni kalıcı olarak silinmiş olabilir.

Karışıklığı giderilmiş JavaScript'i çalıştırmak güvenli mi?

Hayır. Okunur çıktı, özgün hâlin yaptığı her şeyi yapabilir. Denetimli bir çalıştırmadan önce bile onu inceleyin.

Güzelleştirme ile karışıklık giderme arasındaki fark nedir?

Güzelleştirme yalnızca biçim ekler. Karışıklık giderme ise dönüştürülmüş adların, dizilerin ve denetim akışının ardına gizlenmiş anlamı açığa çıkarmaya çalışır.

Öğrenciler bu aracı kullanabilir mi?

Evet; sınıftaki zararsız örneklerle ya da izinli kendi projeleriyle. Tanınmayan betikler öğretmen ya da güvenlik uzmanı eşliğinde ele alınmalıdır.

Gizlenmiş her dizinin kodunu çözebilir mi?

Hayır. Diziler çalışma anında üretilmiş, şifrelenmiş, sıkıştırılmış ya da elde olmayan veriye bağlı olabilir.

Üçüncü tarafa ait kodun karışıklığını gidermeli miyim?

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

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

Hayır. Şöyle bir bakıp geçenleri yavaşlatabilir, ama tarayıcının kodu alması zorunludur ve kararlı bir inceleyici onu çözümleyebilir. Sırların yeri korunan sunucu sistemleridir.

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

Kullanımdan kaldırın, kanıtı saklayın, sıradan biçimde çalıştırmayın ve sorumlu yöneticiye ya da güvenlik uzmanına haber verin.

Son İnceleme Listesi

  • Kodu inceleme izni doğrulandı.
  • Özgün dosya saklandı.
  • Tanınmayan kod gelişigüzel çalıştırılmadı.
  • Önce güzelleştirilmiş bir kopya gözden geçirildi.
  • Karışıklığı giderilmiş sonuç ayrı tutuldu.
  • Başlangıç noktaları, girdiler, çıktılar ve yan etkiler belirlendi.
  • Ağ hedefleri kaydedildi.
  • Çalışma anında kod çalıştırma ayrıca incelendi.
  • Gözlemler varsayımlardan ayrıldı.
  • Hiçbir gizli kod ya da öğrenci verisi yüklenmedi.
  • Zararlı olabilecek örnekler güvenli biçimde üst makama iletildi.

İlgili Araçlar

Asıl sorun kodun sıkıştırılmış biçimiyse JavaScript Güzelleştirici'yi kullanın. Javascript Küçültücü'yü ise yalnızca okunur kaynağın denenmiş bir yayın kopyası için kullanın.

İlgili sayfa yapısını ve stilleri incelemek için HTML Güzelleştirici ile CSS Güzelleştirici'yi kullanın.

Zararsız bir dizinin Base64 olduğu doğrulandığında Base64 Kod Çözme Aracı'nı kullanın ve sonucu güvenilmeyen veri gibi inceleyin.

Son Söz

JavaScript karışıklık giderici; izinli bakım, sınıf içi inceleme, hata ayıklama, üçüncü taraf denetimi ve savunma amaçlı araştırmaya destek olur. Zor bir kodu daha yaklaşılabilir kılabilir, ama silinmiş olan her şeyi yeniden yaratamaz.

İşe izinle ve çalıştırmadan incelemeyle başlayın. Özgün dosyayı saklayın, kopyaları biçimlendirip karışıklığını giderin, kanıtları kaydedin ve tanımadığınız betikleri sıradan bir cihazda çalıştırmayın.

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

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