JADX

Build status Alerts from lgtm.com semantic-release Maven Central License

jadx -DexからJavaへの逆コンパイラ

AndroidのDexファイルやApkファイルからJavaのソースコードを生成するためのコマンドラインとGUIツール

ほとんどの場合、 jadxはコードの100%をすべて逆コンパイルできないため、エラーが発生することに注意してください。回避策については、トラブルシューティングガイドを確認してください

Main features:

  • APK,dex,aar,aab,zip ファイルから Dalvik バイトコードを java クラスにデコンパイルする。
  • AndroidManifest.xml およびその他のリソースを resources.arsc します
  • deobfuscator included

jadx-gui features:

  • デコンパイルされたコードをハイライトして表示する
  • 宣言にジャンプする
  • find usage
  • フルテキスト検索
  • smaliデバッガー、セットアップと使用法についてwikiページを確認してください

Jadx-guiキーバインディングはここにあります

ここで実際のこれらの機能を参照してください:jadx-gui機能の概要

Download

zipファイルをダウンロードして解凍した後、 bin ディレクトリに移動して次のコマンドを実行します。

  • jadx -コマンドラインバージョン
  • jadx-gui -UIバージョン

Windowsでは、ダブルクリックして .bat ファイルを実行します
注: Java11以降の64ビットバージョンがインストールされていることを確認してください。Windowsの場合は、oracle.comからダウンロードできます(x64インストーラを選択)。

Install

  1. Arch linux
        sudo pacman -S jadx
  2. macOS
        brew install jadx

jadxをライブラリとして使用する

あなたはあなたのJavaプロジェクトでjadxを使うことができます、wikiページで詳細をチェックしてください

ソースからのビルド

JDK 8 以上がインストールされている必要があります。

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist

(Windowsでは、。 gradlew.bat の代わりに ./gradlew を使用します)

jadxを実行するためのスクリプトは、 build/jadx/bin に配置され、build build/jadx-<version>.zip にもパックされます。

Usage

jadx[-gui] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab)
options:
  -d, --output-dir-出力ディレクトリ
  -ds, --output-dir-src-ソースの出力ディレクトリ
  -dr, --output-dir-res-リソースの出力ディレクトリ
  -r, --no-res-リソースをデコードしません
  -s, --no-src-ソースコードを逆コンパイルしません
  --single-class-単一のクラス、フルネーム、rawまたはエイリアスを逆コンパイルします
  --single-class-output-単一のクラスを逆コンパイルする場合の書き込み用のファイルまたはディレクトリ
  --output-format-「java」または「json」にすることができます。デフォルト:java
  -e, --export-gradle--androidgradleプロジェクトとして保存
  -j, --threads-count-処理スレッド数、デフォルト:4
  -m, --decompilation-mode-コード出力モード:
                                         'auto' - trying best options (default)
                                         'restructure' - restore code structure (normal java code)
                                         'simple' - simplified instructions (linear, with goto's)
                                         'fallback' - raw instructions without modifications
  --show-bad-code                     - show inconsistent code (incorrectly decompiled)
  --no-imports                        - disable use of imports, always write entire package name
  --no-debug-info                     - disable debug info
  --add-debug-lines                   - add comments with debug line numbers if available
  --no-inline-anonymous               - disable anonymous classes inline
  --no-inline-methods                 - disable methods inline
  --no-replace-consts                 - don't replace constant value with matching constant field
  --escape-unicode-文字列内の非ラテン文字をエスケープします(\ uを使用)
  --respect-bytecode-access-modifiers-元のアクセス修飾子を変更しないでください
  --deobf-難読化解除をアクティブにします
  --deobf-min-名前の最小の長さ、短い場合は名前が変更され、デフォルト:3
  --deobf-max-名前の最大長、長い場合は名前が変更され、デフォルト:64
  --deobf-cfg-file --deobfuscationマップファイル、デフォルト:「。jobf」拡張子を持つ入力ファイルと同じディレクトリと名前
  --deobf-cfg-file-mode-ハンドルの難読化解除マップファイルのモードを設定します。
                                         'read' - read if found, don't save (default)
                                         'read-or-save' - read if found, save otherwise (don't overwrite)
                                         'overwrite' - don't read, always save
                                         'ignore' - don't read and don't save
  --deobf-rewrite-cfg                 - set '--deobf-cfg-file-mode'から'overwrite'(非推奨)
  --deobf-use-sourcename-ソースファイル名をクラス名エイリアスとして使用します
  --deobf-parse-kotlin-metadata-kotlinメタデータをクラス名とパッケージ名に解析します
  --use-kotlin-methods-for-var-names-kotlin組み込みメソッドを使用して、変数の名前を変更します。値:無効、適用、適用と非表示、デフォルト:適用
  --rename-flags-オプションを修正します(カンマ区切りのリスト):
                                         'case' - fix case sensitivity issues (according to --fs-case-sensitive option),
                                         'valid' - rename java identifiers to make them valid,
                                         'printable' - remove non-printable chars from identifiers,
                                        or single 'none' - to disable all renames
                                        or single 'all' - to enable all (default)
  --fs-case-sensitive-ファイルシステムを大文字と小文字を区別して扱います。デフォルトではfalseです。
  --cfg-メソッド制御フローグラフをドットファイルに保存します
  --raw-cfg --saveメソッドの制御フローグラフ(raw命令を使用)
  -f, --fallback --set'--decompilation-mode' to'fallback'(非推奨)
  --use-dx-dx/d8を使用してJavaバイトコードを変換します
  --comments-level-コードコメントレベルを設定します。値:エラー、警告、情報、デバッグ、ユーザーのみ、なし、デフォルト:情報
  --log-level-ログレベルを設定します。値:quiet、progress、error、warn、info、debug、default:progress
  -v, --verbose --verbose出力(--log-levelをDEBUGに設定)
  -q, --quiet-出力をオフにします(--log-levelをQUIETに設定します)
  --version-jadxバージョンを印刷します
  -h, --help-このヘルプを印刷します

Plugin options (-P<name>=<value>):
  1) dex-input (Load .dex and .apk files)
    -Pdex-input.verify-checksum       - Verify dex file checksum before load, values: [yes, no], default: yes
  2) java-convert (Convert .jar and .class files to dex)
    -Pjava-convert.mode               - Convert mode, values: [dx, d8, both], default: both
    -Pjava-convert.d8-desugar         - Use desugar in d8, values: [yes, no], default: no

Examples:
  jadx -d out classes.dex
  jadx --rename-flags "none" classes.dex
  jadx --rename-flags "valid, printable" classes.dex
  jadx --ログレベルのエラーapp.apk
  jadx -Pdex-input.verify-checksum=no app.apk

これらのオプションは、コマンドラインから実行するjadx-guiでも機能し、環境設定ダイアログのオプションを上書きします。

Troubleshooting

wikiページのトラブルシューティングQ&Aを確認してください

Contributing

このプロジェクトを支援するために、あなたは

  • あなたにとって重要な新機能/最適化についての考えを投稿してください。
  • 逆コンパイルの問題を送信します。続行する前に読んでください:未解決の問題
  • プルリクエストを開きます。次のルールに従ってください。プルリクエストプロセス

Apache2.0ライセンスの下でライセンス供与