jadx

Android アプリの APK や DEX を Java のソースコードに戻して読むデコンパイラ。画面から読む GUI 版と、コマンドラインで一括出力する版があります。

cat jadx/meta.yml確認日 2026-11-03

安全性

影響範囲 手元だけ自分の端末の中で完結し、外には何も送らない
管理者権限
不要
検証環境
不要

使い方

用途
診断・監査
難易度
中級
形態
デスクトップアプリ
対応環境
Windows / macOS / Linux

信頼性

リポジトリ
skylot/jadx
ライセンス
自由に使えるApache-2.0
GitHub
スター51,7392026-11-10 時点
メンテ状況
更新が続いている最終更新 2026-11-08
目次
  1. はじめに
  2. jadx でできること
  3. 仕組み
  4. 外と行う通信
  5. 必要なもの
  6. 安全な試し方:自作アプリの APK を読む
  7. 主な使い方
  8. MobSF・Ghidra との違い
  9. 注意点
  10. 次に読む
  11. 出典

jadx を使うと、Android アプリのファイル(APK など)を Java のソースコードに戻して、画面で読めます。この記事では、自分で作ったアプリが、配布する形でどう見えているかを確かめる使い方を説明します。

この記事は、Android アプリを作っていて、公開前に「APK の中身から何が読み取れるか」を自分の目で確かめたい人に向けています。読み終えると、次のことができるようになります。

  • jadx をインストールして、GUI 版とコマンドライン版を起動する
  • 自作アプリの APK を開き、マニフェストやコードを読む
  • 文字列を検索して、埋め込んだ API キーや通信先が残っていないかを調べる

jadx でできること

jadx は、Dex 形式(Android アプリの実行コード)から Java のコードを作るデコンパイラです。公式 README によると、次のことができます。

  • APK、dex、aab、apks、apkm、xapk、zip から Java のコードを作る
  • jar、class、aar、smali も扱う
  • AndroidManifest.xml などのリソースを resources.arsc から読める形に戻す
  • 読みにくい名前を付け直す難読化解除の機能を持つ

GUI 版には、構文の色分け、宣言へのジャンプ、使用箇所の検索、全文検索があります。smali のデバッガーもあります。

しないことjadx は、アプリの危険度を判定しません。何が問題かは、戻したコードを読んで自分で判断します。また、README は「ほとんどの場合、100% は戻せず、エラーが出る」と明記しています。戻したコードは元のソースそのものではないので、参考として読みます。

仕組み

文章で読む(くわしい説明)

jadx で読むときの妨げになるのは、攻撃側がコードや文字列を隠す技法(Mobile の T1406 Obfuscated Files or Information)で、MITRE は、ペイロードやファイルの中身を暗号化や符号化などで隠すことや、防御側が見つける手がかりになる平文の文字列を符号化して隠すことを挙げています。正規のアプリでも、Android の公式文書によると、R8 が DEX ファイルを小さくするためにクラス・フィールド・メソッドの名前を短くします(例:com.example.MyActivity が a.b.a)。jadx の --deobf は、既定で 3 文字より短い名前と 64 文字より長い名前を、jadx が決めた名前に付け直します。実行ファイルを圧縮や暗号化で包むパッカー(T1406.002 Software Packing)が使われていると、読み込みでつまずくことがあり、jadx の公式 Troubleshooting は、一部のパッカーが dex のチェックサムを改ざんするためだと書いています。MITRE の例の AndroidOS/MalLocker.B は、暗号化したコードを Assets ディレクトリに置き、独自の復号の処理で .dex を組み立てるので、そのような .dex は、APK を戻しただけでは読めないおそれがあります。文字列が符号化されていれば、全文検索で http や key を探しても当たらないことがあり、見つからなかったことは、入っていない証拠になりません。

外と行う通信

調べた範囲では、次のとおりです。

  • GUI 版は、起動時に新しい版を確かめる設定が既定で有効です。確認のコードは、GitHub の API(api.github.com)で最新リリースを問い合わせます。
  • プラグインを管理する plugins コマンドには、公開されているプラグインの一覧を調べたり、入れたり更新したりするオプションがあります。使ったときだけ、外からプラグインを取得します。
  • 開いた APK の内容を、jadx が外へ送る処理は見つかりませんでした。ただし、コマンドライン版が外へ通信するかどうかは、確かめられていません。

