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


283

क्या किसी को एक मुफ्त डिकंपाइलर का पता है जो एक एकल वर्ग के बजाय एक संपूर्ण जार फ़ाइल को विघटित कर सकता है? मुझे $ 1.class नाम $ 2.class name.class जैसे उप वर्गों के साथ एक समस्या है


127
दो और बातें याद रखें: 1) एक डिकम्पॉइलर का मात्र उल्लेख "होलियर की तुलना में" का कारण होगा, बाहर आने के लिए और अपने इरादों के बारे में मूल्य निर्णय लेने के बावजूद कि कोई विचार नहीं है कि आपका नियोजित उपयोग क्या है, इसलिए सावधान रहें कि आप किससे बात करते हैं। 2) फैंसी JavaDecompiler आपको कोड की एक उत्कृष्ट प्रस्तुति देगा, अच्छी तरह से रखी गई और पढ़ने में आसान - केवल टिप्पणियां गायब। यह आश्चर्यजनक रूप से अच्छा है, एक JAR फ़ाइल को पुनर्प्राप्त करना, जिसके पास चर नामों के साथ लंबे समय से खो गया स्रोत था। बेशक हम हमारे घर में जार फ़ाइलों को बाधित नहीं करते हैं।
एंड्रयू

पोस्ट में टिप्पणी भी देखें चुनें और जावा डिकम्पॉइलर का परीक्षण करें
dma_k

8
मैंने कई बार इस धागे को बंद किया है जब मुझे यह अध्ययन करने की आवश्यकता थी कि किसी ने बुककैट प्लगइन के लिए कुछ कैसे पूरा किया ... यह टिप्पणी हमेशा मुझे एक मुस्कान के साथ छोड़ देती है। काश मैं हर बार इसे रोक सकता हूं।
जेन पांडा


यदि आप कोई सॉफ्टवेयर डाउनलोड नहीं करना चाहते हैं तो सरल ऑनलाइन डीकॉम्पिलेटर। javadecompilers.com
निक ग्राहम

जवाबों:


313

2009: JavaDecompiler जार के साथ एक अच्छा काम कर सकता है : 0.2.5 के बाद से, JAR फाइलों में सभी फाइलें प्रदर्शित होती हैं।

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

यह भी देखें कि "मैं" अपघटित "जावा क्लास फाइल कैसे करूँ?

JD-Eclipse 2009 के अंत से परिवर्तित नहीं हुआ है, हालांकि ( परिवर्तन देखें )।
इसलिए नवीनतम ग्रहण (3.8, 4.2+) के साथ इसका एकीकरण समस्याग्रस्त हो सकता है।

जेडी-कोर सक्रिय रूप से बनाए रखा जाता है।

दोनों (एसओ उपयोगकर्ता) इमैनुएल डुपीयू के शानदार काम का परिणाम हैं ।


2018: डेविड कैनेडी अरुजो द्वारा टिप्पणियों में उल्लिखित एक और आधुनिक विकल्प :

जेटब्रेन्स / IntelliJ-समुदाय / plugins / जावा-decompiler / इंजन

फर्नाफ्लावर वास्तव में जावा के लिए पहला काम कर रहे विश्लेषणात्मक डिकंपाइलर है और शायद सामान्य रूप से उच्च स्तरीय प्रोग्रामिंग भाषा के लिए।

java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>

java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\

यह भी देखें कि हाल ही में IntelliJ IDEA के साथ काम करने वाली कमांड के लिए जावा फाइलों को डीटेलिज कैसे करें


5
फी, जावा डिकम्पॉइलर विंडोज, मैक और लिनक्स पर काम करता है।
यानोकवा

4
@AlexS अच्छा :) अगला चरण: संस्करण नियंत्रण ( stackoverflow.com/questions/59561/… ) और फिर निरंतर एकीकरण ( stackoverflow.com/questions/130592/… )
VonC

