2009-03-15 37 views
218

誰かが、単一のクラスではなくJarファイル全体を逆コンパイルできる無料のデコンパイラについて知っていますか?私は名前$ 1クラス名$ 2.クラス名。クラスJarファイル全体を逆コンパイルするには?

+4

2つのことを覚えておいてください。1)ソースの著作権が存在し、逆コンパイルと再利用はほとんどの国で少しシフトで違法です。2)派手なJavaDecompilerを使用しても元のソースは取得できません。 – Esko

+1

ありがとう、それは小さなアプレットであり、私は眺めと勉強のソースコードを盗んではいけません。 – StoneHeart

+110

さらに2つのことを覚えています:1)逆コンパイラの単なる言及は、あなたの計画された用途が何であるか分からないにもかかわらず、あなたの動機について価値の判断を下し、あなたが話している人に注意するようになります。 2)派手なJavaDecompilerはコードの優れた演出を提供し、よくレイアウトされ、読みやすい - コメントだけが欠落している。驚くほど良いことに、長い名前のソースを失ったJARファイルを、変数名で修復しています。もちろん、社内のJARファイルを難読化することはありません。 – Andrew

答えて

264

JavaDecompilerは、jarでうまくいく:0.2.5以降、JARファイル内のすべてのファイルが表示される。

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

the question "How do I “decompile” Java class files?"参照してください。

JD-Eclipseは2009年後半から変更されていないようです(Changes参照)。
最新のEclipse(3.8,4.2+)との統合に問題が生じる可能性があります。

JDコアが積極的に維持されます。

どちらも(SOユーザー)Emmanuel Dupuyの素晴らしい仕事の結果です。

+5

fyi、java decompiler windows、およびLinux。 – yanokwa

+4

@AlexS nice :)次のステップ:バージョン管理(http://stackoverflow.com/questions/59561/what-tools-techniques-can-benefit-a-solo-developer)そして継続的インテグレーション(http:// stackoverflow .com/questions/130592/is-continuous-integration-for-a-solo-developer) – VonC

+0

誰でも最新のEclipseとjdk7でEclipseプラグインを入手できますか?私は試みましたが、ダウンロードエラーが発生します。 JD-Guiは動作しますが、jd-eclipseは私のために失敗するようです... –

1

のようなサブクラスに問題があります。それを抽出して、ディレクトリに対してjadを使います。

+0

私はあなたが単にそれをdirに対して実行することはできないと思います。あなたは{dir}/**/*クラスを指定する必要があります。クラス – Vihung

+0

jarを抽出してjad {dir}のようなものを使用して、私はちょうどそれをテストして、ウィンドウでは動作しません –

2

jarファイルは、jar拡張子を持つzipファイルです。あなたはzipファイルのようにジャーを解凍(winzip)することができるはずです。

29

あなたはbashシェルとJADの両方を持っているために起こる場合:

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/bashを使うのは、デフォルトのubuntuシェルでpushdが動作しないためです... – mossplix

+0

私はこの基本的なループ構造内で 'javap'を使用しています。 –

31

まず第一に、それはすべてのJavaアーカイブファイル(.jar/.warは/ etc ...)いくつかの追加のマニフェストとメタデータとすべて基本的にはちょうど空想.zipファイル、あることを思い出して価値があります。ネイティブに逆コンパイルするためにIDEで.classファイル

  • WinRAR、私の好きな圧縮ツールを作業中に

    • Jad + Jadclipse:私は個人的にすべてのレベルでこの問題を扱ういくつかのツールを使用してこの問題に取り組むための

      第二に、 Javaアーカイブをサポートしています(再び、最初の段落を参照)。

    • Beyond Compare私の好きな差分ツールは、正しく設定されていれば、jarを含む任意のアーカイブファイルの間でオンザフライ比較ができます。試してみる価値がある。

    上記のすべての利点は、自分の仕事環境を乱す他の外部ツールを保持する必要がないことです。これらのファイルの1つから私が必要とするものはすべて、IDE内で処理することも、他のファイルとネイティブで区別することもできます。

  • +0

    lolzクロムとファイアウォクスの拡張機能を解凍していて、忘れてしまった.jarもちょうどジップです:) –

    +1

    Jadへのリンクが死んでいます。 – Zero3

    1

    注:この解決策は、Macおよび* nixユーザーにのみ有効です。

    私も運がないJadを見つけようとしました。私の簡単な解決策は、jadを含むMacJadをダウンロードすることでした。ダウンロードしたら、[where-you-downloaded-macjad]/MacJAD/Contents/Resources/jadでjadを見つけることができます。

    23

    JD: Java Decompiler」という名前のツールで合理的な成功を収めました。

    Java 5以降でコンパイルされたクラスを扱う場合、ほとんどの逆コンパイラよりも優れていることがわかりました。残念ながら、JADが正常に成功するにはまだまだ問題があります。

    +0

    Windows版またはLinux版のJD-GUIをダウンロードできませんでした。この問題は私にしか見えませんか? – mmdemirbas

    +0

    @JanusTroelsen削除しました。ご連絡ありがとうございます。答えをきれいに保つことができます:) – pramodc84

    +1

    リンクが死んでいます。 – Zero3

    9

    ような何か:多分

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

    に?

    +1

    私はjadをしばらく使用してきましたが、jarファイル全体を抽出して逆コンパイルするための素早い方法が必要でした。ありがとう、これは非常に助けになりました。 –

    3

    挿入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オプションを使用してください。

    +0

    ありがとう、私は自分のbinフォルダを汚染したくないので、23行目で "jad"を "./jad"に変更し、 "bash decompile.jar.sh foo.jar -d"を実行する必要があった – Sam

    +0

    再コンパイラ? jadファイルをjarファイルに再コンパイルしますか? –

    関連する問題