Soru:
İyi bir Java kod çözücü ve gizleme çözücü nedir?
user56
2013-03-29 20:44:07 UTC
view on stackexchange narkive permalink

Java JAR dosyalarını yeniden derlemek için JD-GUI kullanıyorum, ancak sorun şu ki, kendi kendime düzeltmem ve programın hala devam edip etmediğini kontrol etmem gereken yinelenen değişkenler gibi birçok hata bırakıyor çalışıyor (hataları doğru bir şekilde düzeltirsem).

Fernflower'ı da denedim, ancak eğer bir bağımlılık yoksa bu sınıfları boş bırakıyor.

Hangi kod çözücüyü bilmek istiyorum:

  • en az hata miktarını verir
  • en çok gizlemeyi kaldırır.
Merak ediyorum, bir deobfuscator'un hangi özellikleri sunmasını bekliyorsunuz? Değişkenleri manuel olarak yeniden adlandırmanın dışında, bazı kodların gizlemesini kaldırmanın bir yolunu görmüyorum.
Yedi yanıtlar:
#1
+33
Mike Strobel
2013-05-30 19:26:11 UTC
view on stackexchange narkive permalink

Geç yanıt verdiğim için özür dilerim.
Yeni, açık kaynaklı bir Java decompiler üzerinde çalışıyorum. Kontrol etmekten çekinmeyin.
Herhangi bir karmaşık koda karşı test etmedim, ancak JD-GUI'nin işleyemediği birçok yöntemi çözdüğünü gördüm. Bunun devam eden bir çalışma olduğunu unutmayın ve derlemesini çözemeyecek çok sayıda kod bulacağınızdan eminim.

İlk olarak, onun derleyicisini diğer cevaplarda gördüğünüz Procyon. İkincisi, genellikle "Bunu yapan kütüphaneme bak!" cevaplar, bu burada bir hata olur. Strobel'in yukarıda bağlantı verdiği [benioku] (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), yakından okunmaya değer. Kendi başına * harika * bir cevap olurdu, ama kuşkusuz muhtemelen SE için biraz fazla uzun.
+10000 Bu gerçekten harika bir çalışma ve JD-GUI sadece yarısını aldıktan sonra saatler harcadığım bir sınıfı yeniden derledi.
+1 yorumlarından kişisel olarak nefret etsem de, orada bana dar bir noktada yardımcı olan iyi bir projeniz olduğunu söylemeliyim. Aynen böyle devam!
@Signus Teşekkürler, çalışmalarımın size yararlı olduğunu kanıtladığına sevindim :).
#2
+14
Alexandre Dumont
2016-08-26 02:49:18 UTC
view on stackexchange narkive permalink

Eski ve Eksik Girişler

JAD Bir süre önce, herkesin tercih ettiği derleyiciydi. Şu anda proje ölmüştür (ayrıca açık kaynak değildir), ancak yine de birçok insanın projeden bahsettiğini görüyorsunuz.

Java DeObfuscator Ayrıca daha eski bir araç fileoffset.com adresinden, ancak yine de az ya da çok çalışıyor. Arayüz, daha büyük projelerde kullanmak için oldukça hantal, ancak araç açık kaynaktır.

JODE JODE, bir kod çözücü ve Java için bir iyileştirici içeren java paketi. Bu paket, GNU GPL altında ücretsiz olarak mevcuttur. Uzun süredir güncellenmedi.

AndroChef Android programlarını ve Java dosyalarını yeniden derlemek için tescilli araç, buradan ulaşılabilir. DJ Decompiler gibi alternatiflere verilen paraya değmez.

Candle Brad Davis'ten bir açık kaynak kod çözücü. Eksiksizlik adına söz ediyorum, ancak tam özellik olmaktan çok uzak.


Modern Araçlar

JD-Gui Muhtemelen Java kod çözme için en yaygın kullanılan araçlardan biridir, çünkü kullanımı kolaydır ve bir sınıf dosyasını veya JAR'ı hızlı bir şekilde açıp incelemeye izin veren bir grafik kullanıcı arayüzü sağlar. Burada bulabilirsiniz.