更新確認を止めたいときは、GUI の設定画面で「Check for updates on startup」のチェックを外します。

必要なもの

README に書かれている条件は次のとおりです(v1.5.6 時点)。

項目 内容
Java 64 ビットの Java 11 以降。with-jre と名前に付いた配布ファイルは、Java の入手が不要です
配布ファイル jadx-<バージョン>.zip、jadx-gui-<バージョン>-win.zip、jadx-gui-<バージョン>-with-jre-win.zip
パッケージ Arch Linux(pacman)、macOS(Homebrew)、Flathub
ソースからのビルド JDK 17 以上

安全な試し方:自作アプリの APK を読む

  1. 公式のリリースページから、自分の環境に合う zip を入手します。Windows で Java を入れたくないときは、with-jre の付いた zip を選びます。
  2. zip を展開します。bin フォルダに、コマンドライン版の jadx と GUI 版の jadx-gui が入っています。Windows 向けの配布ファイルは、展開した中の jadx-gui-<バージョン>.exe を実行します。
  3. 自分でビルドした APK を用意します。アプリの本物のリリースビルドを使うと、配布するファイルと同じ状態を確かめられます。
  4. jadx-gui を起動し、APK を開きます。
  5. AndroidManifest.xml を開き、宣言した権限や設定が意図どおりかを確かめます。
  6. 全文検索で、http、api、key、token、password などの語を探します。コードに埋め込んだ秘密や、テスト用の通信先が残っていれば見つかります。
  7. 見つけたら、元のソースコードに戻って直します。キーなどの秘密は、アプリに埋め込まず、サーバー側で持つ形に変えます。

コマンドラインで一括して書き出すこともできます。

  1. 出力先を指定して実行します。

    jadx -d out app.apk
  2. out フォルダにできたファイルを、好きなエディターや検索ツールで調べます。

名前が短く読みにくいときは、--deobf を付けると、名前を付け直します。

主な使い方

オプション 内容
-d、--output-dir 出力先のフォルダ
-r、--no-res リソースを戻さない
-s、--no-src ソースコードを戻さない
-e、--export-gradle Gradle プロジェクトとして保存する
--deobf 難読化された名前を付け直す
--show-bad-code うまく戻せなかったコードも表示する
-m、--decompilation-mode 出力の形。auto、restructure、simple、fallback から選ぶ
--single-class 1 つのクラスだけを戻す
-j、--threads-count 処理のスレッド数。既定は CPU のスレッド数の半分

全部のオプションは、jadx --help で確かめられます。うまく戻らないときの対処は、公式 Wiki の Troubleshooting Q&A にまとまっています。

MobSF・Ghidra との違い

jadx MobSF Ghidra
主な対象 Android アプリの Dex、Java のバイトコード Android・iOS・Windows のアプリ コンパイル済みの実行ファイル全般
結果 戻した Java のコード 問題になりそうな箇所の一覧 逆アセンブルと逆コンパイルの結果
判断する人 自分 ツールが指摘し、自分が確かめる 自分

まず MobSF で一覧を作り、気になった箇所を jadx でコードに当たると、確かめやすくなります。

注意点

  • 読むのは、自分が作ったアプリ、または公開されている練習用のアプリだけにしてください。他人のアプリを解析する前に、利用規約や使用許諾契約を確認してください。リバースエンジニアリングを禁じている場合があります。判断に迷うときは、自分のアプリと、解析してよいと明記された教材だけを使ってください。
  • 出どころの分からない APK を開くときは、普段使いのパソコンとは分けた環境を使いましょう。jadx はアプリを実行しませんが、ファイルの読み込みで問題が起きる可能性はあります。v1.5.6 のリリースノートには、zip の項目の扱いなどのセキュリティ修正が書かれています。新しい版を使ってください。
  • jadx には、zip や XML の安全確認を切る環境変数(JADX_DISABLE_ZIP_SECURITY など)があります。必要がなければ設定しないでください。
  • 戻したコードにはエラーや不完全な部分が出ます。変数名やコメントは元のソースと違います。
  • プラグインは外から取得して追加するプログラムです。入れる前に、提供元を確認してください。
  • 本体は、公式の GitHub リリースページか、README に載っているパッケージから入手してください。

次に読む

jadx で読むときの妨げになる、コードや文字列の隠し方

