मैं जावा श्रेणी की फ़ाइलों को "अपघटित" कैसे करूँ? [बन्द है]


556

क्लास फाइल को डिकम्पोज करने के लिए मैं किस प्रोग्राम का उपयोग कर सकता हूं? क्या मुझे वास्तव में जावा कोड मिलेगा, या यह सिर्फ जेवीएम विधानसभा कोड है?

इस साइट पर जावा प्रदर्शन के सवालों पर, मैं अक्सर उन लोगों से प्रतिक्रियाएं देखता हूं, जिन्होंने यह देखने के लिए जावा वर्ग फ़ाइल को "विघटित" किया है कि कंपाइलर कुछ चीजों का अनुकूलन कैसे करता है।


4
"विघटित" की कला को रिवर्स इंजीनियरिंग के रूप में भी सोचा जा सकता है। हालांकि कभी-कभी जब रिवर्स इंजीनियरिंग कुछ आप हमेशा बायनेरिज़ तक पहुँच नहीं है।
माकच

किसी ने भी bytecodeviewer.com का उल्लेख नहीं किया है , जो जावा स्रोत के लिए और बायटेकोड (जावा स्रोत के लिए JAD पर आधारित है) तक विघटित हो सकता है।
फर्नांडो गोंजालेज सांचेज

जवाबों:


588

फरवरी 2016 अपडेट करें:

www.javadecompilers.com JAD को सूचीबद्ध करता है:

सबसे लोकप्रिय जावा डिकंपाइलर, लेकिन मुख्य रूप से केवल इस उम्र में। C ++ में लिखा गया है, इसलिए बहुत तेजी से।
आउटडेटेड, असमर्थित और जावा 5 और बाद में सही ढंग से विघटित नहीं होता है

तो आपका माइलेज हालिया jdk (7, 8) के साथ भिन्न हो सकता है।

वही साइट अन्य टूल को सूचीबद्ध करती है।

और javadecompiler, के रूप में द्वारा नोट साल्वाडोर वालेंसिया में टिप्पणियां (सितम्बर 2017), एक सास जहां अपलोड प्रस्तावों .classबादल करने के लिए फ़ाइल और यह आपको decompiled कोड देता है।


मूल उत्तर: अक्टूबर 2008

  • जेएसआर 176 का अंतिम विमोचन, जे 2 एसई 5.0 (जावा एसई 5) की प्रमुख विशेषताओं को परिभाषित करते हुए, 30 सितंबर 2004 को प्रकाशित किया गया है।
  • जेएडी द्वारा समर्थित अंतिम जावा संस्करण, श्री पावेल कौज़नेत्सोव द्वारा लिखा गया प्रसिद्ध जावा डिकंपाइलर, जेकेके 1.3 है
  • इंटरनेट से आज डाउनलोड होने वाले अधिकांश जावा डिकंपाइलर, जैसे कि "डीजे जावा डेकोम्पेलर" या "कैवाज जावा डेकोम्पेलर" JAD द्वारा संचालित होते हैं: वे जावा 5 स्रोतों को प्रदर्शित नहीं कर सकते हैं।

जावा डिकम्पॉइलर (अभी तक एक और फास्ट जावा डिकम्पाइलर) में है:

  • जावा 5+ ".class" फ़ाइलों के विघटन और विश्लेषण के लिए स्पष्ट समर्थन ।
  • एक अच्छा जीयूआई:

स्क्रीनशॉट

यह JDK 1.1.8 से JDK 1.7.0 तक के कंपाइलर, और अन्य ( Jikes , JRockit , आदि) के साथ काम करता है ।

इसमें एक ऑनलाइन लाइव डेमो संस्करण है जो वास्तव में पूरी तरह कार्यात्मक है! आप बस पृष्ठ पर एक जार फ़ाइल ड्रॉप कर सकते हैं और बिना कुछ स्थापित किए डिकम्पोज्ड सोर्स कोड देख सकते हैं।


5
+1 यह ध्यान देने योग्य है कि यह भी संशोधित है, इसलिए कोर (C ++ में कार्यान्वित) को कहीं और लगाया जा सकता है।
क्विन टेलर

1
जद-जीयूआई-0.3.3 भी उपलब्ध यहाँ
amaidment

