Java sınıfı dosyalarını nasıl "koda yaparım"? [kapalı]


556

Bir sınıf dosyasını koda dönüştürmek için hangi programı kullanabilirim? Aslında Java kodu alacak mıyım yoksa sadece JVM montaj kodu mu?

Bu sitedeki Java performans sorularında, derleyicinin belirli şeyleri nasıl optimize ettiğini görmek için Java sınıfı dosyasını "kodunu çözen" kişilerin yanıtlarını sık sık görüyorum.


4
"Ayrıştırma" sanatı tersine mühendislik olarak da düşünülebilir. Bazen bir şeyi tersine mühendislik yaparken her zaman ikili dosyalara erişemezsiniz.
Makach

Java kaynağına ve bayt koduna ayrılabilen bytecodeviewer.com'dan hiç kimse (java kaynağı için JAD tabanlı).
Fernando Gonzalez Sanchez

Yanıtlar:


588

Şubat 2016 Güncellemesi:

www.javadecompilers.com JAD'ı şu şekilde listeler:

En popüler Java decompiler, ancak sadece bu yaşta. C ++ ile yazılmış, çok hızlı.
Eski, desteklenmiyor ve Java 5 ve sonraki sürümlerini doğru şekilde çözümlemiyor

Böylece, kilometreniz son jdk'ye göre değişebilir (7, 8).

Aynı site diğer araçları listeler.

Tarafından belirtildiği gibi Ve javadecompiler, Salvador Valencia içinde yorumlarla (2017 Eylül), teklifler Yüklenen SaaS .classbulut dosya ve size decompiled kodu döndürür.


Orijinal cevap: Ekim 2008

  • J2SE 5.0'ın (Java SE 5) temel özelliklerini tanımlayan JSR 176'nın son sürümü 30 Eylül 2004'te yayınlandı.
  • Bay Pavel Kouznetsov'un yazdığı ünlü Java dekomperi olan JAD tarafından desteklenen en son Java sürümü JDK 1.3'tür .
  • Bugün İnternet'ten indirilebilen “DJ Java Decompiler” veya “Cavaj Java Decompiler” gibi Java ayrıştırıcılarının çoğu JAD tarafından desteklenmektedir: Java 5 kaynaklarını görüntüleyemezler.

Java Decompiler (Yine başka bir Hızlı Java decompiler) şunları içerir:

  • Java 5+ “.class” dosyalarını ayrıştırmak ve analiz etmek için açık destek .
  • Güzel bir GUI:

ekran görüntüsü

JDK 1.1.8'den JDK 1.7.0'a kadar derleyiciler ve diğerleri ( Jikes , JRockit , vb.) İle çalışır .

Aslında tamamen işlevsel bir çevrimiçi canlı demo sürümü sunuyor ! Sadece bir jar dosyasını sayfaya bırakabilir ve hiçbir şey yüklemeden decompiled kaynak kodunu görebilirsiniz.