FernFlower Çok yeni ve gelecek vaat eden analitik Java kod çözücüsü (IntelliJ 14'ün ayrılmaz bir parçası haline geliyor).

Bu bir komut satırı aracıdır. Bu, Unicode parametrelerini tam adlarıyla gösterebilir.

Buradan indirin. Bu bir komut satırı aracıdır. Bu, Unicode parametrelerini tam adlarıyla gösterebilir.
Ayrıca varsayılan olarak IntelliJ'e zaten entegre edilmiş olduğunu unutmayın.

CFR

Ücretsiz ve açık kaynak. Bu, Java 12 anahtar ifadeleri, Java 8 lambdas (Java beta 103 değişiklikleri öncesi ve sonrası), Java 7 Dize anahtarları vb. Dahil olmak üzere modern Java özelliklerini yeniden derlemeyi amaçlamaktadır, ancak kendisi Java 6'da yazılmıştır.

Ayrıca bir komut satırı aracı. Bu daha da iyi bir iş çıkarır ve biraz daha hızlıdır.

Procyon

Açık kaynak ve aynı zamanda Java 8 özellikleri (lambdas, :: operator). Çalışmak için Java 7 gerekiyor.

Krakatau Krakatau Python'da yazıldığı için ilginç. Şu anda üç araç içerir: Java sınıf dosyaları için bir derleyici ve çözücü ve sınıf dosyaları oluşturmak için bir derleyici.

Henüz Java 8 özelliklerini desteklemiyor.

Soot

Soot, orijinal olarak McGill Üniversitesi Sable Research Group tarafından geliştirilen, Java ve Android uygulamalarını analiz etmek ve dönüştürmek için bir çerçevedir. Bir ara bayt kodu dilini de tanımladığından derleyici olarak "sadece" çok yaygın olarak kullanılmaz.

Recaf

Bir Java Bytecode editörü ve tersi kullanımı sezgisel olmayı amaçlayan mühendislik aracı. Standart kod çözücülerde çözülemeyen sınıf öğelerinin görüntülenmesine izin vermek için bayt kodunu birden çok kod çözücü (CFR, FernFlower, Procyon) aracılığıyla veya bir tablo düzeninde sunabilir. Recaf, sınıflar, yöntemler ve alanlarla etkileşim kurmak için bağlama duyarlı menüler kullanır ve kullanıcıların kullanım durumlarını aramasına, öğeleri yeniden adlandırmasına ve tanımları demonte bir biçimde düzenlemesine olanak tanır.

Kavanozları, savaşları, sınıfları, ve çalışan Java işlemlerinden sınıfları çıkarmak.

Tamamen Java ile yazılmıştır ve tamamen açık kaynaktır.

Konloch's Bytecode Viewer

Advanced Lightweight Java Bytecode Viewer, GUI Java Decompiler, GUI Bytecode Editor, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger ve daha fazlası.

Tamamen Java ile yazılmıştır ve açık kaynak.

Derleme için FernFlower, Procyon ve CFR kullanır ve bunu, son teknoloji dekompresörleri kullanan harika bir görsel araç yapar:

Enigma

Gizleme kaldırma için özel olarak tasarlanmış bir araç:

Başlangıçta Minecraft sürümlerinin gizliliğini kaldırmak için kullanılır. Procyon'u dahili olarak kullanır.

Daha güncel bir çatal burada bulunabilir

dekompilatörler ve kod çözücüler için çok fazla çaba harcandığını belirtmek eğlenceli. Java için de-obfuscators for Java, Java'da uygulanan en popüler oyunlardan biri olan Minecraft çevresindeki modlama sahnesinin bir sonucudur.

Kaynak: http://blog.macuyiko.com /post/2015/a-quick-look-at-java-decompilers.html

Bu cevabın güncellenmesi gerekebilir. JD-Gui'nin Mart 2019 itibariyle aktif olarak geliştirildiği anlaşılıyor. Https://java-decompiler.github.io/
Bazı yönlerini yazmaya çalıştığım bazı java 7 kodum var. Yerleşik intellij decompiler bazı durumlarda yanlış değişken adlarına sahiptir ve kod bloklarını dışarıda bırakabilir. JD-Gui bu blokları gösterir ve aynı zamanda daha doğru görünen değişken adlarını gösterir. Ayrıca, JD-Gui'nin eski bir sürümü ile yeni sürümü arasındaki farkları yan yana gösterir. Bazı ciddi geri dönüşler yapıyorsanız, bakmaya değer.
#3
+10
amccormack
2013-03-29 23:20:27 UTC
view on stackexchange narkive permalink

Bunlardan hangisinin en iyisi olduğu konusunda konuşamıyorum, ancak bu SO sorusu tarafından belirtildiği gibi dışarıda birkaç java çözücü var. Bu kod çözücülerin hiçbiri, gizlemeyi aktif bir şekilde çözmeye çalışmıyor gibi görünüyor ve bu projelerin çoğu terk edildi.

Krakatau 'yu denemedim, ancak size yardımcı olabilecek gibi görünüyor

  • Readme'den: "Krakatau decompiler, Java kod çözücülerin çoğuna farklı bir yaklaşım getiriyor. Daha çok, giriş dili Java bayt kodu olan ve hedef dili olan bir derleyici olarak düşünülebilir. Krakatau isteğe bağlı bayt kodunu alır ve onu eşdeğer Java koduna dönüştürmeye çalışır. Bu, onu küçük çapta gizlemeye karşı sağlam kılar, ancak "orijinal" kaynağı yeniden yapılandırmama dezavantajı vardır ve bu da bir modelden daha az okunabilir çıktı sağlar eşleştirme çözücü, gizlenmemiş Java sınıfları için üretecektir. "
  • Bu açık kaynak kodludur ve aktif olarak (bu yazı itibariyle) korunuyor gibi görünüyor.
Bu aslında demonte edicinin çıktısıdır. Derleyici, Java çıktısına dönüştürür. (Not: Ben geliştiriciyim)
JD-GUI şu anda en iyi Java Kod Çözücülerden biridir, ancak kodu çözmeden önce Bytecode üzerindeki gizleme çözücülerle birlikte kullanılmalıdır. Bildiğim java için en iyi gizleme engelleyicileri http://www.rune-server.org veya http://www.moparscape.org/smf veya http://www.moparisthebest.org/smf korsanlardan geliyor Tamamen Java ile yazılmış ve oldukça karmaşık olan Runescape Game için topluluklar.
#4
+4
Konloch
2014-11-19 17:45:58 UTC
view on stackexchange narkive permalink

Bytecode Viewer'a bir göz atmayı deneyin https://github.com/Konloch/bytecode-viewer 5 farklı kod çözücü kullanarak derlemeyi çözme seçeneğine sahiptir:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI
#5
+3
Vladimir Protasov
2014-03-04 02:10:49 UTC
view on stackexchange narkive permalink

Öncelikle, burada eksik sınıflarla birlikte Fernflower sorunu için bir düzeltme var. Bunun için agaricusb'a teşekkür edebilirsiniz.

Fernflower, son birkaç yıldır bakımı yapılmamış olsa bile şimdilik en iyi Java kod çözücüsü olmaya devam ediyor. Son zamanlarda yazara ulaşmaya çalıştım, ancak hala şansım yok.

AndroChef Java Decompiler'a gelince, yazarın izniyle motor olarak Fernflower kullanıyor. Yamalı / değiştirilmiş sürüm mü yoksa sadece bir GUI mi kullandığından hala emin değilim.

@ mike-strobel tarafından geliştirilen Procyon decompiler iyi görünüyor, ancak Fernflower yine de BÜYÜK bir avantaja sahip ve yaklaşık 95 Başvurumun% 'si (~ 3000 sınıf), procyon yalnızca% 60'ını işleyebildi (Ocak 2014'te kontrol edildi).

Uygulamanız "yerel" Java mı yoksa Android formatından mı dönüştürüldü? İlki olsaydı, Procyon'un Fernflower'a kıyasla nerede bozulduğunu görmek için ikili dosyalarınızı elime almakla çok ilgilenirdim.
@MikeStrobel "Yerel" Java uygulamasıdır. Yalnızca dahili kullanım içindir, bu yüzden yine de paylaşamam.
Bana ne tür sorunlarla karşılaştığınızı açıklayan bir e-posta atma şansınız var mı? Procyon'un nasıl geliştirilebileceğini her zaman duymak isterim. İletişim bilgilerim projenin BitBucket sitesinde.
@MikeStrobel ilginiz için teşekkürler.Size geniş bilgi ve örnek sınıflar sunmaya çalışacağım, ancak söz vermeyeceğim.
#6
+3
David Kennedy
2018-06-29 20:24:15 UTC
view on stackexchange narkive permalink

https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine kullanıyorum. IntelliJ'den ayrıştırıcı, JD'nin -GUI başarısız.

İndirmek için resmi olmayan bir ayna: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

#7
+1
Atanas
2013-10-27 16:15:14 UTC
view on stackexchange narkive permalink

Size AndroChef Java Decompiler 'ı tavsiye etmek isterim AndroChef Java Decompiler, karmaşık hale getirilmiş Java 6 ve Java 7 .class ve .jar dosyalarını başarıyla derlemesini gerçekleştirir.

ANDROCHEF İLE DİKKAT EDİN! AndroChef sadece terk edilmiş eğrelti otu çözücüsü için bir paketleyicidir, bununla paranızı boşa harcamayın!


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...