1
यदि किसी ने ग्रहण जूनो पर एक्लिप्स जावा डिकम्पॉइलर प्लगइन स्थापित किया, और एक्लिप्स ने मार्केटप्लेस डीएनडी इनिशियलाइज़ेशन पर लटकना शुरू कर दिया, तो पूरी प्रक्रिया को मारने के लिए मजबूर किया गया: जेड को हटा देना। *। एक्लिप्स प्लगइन्स से जार बस मेरे लिए तय किया।
LSerni

4
@ ऋषि उसी तरह जिस तरह आप किसी भी भाषा या मंच पर अपने आईपी की रक्षा करते हैं - अच्छे वकील। DRM केवल एक बैंडेड है।
एंटीमनी

1
अब यह SaaS प्रदान करता है जहां आप .class फ़ाइल को क्लाउड पर अपलोड करते हैं और यह आपको डिकम्पोज्ड कोड लौटाता है। एक साधारण POJO के लिए काम किया।
साल्वाडोर वालेंसिया

101

वहाँ कुछ decompilers हैं ... एक त्वरित खोज पैदावार:

  1. प्रोसीओन : ओपन-सोर्स (अपाचे 2) और सक्रिय रूप से विकसित
  2. क्राकटाउ : ओपन-सोर्स (GPLv3) और सक्रिय रूप से विकसित
  3. सीएफआर : ओपन-सोर्स (एमआईटी) और सक्रिय रूप से विकसित
  4. JAD
  5. डीजे जावा Decompiler
  6. कहवा

और बहुत सारे।

ये जावा कोड का उत्पादन करते हैं। जावा कुछ के साथ आता है जो आपको JVM बाइट कोड ( javap ) देखने देता है ।


2
क्या मैं यह भी जोड़ सकता हूं कि प्रोसीयन, सीएफआर, जेएडी
एंड्रयू रूकिन


kpdus.com/jad.html कुछ AD लिंक है
marcinj

धन्यवाद @marcinj, मुझे एक और लिंक मिला जिसमें इसे डाउनलोड करने के लिए लिंक हैं।
बिलजमदेव

51

जावा स्रोत कोड को देखने के लिए कुछ डिकंपाइलर की जाँच करें। जद की तलाश में जाओ ।

यदि आप बाइटकोड्स देखना चाहते हैं, तो बस javap का उपयोग करें जो JDK के साथ आता है।


5
मैं इसके बजाय खुले स्रोत के डिकंपाइलर्स में से एक की सिफारिश करूंगा, क्योंकि वे सक्रिय रूप से विकसित होते हैं। उपयोग प्रोसिओन , सीएफआर decompiler या Krakatau (अजगर) के बजाय।
Janus Troelsen

29

मैंने कई कोशिश की और प्रोसीओन मेरे लिए सबसे अच्छा काम करने लगा। यह सक्रिय विकास के अधीन है और जावा के नवीनतम संस्करणों की कई विशेषताओं का समर्थन करता है।

ये वे अन्य हैं जिनकी मैंने कोशिश की:

  • सीएफआर
    • होनहार, लेकिन अक्सर असफल विधि विघटन। मैं इस पर अपनी नजर बनाए रखूंगा। नवीनतम जावा सुविधाओं के समर्थन के साथ सक्रिय रूप से विकसित किया गया है।
  • Krakatau
    • इसमें एक अलग दृष्टिकोण लेता है कि यह मूल स्रोत को समेटने की कोशिश करने के बजाय समकक्ष जावा कोड को आउटपुट करने की कोशिश करता है, जिससे इसे ओफ़्फ़ुसेटेड कोड के लिए बेहतर बनाने की क्षमता होती है। मेरे परीक्षण से यह मोटे तौर पर प्रोसीओन के बराबर था, लेकिन फिर भी कुछ अलग होने के लिए अच्छा था। मुझे -skipकमांड-लाइन फ़्लैग का उपयोग करना था, इसलिए यह त्रुटियों पर नहीं रुकेगा। सक्रिय रूप से विकसित, और दिलचस्प रूप से यह पायथन में लिखा गया है।
  • जद-जीयूआई
  • JAD
    • काम किया है, लेकिन केवल जावा 1.4 और नीचे का समर्थन करता है। यह भी एक ग्रहण प्लगइन के रूप में उपलब्ध है । अब विकास के अधीन नहीं है।

1
ध्यान दें कि IGNORE_EXCEPTIONSअब इस चीज़ को कमांड लाइन के झंडे में बदल दिया गया है -skip
एंटीमनी नोव



13