3
Java Decompiler से आप JAR फाइल को खोल सकते हैं और फाइल, ऑल सेव सोर्स को जा सकते हैं। यह सभी श्रेणी की फाइलों को java files = D
Akira Yamamoto

2
कृपया याद रखें कि यह त्रुटियां भी करता है। मेरे पास एक सदस्य चर के साथ एक वर्ग है और यह कोड के प्रभाव को नष्ट करते हुए इसे एक फ़ंक्शन के पैरामीटर में ले गया। बाहर देखो, यह तुम्हें मिल जाएगा।
चार्ल्स डब्ल्यूडब्ल्यू

1
JD एक अच्छा प्रारंभिक बिंदु है लेकिन जटिल कोड को डिकंपाइल करने में विफल रहता है। एक अच्छा विकल्प github.com/JetBrains/intellij-community/tree/master/plugins/… है
डेविड केनेडी

37

सबसे पहले, यह याद रखने योग्य है कि सभी जावा संग्रह फाइलें ( .jar/ .war/ आदि ...) सभी मूल रूप से सिर्फ फैंसी .zipफाइलें हैं , कुछ जोड़े हुए मैनिफ़ेस्ट और मेटाडेटा के साथ।

दूसरा, इस समस्या से निपटने के लिए मैं व्यक्तिगत रूप से कई उपकरणों का उपयोग करता हूं जो सभी स्तरों पर इस समस्या को संभालते हैं:

  • फ़ाइलों के विघटन के लिए IDE में काम करते समय Jad + Jadclipse.class
  • WinRAR , मेरा पसंदीदा संपीड़न उपकरण मूल रूप से जावा अभिलेखागार (फिर से, पहले पैराग्राफ देखें) का समर्थन करता है।
  • तुलना से परे , मेरा पसंदीदा अलग टूल, जब सही तरीके से कॉन्फ़िगर किया गया है,jarएससहित किसी भी संग्रह फ़ाइल के बीच में तुलना कर सकते हैं। एक कोशिश के लायक है।

उपर्युक्त सभी का लाभ यह है कि मुझे किसी अन्य बाहरी उपकरण को रखने की आवश्यकता नहीं है जो मेरे काम के वातावरण को बंद कर देता है। मुझे उन फ़ाइलों में से एक की आवश्यकता होगी जो सब कुछ मेरी आईडीई के अंदर संभाला जा सकता है या अन्य फाइलों के साथ मूल रूप से अलग हो सकता है।


lolz मैं क्रोम और फ़ायरफ़ॉक्स एक्सटेंशनों को खोलना जारी रखता हूं और मैं भूल गया कि .jar सिर्फ ज़िप हैं :)
कार्टर कोल

36

यदि आपके पास बैश शेल और जेड दोनों हैं:

JAR=(your jar file name)
unzip -d $JAR.tmp $JAR
pushd $JAR.tmp
for f in `find . -name '*.class'`; do
    jad -d $(dirname $f) -s java -lnc $f
done
popd

मैं उस के साथ एक छोटा, थोड़ा सा हो सकता है, लेकिन यह विज्ञापित के रूप में कम या ज्यादा काम करना चाहिए। आपको $JAR.tmpअपनी विघटित फ़ाइलों को समाप्त करना चाहिए ।


1
ubuntu पर # के बजाय #! / bin / bash का उपयोग करें! / bin / sh becausw pushd doesnt काम के लिए डिफ़ॉल्ट ubuntu शेल ...
mossplix

1
मैं javapइस बुनियादी लूप संरचना के भीतर उपयोग कर रहा हूं , और यह मेरे लिए काम कर रहा है।
क्रिस प्रिंस

25

मुझे एक उपकरण के साथ उचित सफलता मिली है, जिसका नाम है (निराशा से) " JD: Java Decompiler "।

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


मैं JD-GUI का विंडोज़ या लिनक्स संस्करण डाउनलोड नहीं कर सका। क्या यह समस्या केवल मुझे प्रतीत होती है?
mmdemirbas