5
+1 Modülerize edilmiş olduğundan da bahsetmek gerekir, böylece çekirdek (C ++ 'da uygulanır) başka bir yerde kullanılabilir.
Quinn Taylor

1
jd-gui-0.3.3 burada
amaidment

1
Eclipse java decompiler eklentisini Eclipse Juno üzerine yüklediyse ve Eclipse tüm süreci öldürmek için Marketplace DND Initialization zorlamaya asıldı: jd. *. Jar'ü Eclipse eklentileri dizininden kaldırmak benim için düzeltti.
LSerni

4
@ IP'nizi herhangi bir dilde veya platformda koruduğunuz şekilde rishi - iyi avukatlar. DRM sadece bir bandaid.
Antimon

1
Artık .class dosyasını buluta yüklediğiniz SaaS'ı sunuyor ve size decompiled kodu döndürüyor. Basit bir POJO için çalıştı.
Salvador Valencia

101

Dışarıda birkaç dekomperatör var ... Hızlı bir arama sonucu:

  1. Procyon : açık kaynaklı (Apache 2) ve aktif olarak geliştirildi
  2. Krakatau : açık kaynak (GPLv3) ve aktif olarak geliştirildi
  3. CFR : açık kaynaklı (MIT) ve aktif olarak geliştirildi
  4. JAD
  5. DJ Java Çözücü
  6. koyun derisi

Ve daha fazlası.

Bunlar Java kodu üretir. Java, JVM bayt kodunu ( javap ) görmenizi sağlayan bir şeyle birlikte gelir .


2
Ayrıca şunu ekleyebilir miyim, Procyon, CFR, JAD ve DJ bir web hizmeti olarak kullanılabilir: javadecompilers.com
Andrew Rukin

javadecompilers.com - cankurtaran kardeşim!
MarcoZen

kpdus.com/jad.html bazı AD bağlantısı
marcinj

Teşekkürler @marcinj, indirmek için bağlantıları olan başka bir bağlantı buldum.
billjamesdev

51

Java kaynak kodunu görmek için bazı kod çözücülere bakın. Jad için arama yap .

Bayt kodlarını görmek istiyorsanız, sadece JDK ile gelen javap'ı kullanın .


5
Aktif olarak geliştirildikleri için açık kaynak kodlu dekoderlerden birini öneriyorum. Kullanım Procyon , CFR decompiler veya Krakatau yerine (Python).
Janus Troelsen

29

Birkaçını denedim ve Procyon benim için en iyisi gibi görünüyordu. Aktif geliştirme aşamasındadır ve Java'nın en son sürümlerinin birçok özelliğini destekler.

Bunlar denedim diğerleri:

  • CFR
    • Umut verici, ancak çoğu zaman başarısız yöntem ayrışması. Bunu gözümde tutacağım. Ayrıca en son Java özellikleri için destek ile aktif olarak geliştirilmiştir.
  • Krakatau
    • Gizlenmiş kod için daha iyi hale getirme potansiyeline sahip orijinal kaynağı yeniden oluşturmaya çalışmak yerine eşdeğer Java kodu çıkarmaya çalıştığı için farklı bir yaklaşım gerektirir. Testlerimden itibaren Procyon ile kabaca eşitti, ama yine de farklı bir şey olması güzel. -skipKomut satırı bayrağını kullanmak zorunda kaldım, bu yüzden hatalarda durmazdı. Aktif olarak geliştirildi ve ilginç bir şekilde Python'da yazıldı.
  • JD-GUI
  • JAD
    • Çalıştı, ancak yalnızca Java 1.4 ve önceki sürümleri destekliyor. Eclipse eklentisi olarak da mevcuttur . Artık geliştirme aşamasında değil.

1
Bu IGNORE_EXCEPTIONSşeyin artık komut satırı bayrağına değiştirildiğini unutmayın -skip.
Antimon



13

Kurum , daha yeni Java kodu için bir seçenektir. En azından hâlâ yakın zamanda korunma avantajına sahip ...

Ayrıca, Java Decompiler , hem bağımsız bir GUI hem de Eclipse entegrasyonuna sahip bir decompilerdir.

Son olarak, diğer seçenekler kadar parlak olmasa da , Jdec'ten bahsedilmedi.


Somut bir sınıf dosyasını Soot ile nasıl kodabileceğinizi biliyor musunuz? Mümkün olduğundan emin değilim ...
Janus Troelsen

12

JD-GUI gerçekten çok iyi. Bir JAR dosyasını açıp IDE üzerinde çalışıyormuş gibi koda göz atabilirsiniz. İyi şeyler.


11

İşte Şubat 2015 itibarıyla dekompreslerin bir listesi:

Procyon , açık kaynak, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR , ücretsiz, kaynak kodu yok, http://www.benf.org/other/cfr/

JD , yalnızca ticari olmayan kullanım için ücretsiz, http://jd.benow.ca/

Fernflower , açık kaynaklı, https://github.com/fesh0r/fernflower ,

JAD - burada sadece tarihsel nedenlerden dolayı verilmiştir. Ücretsiz, kaynak kodu yok, http://varaneckas.com/jad/ Eski, desteklenmiyor ve Java 5 ve sonraki sürümlerini doğru şekilde çözümlemiyor.

Yukarıda bahsedilen dekomperi testlerini çevrimiçi olarak test edebilir, kurulum gerektirmez ve kendi eğitimli seçiminizi yapabilirsiniz.

Buluttaki Java ayrıştırıcıları: http://www.javadecompilers.com/


1
Procyon en iyi çalışır !!!!
MarcoZen

10

Kullanabileceğiniz birkaç program var. Gerçek Java kodunu alırsınız, ancak bazen kodlar gizlenmiş olabilir, böylece yöntemler bir harf veya sayı veya rastgele bir harf ve sayı karışımı ile adlandırılır.

DJ Decompiler Mocha


9

Java için çoğu decompiler JAD tabanlıdır . Harika bir araçtır, ancak ne yazık ki bir süredir güncellenmemiştir ve Java 1.5+ sınıflarını çok iyi işlemez. 1.5+ sınıfı düzgün bir şekilde işleyecek hiçbir araç görmedim.


3
buyrun: Sadece cevabınıza bir cevap gönderdim;) JDK1.5 ve daha fazlası destekleniyor!
VonC