Soot नए Java कोड के लिए एक विकल्प है। कम से कम इसका फायदा अभी भी हाल ही में बना हुआ है ...

इसके अलावा, जावा Decompiler एक स्टैंड-अलोन GUI और ग्रहण एकीकरण दोनों के साथ एक डिकम्पॉइलर है।

अंत में, Jdec का उल्लेख नहीं किया गया है, हालांकि यह अन्य विकल्पों के रूप में पॉलिश नहीं है।


क्या आप जानते हैं कि Soot के साथ कंक्रीट क्लास की फाइल को कैसे हटाना है? मुझे यकीन नहीं है कि यह संभव है ...
Janus Troelsen

12

जेडी-जीयूआई वास्तव में अच्छा है। आप बस एक JAR फ़ाइल खोल सकते हैं और कोड के माध्यम से ब्राउज़ कर सकते हैं जैसे कि आप एक IDE पर काम कर रहे हैं। अच्छी चीज़।


11

यहाँ फ़रवरी 2015 के रूप में decompilers की एक सूची है:

प्रोसीओन , ओपन-सोर्स, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

सीएफआर , नि: शुल्क, कोई स्रोत-कोड उपलब्ध नहीं है, http://www.benf.org/other/cfr/

JD , केवल गैर-व्यावसायिक उपयोग के लिए नि: शुल्क, http://jd.benow.ca/

फ़र्नफ़्लॉवर , ओपन-सोर्स, https://github.com/fesh0r/fernflower ,

JAD - केवल ऐतिहासिक कारण के लिए यहां दिया गया है। नि: शुल्क, कोई स्रोत-कोड उपलब्ध नहीं है, http://varaneckas.com/jad/ आउटडेटेड, असमर्थित और सही ढंग से जावा 5 और बाद में विघटित नहीं होता है।

आप उपर्युक्त डीकंपाइलर का परीक्षण ऑनलाइन कर सकते हैं, कोई स्थापना की आवश्यकता नहीं है और अपनी खुद की शिक्षित पसंद बना सकते हैं।

क्लाउड में जावा डीकॉम्पिलर: http://www.javadecompilers.com/


1
प्रोसीज़न सबसे अच्छा काम करता है !!!!
मार्कोजेन 20

10

कुछ कार्यक्रम हैं जिनका आप उपयोग कर सकते हैं। आपको वास्तविक जावा कोड मिलेगा, लेकिन कभी-कभी कोड को बाधित किया गया होगा, इसलिए विधियों को एक अक्षर या संख्या या अक्षरों और संख्याओं का एक यादृच्छिक मिश्रण नाम दिया जाता है।

डीजे डेकोम्पेलर मोचा


9

जावा के लिए अधिकांश डिकंपाइलर JAD पर आधारित हैं । यह एक महान उपकरण है, लेकिन दुर्भाग्य से कुछ समय के लिए अद्यतन नहीं किया गया है और जावा 1.5+ कक्षाओं को बहुत अच्छी तरह से नहीं संभालता है। मैंने ऐसा कोई टूल नहीं देखा है जो 1.5+ कक्षाओं को ठीक से हैंडल करेगा।


3
यहाँ आप जाते हैं: मैंने अभी आपके उत्तर का उत्तर पोस्ट किया है;) JDK1.5 और अधिक समर्थित!
VonC

"मैंने कोई भी उपकरण नहीं देखा है जो 1.5+ कक्षाओं को ठीक से संभाल लेगा" - प्रोकियन, फ़र्नफ़्लॉवर, जेडडीसीओआर और सीएफआर (यह एक जावा 8 को संभालता है!)
एंड्रयू रूकिन


6

अब तक सूचीबद्ध सभी JAD लिंक टूटे हुए प्रतीत होते हैं, इसलिए मुझे यह साइट मिली। बढ़िया काम करता है (लिनक्स के लिए, कम से कम)! उबंटू 11.10 पर मुझे जो भी कारण के लिए स्थिर डाउनलोड करना था।

http://www.varaneckas.com/jad


5
  • JAD वह है जो काम करता है और सरल है।

  • इसके अलावा, यदि आप केवल तरीके देखना चाहते हैं, तो javap का उपयोग करें।


5

