logo

Java デコンパイラ

Java デコンパイラは、クラス ファイルを入力として受け取り、Java ソース コードを出力として生成する特殊なタイプの逆コンパイラです。逆コンパイルは、コンパイルの逆のプロセスです。したがって、逆コンパイラはソース コードのレプリカを生成しません。これは、プログラムのコンパイル中にソース コードから少しの情報が失われるためです。

ただし、Java コードは構造化されていますが、バイト コードは構造化されていないなど、多くの複雑さがあります。さらに、変換は 1 対 1 ではありません。2 つの異なる Java プログラムが同一のバイト コードを生成する場合があります。

Java文字列を連結する

次の Java デコンパイラが利用可能です。

  • DJ Java デコンパイラ
  • JRリバースプロ
  • ユダヤ人
  • JD-CORE/JD-GUI/JD Eclipse

JAD逆コンパイラ

JAD はコマンドライン アプリケーションです。 C++ で書かれています。主な機能は、.class ファイルを逆アセンブルすることです。 JAD はコンソールからデプロイでき、Java クラスをソース コードに逆コンパイルします。このようにして、開発者は Java ランタイム ライブラリのコードを深く調べ、行を美しくして再コンパイルの準備をすることもできます。特に「-o」(確認せずに出力ファイルを上書きする) パラメータが使用されている場合、ソース コード ファイルが上書きされる危険があります。

2 つの数値を加算する簡単な Java プログラムを作成してみましょう。

 import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } } 

手順に従って、.class を読み取り可能な Java ソース コードに変換します。ここでは JAD デコンパイラを使用しています。

ステップ1: JAD ツールを次からダウンロードします。 https://bit.ly/2XuRzT5

Java文字列cmp

ステップ2: zip ファイルを解凍し、jad.exe を入手します。

Java デコンパイラ

ステップ 3: zip ファイルを解凍したのと同じフォルダーに .java ファイル (DecompilerDemo.java) を作成します。

ステップ 4: .java ファイルをコンパイルして実行します。それぞれのフォルダーに .class ファイルが生成されます。

Java デコンパイラ 2

ステップ5: 次に、.class ファイルと jad アプリケーションを別のフォルダーに移動します。

Java デコンパイラ 3

ステップ6: 次のコマンドを入力します。 jad デコンパイラデモ

Java デコンパイラ 4

上記のコマンドにより、それぞれのフォルダーに .jad ファイルが生成されます。

Java デコンパイラ 5

ステップ 7: 次のコマンドを入力します。 jad ?s java DecompilerDemo

Java デコンパイラ 6

同じフォルダーに .java ファイルが生成されます。

Java デコンパイラ 7

DecompilerDemo.java を開くと、次のコードが表示されます。

 // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } } 

書き込まれた .java ファイルは生成された .java ファイルとは異なりますが、同じ出力が得られることがわかります。

Javaクラスファイル逆アセンブラ

常にVerilog

javapコマンド

ジャバップ は、JDK に付属する Java コマンド ライン ツールです。これは、クラス ファイルを逆アセンブルし、そのクラスの人が読めるバージョンを出力するために使用されます。その出力は、使用されるオプションによって異なります。オプションを使用せずに、javap は、渡されたクラスのパッケージ、保護フィールドおよびパブリックフィールド、およびメソッドを出力します。あ ジャバップ また、クラスの作成に使用したソース コードがない場合に、そのクラスで使用できるメソッドを確認するためにも使用されます。 javap コマンドの一般的な形式は次のとおりです。

 javap [options] filename 

オプション

javap コマンドでは、多くのオプションが利用可能です。そのうちのいくつかは次のとおりです。

    -c:逆アセンブルされたコードを出力します。-p:すべてのクラスとメンバーが表示されます。-s:内部の型署名を出力します。-定数:静的な最終定数を示します。

javapコマンドを使用してクラスファイルを逆アセンブルする

 class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } } 

上記プログラムのクラスファイルを生成し、以下のコマンドでクラスファイルを逆アセンブルします。

 javap -c -p DisassembleDemo 

出力

Javaの文字列で

次の出力は、クラス ファイルの内容を示しています。

Java デコンパイラ 8

ただし、javap コマンドを使用して Java ソース コードを取得することはできません。そのため、.class ファイルを .java ファイルに変換する逆コンパイラが数多く存在します。