কিভাবে একটি সম্পূর্ণ জার ফাইলটি ডিসকোপাইল করবেন? [বন্ধ]


283

কেউ কি এমন একটি ফ্রি ডিকম্পিলার সম্পর্কে জানেন যা একটি একক শ্রেণির পরিবর্তে পুরো জার ফাইলটি ছড়িয়ে দিতে পারে? নাম sub 1.class নাম $ 2 ক্লাসের নাম.ক্লাসের মতো সাব ক্লাসে আমার সমস্যা আছে


127
আরও দুটি জিনিস মনে রাখবেন: ১) একটি ডিসকম্পেলারটির কেবলমাত্র উল্লেখের ফলে "আপনার চেয়ে পবিত্রতম" বেরিয়ে আসবে এবং আপনার পরিকল্পনাগুলি ব্যবহার কী তা সম্পর্কে ধারণা না থাকা সত্ত্বেও আপনার উদ্দেশ্যগুলি সম্পর্কে মূল্যবান রায় প্রদান করবে, সুতরাং আপনি কাদের সাথে কথা বলছেন সে বিষয়ে সাবধানতা অবলম্বন করুন। 2) অভিনব জাভাডেকম্পেলারটি আপনাকে কোডের একটি দুর্দান্ত উপস্থাপনা দেবে, ভালভাবে সাজানো এবং পড়তে সহজ - কেবল মন্তব্যগুলি অনুপস্থিত। এটি আশ্চর্যজনকভাবে ভাল, একটি জেআর ফাইল পুনরুদ্ধার করা যা ভেরিয়েবলের নাম সহ দীর্ঘ হারিয়ে উত্স হারিয়েছিল। অবশ্যই আমরা আমাদের বাড়ির জেআর ফাইলগুলিকে অস্পষ্ট করি না।
অ্যান্ড্রু

আরও দেখুন পোস্টে মন্তব্য চয়ন করুন এবং পরীক্ষা জাভা decompiler
dma_k

8
আমি এই থ্রেডটি দিয়ে এতবার থেমেছি যখন আমি কীভাবে একজন বুককিট প্লাগইনটির জন্য কেউ কিছু অর্জন করেছিলাম তা অধ্যয়নের প্রয়োজন ছিল ... এই মন্তব্যটি আমাকে সর্বদা হাসি দিয়ে যায়। আমি যখনই থামি প্রতিবারই এটি উত্সাহিত করতে পারব।
জেন পান্ডা


আপনি কোনও সফ্টওয়্যার ডাউনলোড করতে না চাইলে সাধারণ অনলাইন ডিকম্পিলার। javadecompilers.com
নিক গ্রাহাম

উত্তর:


313

২০০৯: জাভাডেকম্পিলার একটি জারের সাথে ভাল কাজ করতে পারে : ০.২.৫ থেকে, জেআর ফাইলগুলিতে সমস্ত ফাইল প্রদর্শিত হয়।

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

"আমি কীভাবে জাভা ক্লাসের ফাইলগুলিকে" ডিসকম্পাইল "করব? প্রশ্নটি দেখুন ।

২০০৯ সালের শেষের দিকে জেডি-ইক্লিপস পরিবর্তিত হয়েছে বলে মনে হচ্ছে না ( পরিবর্তনগুলি দেখুন )।
সুতরাং সর্বশেষগ্রহণের সাথে এর সংহতকরণ (3.8, 4.2+) সমস্যাযুক্ত হতে পারে।

জেডি-কোর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়।

উভয়ই (এসও ব্যবহারকারী) ইমানুয়েল দুপুয়ের দুর্দান্ত কাজের ফল ।


2018: একটি আরো আধুনিক বিকল্প, উল্লিখিত মন্তব্য দ্বারা ডেভিড কেনেডি Araujo আপনার :

JetBrains / 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\

সাম্প্রতিক ইন্টেলিজ আইডিইএর সাথে কাজ করার জন্য একটি কমান্ডের জন্য জাভা ফাইলগুলিতে ইন্টেলিজ ধারণাটি কীভাবে জাভা ফাইলগুলিতে বিভক্ত করা যায় তা দেখুন ।


5
fyi, java decompiler উইন্ডোজ, ম্যাক এবং লিনাক্সে কাজ করে।
ইয়ানোকওয়া

4
@AlexS চমৎকার :) পরবর্তী পদক্ষেপ: সংস্করণ নিয়ন্ত্রণ ( stackoverflow.com/questions/59561/... ) এবং তারপর ক্রমাগত ইন্টিগ্রেশন ( stackoverflow.com/questions/130592/... )
VonC

3
জাভা ডিকম্পিলারের সাহায্যে আপনি জার ফাইলটি খুলতে এবং ফাইলটিতে যেতে পারেন, সমস্ত উত্স সংরক্ষণ করুন। এটি জাভা ফাইলগুলিতে সমস্ত শ্রেণীর ফাইলগুলি সংরক্ষণ করে = ডি
আকিরা ইয়ামামোটো