"1.5+ sınıfını düzgün bir şekilde işleyecek bir araç görmedim" - Procion, Fernflower, JDCore ve CFR (bu Java 8 ile
başa çıkıyor


6

Şimdiye kadar listelenen tüm JAD bağlantıları kırık gibi görünüyor, bu yüzden bu siteyi buldum. Harika çalışıyor (en azından Linux için)! Ubuntu 11.10'da herhangi bir nedenle statik olanı indirmek zorunda kaldım.

http://www.varaneckas.com/jad


5
  • JAD çalışan ve basit olanıdır.

  • Ayrıca, sadece yöntemleri görmek istiyorsanız, javap kullanın.


5

Java derleyicisinin belirli şeyleri nasıl yaptığını görmek istiyorsanız, ayrıştırmayı istemezsiniz, sökme işlemini istersiniz. Ayrıştırma, bayt kodunu Java kaynağına dönüştürmeyi içerir, bu da çok sayıda düşük düzey bilginin kaybolduğunu ve derleyici optimizasyonunu merak ediyorsanız, muhtemelen ilgilendiğiniz bilgidir.

Her neyse, açık kaynaklı bir Java sökücü yazdım . Javap'tan farklı olarak, bu son derece patolojik sınıflarda bile çalışır, böylece sınıflarınıza da gizleme araçlarının ne yaptığını görebilirsiniz. Ben de tavsiye etmem olsa da, dekompilasyon yapabilir.


4

JAD benim için çalışmıyor (Ubuntu 11.10 sorunu), bu yüzden ileriye taşındım ve JODO'da sopped oldum . En azından Açık Java kaynak koduna sahip ve .class'ımı düzgün bir şekilde çözebiliyordu .

Önce 'şubeler / genel' şubeye göz atmanızı tavsiye ederim . Sandıklar sabit değil.


1
CFR ve Procyon aktif olarak geliştirilirken JDK 8 desteğine sahipken JODO düzensiz olarak korunur .
Janus Troelsen

4

IntelliJ IDEA platformunda Java Decompiler IntelliJ Eklentisini kullanabilirsiniz . Hata ayıklama işleminiz sırasında, hepsine sahip olmasanız bile, tüm Java kaynaklarını görüntülemenizi sağlar. Ünlü JD-GUI araçlarına dayanmaktadır .

resim açıklamasını buraya girin


@ NoOP's Bir robot musunuz? Ya da sadece bir inceleme konusuna dikkat etmiyor musunuz?
naXa

Bunun için üzgünüm, ilk bakışta sadece bağlantı yanıtı gibi görünüyor. Belki daha fazla ayrıntı eklemelisiniz ve cevabınız sadece soru içeriğine değil soru başlığına uymalıdır.
ashiquzzaman33

Bu soruya bir cevap sağlamaz. Bir yazardan eleştiri veya açıklama istemek için gönderilerinin altına bir yorum bırakın.
Kristijan Iliev

@Chris önerilen çözümü denediniz mi? Soruyu bile okudun mu?
naXa

1
@ NoOP kaba olduğum için özür dilerim = (Dikkat etmeyen yorumcuların sayısı beni çok
etkiledi

1

AndroChef Java Decompiler ile apk, dex, jar ve java sınıf dosyalarını kodabilirsiniz . Çok basit ve kolaydır. AndroChef JD FernFlower tabanlıdır . 10 ücretsiz kullanımda değerlendirebilirsiniz.

AndroChef, jenerikler, numaralandırmalar ve ek açıklamalar gibi Java dili özelliklerini destekler. Bazı çalışmalara göre, AndroChef Java Decompiler, geleneksel Java derleyicileri ile oluşturulan Java uygulamalarının% 98.04'ünü koda edebiliyor - çok yüksek bir kurtarma oranı. Java ve Dalvik bayt kodunu (DEX, APK) okunabilir Java kaynağına dönüştürmenizi sağlayan basit ama güçlü bir araçtır.


1
@Dimitrius, lütfen bir inceleme sırasında cevapları dikkatlice okuyun. Buraya FernFlower veya AndroChef eklemeyi nasıl hayal ediyorsunuz?
naXa

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.