HOWTO · Java

Java クラスを逆コンパイルする

この記事では、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 ファイルを逆コンパイルするためにどのソフトウェア ツールを使用するかはユーザー次第です。