2
দয়া করে মনে রাখবেন এটি ত্রুটিও করে। আমার একটি সদস্যের ভেরিয়েবল সহ একটি ক্লাস রয়েছে এবং এটি কোডের প্রভাবকে ধ্বংস করে এটি কোনও ফাংশনের প্যারামিটারে স্থানান্তরিত করে। সাবধান, এটি আপনি পাবেন।
চার্লসডাব্লু

1
জেডি একটি ভাল সূচনা পয়েন্ট তবে জটিল কোডটি ডিসকোপাইল করতে ব্যর্থ। একটি ভাল বিকল্প হ'ল github.com/JetBrains/intellij-commune/tree/master/plugins/…
ডেভিড কেনেডি

37

প্রথমত, এটি মনে রাখার মতো যে সমস্ত জাভা সংরক্ষণাগার ফাইলগুলি ( .jar/ .war/ ইত্যাদি ...) কয়েকটি মূলত কেবল অভিনব .zipফাইল যা কয়েকটি সংযোজন প্রকাশিত এবং মেটাডেটা সহ।

দ্বিতীয়ত, এই সমস্যাটি মোকাবেলার জন্য আমি ব্যক্তিগতভাবে বেশ কয়েকটি সরঞ্জাম ব্যবহার করি যা সমস্ত স্তরে এই সমস্যাটি পরিচালনা করে:

  • জড + জ্যাডক্লিপগুলি.class ফাইলগুলি পচানোর জন্য আইডিইতে কাজ করার সময়
  • উইনআরআর , আমার প্রিয় সংকোচনের সরঞ্জামটি জাভা সংরক্ষণাগারগুলিকে স্থানীয়ভাবে সমর্থন করে (আবার, প্রথম অনুচ্ছেদ দেখুন)।
  • তুলনার বাইরে , আমার প্রিয় ডিফ সরঞ্জামটি সঠিকভাবে কনফিগার করা থাকলে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
! উবুন্টু # পরিবর্তে # / বিন / ব্যাশ ব্যবহার করেন তার উপর / বিন / SH becausw pushd স্বল্পতা ডিফল্ট উবুন্টু শেল ... এর জন্য কাজ!
mossplix

1
আমি javapএই বেসিক লুপ কাঠামোর মধ্যে ব্যবহার করছি , এবং এটি আমার জন্য কাজ করছে।
ক্রিস প্রিন্স

25

" জেডি: জাভা ডেকম্পিলার " নামের একটি সরঞ্জামের সাথে আমার যুক্তিসঙ্গত সাফল্য পেয়েছে ।

জাভা 5 এবং উচ্চতর জন্য সংকলিত ক্লাসগুলির সাথে ডিল করার সময় আমি বেশিরভাগ ডিসকম্পিলারের চেয়ে ভাল পেয়েছি । দুর্ভাগ্যক্রমে, এর এখনও কিছু হিচাপ থাকতে পারে যেখানে জেডি সাধারণত সাফল্য অর্জন করতে পারে।


আমি জেডি-জিইআইয়ের উইন্ডোজ বা লিনাক্স সংস্করণটি ডাউনলোড করতে পারিনি। এই সমস্যাটি কি কেবল আমার কাছে উপস্থিত হয়?
মিমডিমিরবাস 14

পুনঃটুইট করেছেন এটি জানানোর জন্য আপনাকে ধন্যবাদ। উত্তরগুলি পরিষ্কার রাখতে দেয় :)
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 লাইনে "জাদ" পরিবর্তন করে "। /জেড" করতে হয়েছিল এবং "বশ ডিকম্পাইল.জার.শ foo.jar -d" চালাতে হয়েছিল
স্যাম

কোন recompiler? জড ফাইলগুলি জারে পুনরুদ্ধার করে?
এন জে

2

একটি জার ফাইল কেবল জার এক্সটেনশান সহ একটি জিপ ফাইল। আপনি একটি জিপ ফাইলের মতো একটি জার আনজিপ (উইনজিপ) করতে সক্ষম হবেন।


1

আপনি এটি উত্তোলন করুন এবং তারপরে দিরের বিরুদ্ধে জাদ ব্যবহার করুন।


আমি মনে করি না আপনি এটিকে কেবল দিরের বিরুদ্ধে চালাতে পারেন। আপনাকে {দির} / ** / * শ্রেণি নির্দিষ্ট করতে হবে
বিহুং

জারটি বের করুন এবং
জাদির সাথে

1

দ্রষ্টব্য: এই সমাধানটি কেবল ম্যাক এবং * নিক্স ব্যবহারকারীদের জন্যই কাজ করে।

আমিও ভাগ্য নির্বিঘ্নে জাদের সন্ধান করার চেষ্টা করেছি। আমার দ্রুত সমাধানটি হ'ল ম্যাকজেড ডাউনলোড করা যাতে জাদ রয়েছে। এটি ডাউনলোড করার পরে আপনি [যেখানে আপনি ডাউনলোড করেছেন-মাকজাদ] / ম্যাকজেএডি / সামগ্রী / সংস্থানসমূহ / জাদে জাদ পাবেন ad

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.