यदि आप यह देखना चाहते हैं कि जावा कंपाइलर कुछ चीजों को कैसे करता है, तो आप विघटन नहीं चाहते हैं, आप डिससैप्शन चाहते हैं। अपघटन में बाइटकोड को जावा स्रोत में बदलना शामिल है, जिसका अर्थ है कि निम्न स्तर की बहुत सारी जानकारी खो जाती है, और यदि आप संकलक अनुकूलन के बारे में सोच रहे हैं, तो संभवतः यह वही जानकारी है जिसमें आप रुचि रखते हैं।

वैसे भी, मैं एक खुला स्रोत जावा disassembler लिखा है । जावप के विपरीत, यह अत्यधिक पैथोलॉजिकल कक्षाओं पर भी काम करता है, इसलिए आप देख सकते हैं कि आपकी कक्षाओं में भी क्या-क्या ऑबफिकेशन उपकरण हैं। यह विघटन भी कर सकता है, हालांकि मैं इसकी सिफारिश नहीं करूंगा।


4

JAD मेरे लिए काम नहीं करता (उबंटू 11.10 अंक) इसलिए मैं आगे बढ़ा और JODO पर गया । कम से कम इसमें ओपन जावा स्रोत कोड है और मेरे .class को ठीक से विघटित करने में सक्षम है ।

मैं पहले 'ब्रांच / जेनेरिक' शाखा देखने की सलाह देता हूं । चड्डी स्थिर नहीं है।


1
JODO को छिटपुट रूप से बनाए रखा जाता है जबकि CFR और Procyon सक्रिय रूप से विकसित होते हैं और इसमें JDK 8 का समर्थन होता है।
Janus Troelsen

4

IntelliJ IDEA प्लेटफॉर्म पर आप Java Decompiler IntelliJ प्लगइन का उपयोग कर सकते हैं । यह आपको अपने डीबगिंग प्रक्रिया के दौरान सभी जावा स्रोतों को प्रदर्शित करने की अनुमति देता है, भले ही आपके पास ये सब न हों। यह प्रसिद्ध उपकरणों पर आधारित है JD-GUI

यहाँ छवि विवरण दर्ज करें


@ NoOP क्या आप रोबोट हैं? या सिर्फ समीक्षा के विषय पर ध्यान नहीं दे रहे हैं?
naXa

इसके लिए क्षमा करें, पहली नज़र में यह ऐसा लगता है जैसे लिंक केवल उत्तर देता है। हो सकता है कि आपको अधिक विवरण जोड़ना चाहिए और आपका उत्तर भी केवल प्रश्न शीर्षक के साथ होना चाहिए न कि प्रश्न की सामग्री के साथ।
ashiquzzaman33

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
क्रिस्टिजन इलिव

@ क्रिस आपने सुझाए गए समाधान की कोशिश की है? क्या आपने भी प्रश्न पढ़ा है ?
naXa

1
@ NoOP के असभ्य होने के लिए खेद है = (मैं उन समीक्षकों की संख्या से अभिभूत हूं जो ध्यान नहीं देते हैं।
naXa

1

साथ AndroChef जावा Decompiler आप apk, डेक्स, जार और जावा वर्ग-फ़ाइलें डिकंपाइल कर सकते हैं। यह सरल और आसान है। AndroChef JD FernFlower पर आधारित है । आप 10 मुफ्त उपयोगों में इसका मूल्यांकन कर सकते हैं।

AndroChef जावा भाषा की विशेषताओं जैसे जेनरिक, एनम और एनोटेशन का समर्थन करता है। कुछ अध्ययनों के अनुसार, AndroChef Java Decompiler पारंपरिक जावा कंपाइलर्स के साथ उत्पन्न जावा अनुप्रयोगों के 98.04% का अपघटन करने में सक्षम है - एक बहुत ही उच्च वसूली दर। यह सरल लेकिन शक्तिशाली उपकरण है जो आपको जावा और डालविक बायोटेक (डीईएक्स, एपीके) को डिकम्पोजेबल जावा स्रोत में विघटित करने की अनुमति देता है।


1
@Dimitrius, कृपया समीक्षा के दौरान उत्तर ध्यान से पढ़ें। आप यहां एक फर्नाफ्लोअर या एंड्रो शेफ सहित कैसे कल्पना करते हैं?
naXa

1

OSX के लिए मैं सुझाव देता हूं: जारज़िला या जेडी-जीयूआई

वे दोनों आपको जार, युद्ध आदि देखने की अनुमति देते हैं। फ़ाइल सामग्री और उनके अंदर किसी भी वर्ग फ़ाइलों को विघटित करना।

जारज़िला: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.