🍵

Docker環境でJavaをデコンパイルする。

2024/10/05に公開

Windows11のDocker環境上でJava Decompiler(https://github.com/eikendev/java-decompiler)を使ってjarをデコンパイルします。
※以下のJavaのデコンパイルツールが使われています。

  • CFR
  • Fernflower
  • Krakatau
  • Procyon

環境

Windows 11 Pro 23H2
WLS 2.1.5.0(Ubuntu 22.04.1 LTS)
Docker Desktop 4.29.0
Visual Studio Code

1.docker runコマンドで実行する場合

①フォルダ構成

以下のフォルダ構成で実行します。

java-deco    # ルート(名前は任意)
 ├─infiles   # デコンパイルするjarを格納
 │  └xxx.jar
 ├─libfiles  # 参照しているjarを格納(空でok)
 └─outfiles  # デコンパイル後のファイルが格納される

②作業フォルダ作成

以下のコマンドを実行し、作業フォルダを作成します。

PowerShell
mkdir infiles  ;`
mkdir libfiles ;`
mkdir outfiles

③デコンパイル実行

以下のコマンドを実行し、Dockerのコンテナを起動します。コンテナが起動するとデコンパイルが実行され、outfilesにデコンパイルツール毎(CFRなど)のjavaのモジュールが出力されます。

PowerShell
docker run --rm `
-v $PWD/infiles:/infiles `
-v $PWD/outfiles:/outfiles `
-v $PWD/libfiles:/libfiles `
ghcr.io/eikendev/java-decompiler:latest

2.docker composeコマンドで実行する場合

以下のフォルダ構成で実行します。

java-deco       # ルート(名前は任意)
 ├─infiles      # デコンパイルするjarを格納
 │  └xxx.jar
 ├─libfiles     # 参照しているjarを格納(空でok)
 ├─outfiles     # デコンパイル後のファイルが格納される
 └─compose.yaml

②作業フォルダ・ファイル作成

以下のコマンドを実行し、作業フォルダ・ファイルを作成します。

PowerShell
mkdir infiles  ;`
mkdir libfiles ;`
mkdir outfiles ;`
New-Item compose.yaml
code compose.yaml
compose.yaml
services:
  javad:
    image: ghcr.io/eikendev/java-decompiler:latest
    volumes:
      - ./infiles:/infiles
      - ./libfiles:/libfiles
      - ./outfiles:/outfiles

③デコンパイル実行

以下のコマンドを実行し、Dockerのコンテナを起動します。コンテナが起動するとデコンパイルが実行され、outfilesにデコンパイルツール毎(CFRなど)のjavaのモジュールが出力されます。

PowerShell
docker compose up -d

Discussion