Java クラスを逆コンパイルする
- Java クラスを逆コンパイルする理由
- Java逆コンパイラ
- Eclipse IDE を使用した Java クラスの逆コンパイル
- IntelliJ IDEA を使用して Java クラスを逆コンパイルする
- コマンド ラインを使用して Java クラスを逆コンパイルする
- JD-GUI を使用して Java クラスを逆コンパイルする
このガイドでは、Java .class
ファイルを逆コンパイルする技術について学びます。 逆コンパイルの簡単な概要、Java で .class
ファイルを逆コンパイルする方法、および Java でファイルを逆コンパイルするときにどのような変更が見られるかについて説明します。
Java クラスを逆コンパイルする理由
Java 開発者としてのキャリアの中で少なくとも 1 回は、JAR ファイルに直面しなければならない状況や、.class
ファイルを逆コンパイルしてソース コードに戻さなければならない状況に遭遇します。
ご存じのとおり、JAR ファイルは、さまざまな Java クラス ファイルと、画像、音声などのその他のリソースのコレクションを含む Java アーカイブ パッケージです。これらのファイルは ZIP 形式で構築され、拡張子 .jar
を使用します。
JAR ファイルの問題は、ユーザーがこのファイルを開く権限を与えられていないことです。 これらのファイルにアクセスする唯一の方法は、ユーザーが JAR ファイルを逆コンパイルすることです。
ファイル内の .class
ファイルを読み取れるようにするには、ソフトウェア ツールを使用してこのファイルを逆コンパイルする必要があります。
一方、.class
ファイルを使用すると、Eclipse IDE や IntelliJ IDEA などのソフトウェアを使用できます。 また、コマンド ライン引数を使用して .class
ファイルを逆コンパイルすることもできます。
Java逆コンパイラ
JARファイルを読み取り可能なクラスファイルに逆コンパイルしているため、逆コンパイルはリバースエンジニアリングのアクションの下にあります。 これについてはこのガイドの後半で学習しますが、まず、.class
ファイルを調べてみましょう。
.class
ファイルを逆コンパイルする方法は複数あります。 これらのファイルを操作するユーザーにとって何が最も適しているかということになります。
このプロセスに役立つソフトウェア ツールがありますが、.class
ファイルをソース コードに逆コンパイルする方法は他にもあります。 私たちが使用している 2つの方法は、Eclipse IDE や IntelliJ IDEA などのソフトウェアです。
これら 2つを使用する最も重要な利点は、逆コンパイラが非常に使いやすいことです。 最も一般的に使用されているソフトウェアである Eclipse IDE を見てみましょう。
これには、いくつかの手順に従う必要があります。
Eclipse IDE を使用した Java クラスの逆コンパイル
プラグインは、.class
ファイルを逆コンパイルするために使用されます。 このソフトウェアでは、プラグインは Enhanced Class Decompiler (ECD) と呼ばれます。 Enhanced Class Decompiler は、Eclipse Marketplace と呼ばれるソフトウェアのマーケットプレイスから簡単にインストールできます。
-
これを行うには、
Go to help
オプションに移動し、Eclipse Marketplace
を選択します。 -
この後、
Enhanced Class Decompiler
を検索します。 この後、適切に動作するように ECD をセットアップする必要があります。 -
ECD を設定するには、メニューから
Go to Window
オプションをクリックし、Preferences
をクリックします。 -
次に、ドロップダウンからオプション
Editors
を見つけるGeneral
を選択します。 -
前のオプションをクリックした後、別のドロップダウンで
ファイルの関連付け
を選択します。 -
最後に、
*.class without source
オプションを選択します。
.class
ファイルをクリックするだけで逆コンパイルできるようになりました。
IntelliJ IDEA を使用して Java クラスを逆コンパイルする
このソフトウェアを使用する主な理由は、逆コンパイラをダウンロードまたはセットアップする必要がないことです。 このソフトウェアにはデフォルトの逆コンパイラがあり、ユーザーは IntelliJ IDEA を簡単に使用できます。
IntelliJ IDEA で .class
ファイルを開くだけで、そのファイルは自動的に逆コンパイルされます。
コマンド ラインを使用して Java クラスを逆コンパイルする
.class
ファイルを逆コンパイルする別の方法は、コマンド ラインを使用することです。 この方法には 3つのオプションがあります。 選択するのは完全にユーザー次第です。
JD-CLI を使用する
JD-CLI は、単一のコマンド ライン ステートメントに使用されます。 クラス ファイルの逆コンパイルに必要なコマンドは 1つだけです。
これは、クラス ファイルを逆コンパイルするために使用されるコマンドです。
java - jar jd - cli.jar[class - file]
この逆コンパイラは、intoolswetrust/jd-cli: Command Line Java Decompiler (github.com) をクリックしてダウンロードできます。
FernFlower を使用する
FernFlower は、.class
ファイルを逆コンパイルするためにシステムにダウンロードされる別の逆コンパイラです。
FernFlower を使用できるようにするには、この逆コンパイラを複製する必要があります。 fesh0r/fernflower: FernFlower Java Decompiler の非公式ミラー (github.com) をクリックします。
クローン作成に使用するコマンドは次のとおりです。
git clone https: // github.com/fesh0r/fernflower
cd fernflower
gradle build
ファイルを逆コンパイルするには、このコマンドを使用します。
java - jar fernflower.jar[path to JAR or.class file][directory to store the decompiled files]
JD-GUI を使用して Java クラスを逆コンパイルする
JAR ファイルの逆コンパイルは、.class
ファイルとは異なります。 Java 逆コンパイラは、JAR ファイルを逆コンパイルするために最も一般的に使用されるソフトウェア ツールです。
このツールは簡単にダウンロードできます。 このソフトウェアのさまざまなバージョンは、ここ をクリックして、必要に応じてダウンロードできます。
これらのバージョンの中で、JD-GUI は Java 逆コンパイラの最もよく知られている UI バージョンです。 JD-GUI は、ユーザーが JAR ファイル内の隠しクラス ファイルを表示できるようにするアプリケーションです。
.class
ファイル内のコメントなどの低レベルの情報は表示されなくなることに注意してください。 一部の元の変数名が消える可能性もありますが、それはユーザーがコンパイル中に選択したオプションによって異なります。
コンパイル中にデバッガーが使用された場合、同じソース コードが得られないため、.class
ファイルはより読みやすい形式になりますのでご安心ください。
コメントを使用した単純な Hello World
の例を使用して、この概念をよりよく理解しましょう。
class Example1 {
public static void main(String[] args) {
// This is the comment used.
System.out.println("Hello World");
}
}
現在 JAR ファイルの形式になっているこの HelloWorld
ファイルを逆コンパイルすると、この .class
ファイルが出力として取得されます。
出力:
class Example1
{
public static void main(String[] paramArrayOfString){System.out.println("Hello World");}
}
ご覧のとおり、これら 2つのファイルの明確な違いは、コメントが消えていることと、main
メソッドのパラメーターが目に見える形で変更されていることです。
最終的には、多くのオプションがあるため、Java JAR ファイルを逆コンパイルするためにどのソフトウェア ツールを使用するかはユーザー次第です。
Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.
LinkedIn