名前が短くなっているとき(正規のアプリでも)

  1. R8 が、クラス・フィールド・メソッドの名前を短くするAndroid の公式文書によると、DEX ファイルを小さくするため。例: com.example.MyActivity が a.b.a
  2. jadx の --deobf は、名前を付け直す既定で、3 文字より短い名前と 64 文字より長い名前を、jadx が決めた名前にする

ATT&CK T1406Obfuscated Files or Information(Mobile)

攻撃側の技法
ペイロードやファイルの中身を、暗号化や符号化などで隠す。防御側が見つける手がかりになる平文の文字列を、符号化して隠すことも挙げられている(MITRE)

ATT&CK T1406.002Obfuscated Files or Information: Software Packing

攻撃側の技法
実行ファイルを、圧縮や暗号化で包む(パッカー)
jadx で起きること
読み込みでつまずくことがある。jadx の公式 Troubleshooting は、一部のパッカーが dex のチェックサムを改ざんするためだと書いている

MITRE の例:AndroidOS/MalLocker.B

暗号化したコードを Assets ディレクトリに置き、独自の復号の処理で .dex を組み立てます。そのような .dex は、APK を戻しただけでは読めないおそれがあります。

見つからなかったとき

文字列が符号化されていれば、全文検索で http や key を探しても当たらないことがあります。見つからなかったことは、入っていない証拠になりません。

出典

  1. 公式リポジトリ README(機能・ダウンロード・使い方・オプション)github.com/skylot/jadx/blob/master/README.md
  2. ライセンス(Apache License 2.0)github.com/skylot/jadx/blob/master/LICENSE
  3. リリース:v1.5.6(配布ファイルとセキュリティ修正)github.com/skylot/jadx/releases/tag/v1.5.6
  4. ソース:更新確認のコード(JadxUpdate.kt)github.com/skylot/jadx/blob/master/jadx-gui/src/main/java/jadx/gui/update/JadxUpdate.kt
  5. ソース:GUI の設定の既定値(JadxSettingsData.java)github.com/skylot/jadx/blob/master/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsData.java
  6. ソース:GUI の設定画面(JadxSettingsWindow.java)github.com/skylot/jadx/blob/master/jadx-gui/src/main/java/jadx/gui/settings/ui/JadxSettingsWindow.java
  7. 公式 Wiki:Troubleshooting Q&A(パッカーによる dex チェックサムの改ざん)github.com/skylot/jadx/wiki/Troubleshooting-Q&A
  8. Android 公式:コードの縮小・難読化・最適化(R8)developer.android.com/build/shrink-code
  9. MITRE ATT&CK T1406 Obfuscated Files or Information(Mobile)attack.mitre.org/techniques/T1406/
  10. MITRE ATT&CK T1406.002 Obfuscated Files or Information Software Packing(Mobile)attack.mitre.org/techniques/T1406/002/

確認日 2026-11-03

似たツール

Ghidra

影響範囲 手元だけ
NationalSecurityAgency/ghidra

米国 NSA が開発し、オープンソースで無料公開しているリバースエンジニアリングの道具一式。コンパイル済みのプログラムを逆アセンブル・逆コンパイルして、中身を読めるようにします。

用途
学習
形式
デスクトップアプリ
難易度
上級
ライセンス
自由に使えるApache-2.0
分類
リバースエンジニアリング/学習・演習環境
更新が続いているスター99,232最終更新 2026-11-10
Ghidraの解説を読む

mitmproxy

影響範囲 外に届く
mitmproxy/mitmproxy

ブラウザやアプリと Web サーバーの間に入り、HTTPS も含めた HTTP の通信を記録・確認・書き換えできるプロキシ。

用途
診断・監査
形式
コマンドライン
難易度
中級
ライセンス
自由に使えるMIT
分類
Web セキュリティ/ネットワーク
更新が続いているスター46,785最終更新 2026-11-09
mitmproxyの解説を読む

MobSF

影響範囲 手元だけ
MobSF/Mobile-Security-Framework-MobSF

Android や iOS のアプリを読み込んで、危ない設定や権限、コードの問題を一覧にするモバイルアプリ診断ツール。ブラウザから操作します。

用途
診断・監査
形式
Web サービス
難易度
中級
ライセンス
条件つきGPL-3.0
分類
リバースエンジニアリング/脆弱性スキャン
更新が続いているスター22,187最終更新 2026-11-10
MobSFの解説を読む