Javaアプレットのクラスファイルが内部で何をしているのかを理解しようとしています。 NotepadまたはTextpadで開くと、ただのぐちゃぐちゃなグループが表示されます。
それをやや読みやすい形式に戻す方法はありますか?それで私はそれが何をしているのかを理解しようとすることができますか?
jd-gui は現時点で最高の逆コンパイラです。 Javaの新しい機能を、扱いにくいJADと比較して処理できます。
バイトコードの読み取りを気にしない場合、javapは正常に動作するはずです。これは、標準のJDKインストールの一部です。
Usage: javap <options> <classes>...
where options include:
-c Disassemble the code
-classpath <pathlist> Specify where to find user class files
-extdirs <dirs> Override location of installed extensions
-help Print this usage message
-J<flag> Pass <flag> directly to the runtime system
-l Print line number and local variable tables
-public Show only public classes and members
-protected Show protected/public classes and members
-package Show package/protected/public classes
and members (default)
-private Show all classes and members
-s Print internal type signatures
-bootclasspath <pathlist> Override location of class files loaded
by the bootstrap class loader
-verbose Print stack size, number of locals and args for methods
If verifying, print reasons for failure
Java逆コンパイラが必要な場合は、コマンドラインツールjavap
を使用してこれを行うことができます。また、 Java Decompiler HOW-TO では、クラスファイルを逆コンパイルする方法について説明しています。
Jad を使用して逆コンパイルするのがおそらく最良のオプションです。コードが難読化されていない限り、大丈夫な結果が生成されます。
あなたが探しているのはJava逆コンパイラです。 JADをお勧めします http://www.kpdus.com/jad.html 非営利目的での使用は無料で、仕事は完了です。
注:これにより、コードが記述されたものと完全に同じになるわけではありません。つまり、コメントや変数名が失われる可能性があるため、通常のソースコードを読むよりも少し難しくなります。開発者が本当に秘密を守っていれば、コードも難読化され、読みにくくなります。
@MichaelMyersが指摘したように、
javap -c <name of Java class file>
jVMアセンブリコードを取得します。見やすくするために、出力をテキストファイルにリダイレクトすることもできます。
javap -c <name of Java class file> > decompiled.txt
cpuguru、アプレットがjavac 1.3(またはそれ以下)でコンパイルされている場合、最良のオプションはJadを使用することです。
残念ながら、JAD 1.5.8(2001年4月14日)でサポートされている最後のJDKはJDK 1.3です。
アプレットが最新のコンパイラでコンパイルされている場合、 JD-GUI を試すことができます。このデコンパイラは開発中ですが、ほとんどの場合、正しいJavaソースを生成します。 JDK 1.4、1.5、または1.6でコンパイルされたクラスの場合。
DarenW、あなたの投稿に感謝します。 JD-GUIはまだ最高の逆コンパイラではありません...しかし、私は取り組んでいます:)
調べたいクラスファイルがオープンソースの場合、それを逆コンパイルするのではなく、ソースファイルをIDEに直接添付する必要があります。そうすれば、自分のライブラリクラスのようにライブラリクラスのコードを表示できます
これはコンパイルされたコードです。JADのような逆コンパイラを使用する必要があります。 http://www.kpdus.com/jad.html
逆コンパイラを使用する必要があります。他の人はJADを提案していますが、他のオプションもありますが、JADが最適です。
元のソースコードと比較して少し失われる可能性があるというコメントをエコーします。消去のためにコードでジェネリックが使用されている場合は、特におかしくなります。
jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.Zip&can=2&q= "が最適であり、 .classファイルを逆コンパイルするためのユーザーフレンドリーなオプション...
確かにJADやJADclipse Eclipseプラグイン。
また、利用可能なオンラインJavaデコンパイラを使用することもできます。たとえば http://www.javadecompilers.com
Applet.classを逆コンパイルする必要はありません。パブリックJava APIクラスのソースコードはJDKに付属しており(インストールすることを選択した場合)、逆コンパイルされたバイトコードよりも読みやすくなります。 src.Zipに圧縮ファイルがあります(JDKインストールフォルダーにあります)。
提案されているように、JADを使用してそれを逆コンパイルし、ファイルを表示できます。読みやすくするには、Eclipse用JADclipseプラグインを使用してJADをEclipseに直接統合するか、コマンドラインJADよりもはるかに使いやすいDJ Java Decompilerを使用します。
結果として読み取り可能なJavaコードが必要な場合、JADは優れたオプションです。ただし、本当に.class
ファイル形式の内部を詳しく調べたい場合は、javap
が必要になります。 JDKにバンドルされており、16進バイトコードを読み取り可能なASCIIに「逆コンパイル」できます。生成する言語はバイトコード(Javaのようなものではない)ですが、かなり読みやすく、非常に有益です。
また、本当にしたい場合は、.class
ファイルを16進エディターで開き、バイトコードを直接読み取ることができます。結果は、javap
を使用した場合と同じです。
CFR-別のJavaデコンパイラ は、i Javaで書かれた現代のJavaに最適なデコンパイラです。