@JanusTroelsen मैंने इसे हटा दिया है। इसे अधिसूचित करने के लिए धन्यवाद। चलो जवाब साफ रखें :)
pramodc84

@ जीरो 3: अपडेटेड
गोपालकृष्णन

11

कुछ इस तरह:

jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r

शायद?


1
मैंने थोड़ी देर के लिए जद का उपयोग किया है और पूरे जार को निकालने और विघटित करने के लिए एक त्वरित तरीके की आवश्यकता है। धन्यवाद, इससे काफी मदद मिली।

5

निम्नलिखित को decompile.jar.sh में डालें

# Usage: decompile.jar.sh some.jar [-d]

# clean target folders
function clean_target {
  rm -rf $unjar $src $jad_log
}

# clean all debug stuff
function clean_stuff {
  rm -rf $unjar $jad_log
}

# the main function
function work {
  jar=$1
  unjar=`basename $jar.unjar`
  src=`basename $jar.src`
  jad_log=jad.log

  clean_target

  unzip -q $jar -d $unjar
  jad -d $src -ff -r -lnc -o -s java $unjar/**/*.class > $jad_log 2>&1

  if [ ! $debug ]; then
    clean_stuff
  fi

  if [ -d $src ] 
    then
      echo "$jar has been decompiled to $src"
    else
      echo "Got some problems check output or run in debug mode"
  fi
}

function usage {
  echo "This script extract and decompile JAR file"
  echo "Usage: $0 some.jar [-d]"
  echo "    where: some.jar is the target to decompile"
  echo "    use -d for debug mode"
}

# check params
if [ -n "$1" ]
  then
    if [ "$2" == "-d" ]; then
      debug=true
      set -x
    fi
    work $1
  else
    usage
fi
  • chmod + x decomplie.jar.sh // निष्पादन योग्य
  • ln -s ./decomplie.jar.s / usr / bin / dj

उपयोग के लिए तैयार, बस टाइप करें dj your.jarऔर आपको your.jar.srcस्रोतों के साथ फ़ोल्डर मिलेगा । -dडिबग मोड के लिए विकल्प का उपयोग करें ।


धन्यवाद, लेकिन 23 जुलाई को "जद" को "./ad" में बदलना था और "बैश डिकम्पाइल.जर.श। Foo.jar -d" चलाना था क्योंकि मैं अपने बिन फ़ोल्डर को प्रदूषित नहीं करना चाहता था
सैम

किसी भी recompiler? जार में recompiles jad फ़ाइलें?
N Jay

2

एक जार फ़ाइल जार एक्सटेंशन के साथ सिर्फ एक ज़िप फ़ाइल है। आपको ज़िप फ़ाइल की तरह जार को अनज़िप (winzip) करने में सक्षम होना चाहिए।


1

आप इसे निकालते हैं और फिर डायर के खिलाफ जद का उपयोग करते हैं।


मुझे नहीं लगता कि आप इसे सिर्फ डिर के खिलाफ चला सकते हैं। आपको {dir} / ** / * क्लास निर्दिष्ट करना होगा
विहंग

जार निकालें और jad {dir} जैसी किसी चीज़ का उपयोग करें, मैंने अभी इसका परीक्षण किया है और यह विंडोज़ पर काम नहीं करता है
Jaime Hablutzel

1

नोट: यह समाधान केवल मैक और * निक्स उपयोगकर्ताओं के लिए काम करता है।

मैंने भी बिना किस्मत के जद को खोजने की कोशिश की। मेरा त्वरित समाधान मैकडैड को डाउनलोड करना था जिसमें जेड शामिल है। एक बार जब आप इसे डाउनलोड कर लेते हैं तो आप [जहाँ-जहाँ-आप-डाउनलोड-मज्जाद] / मकाज / सामग्री / संसाधन / जद में जद पा सकते हैं।

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