DexGuardとは:難読化とAndroidアプリケーションの保護

著者: IT Sectr 公開日: 2026-04-03 読了時間: 8 分

DexGuardは、Guardsquareが提供するAndroidアプリケーションをリバースエンジニアリングから保護するためのソリューションです。このツールは、ビルド段階でDEXバイトコードの難読化、暗号化、プロアクティブな監視を実行します。Guardsquare、2025年によると、この製品は銀行や決済システムを含む10,000以上の商用プロジェクトで使用されています。DexGuardは、アプリケーションのソースコードを変更することなく、逆コンパイルやランタイム攻撃に対する保護を追加することで、ProGuardの機能を拡張します。

主要ポイント

  • DexGuardは、リバースエンジニアリングに対する拡張保護を備えたProGuardの後継となる商用Android難読化ツールです
  • 文字列とクラスの暗号化はビルド段階で行われ、DEXファイルの読み取りセクションを静的解析からアクセス不能にします
  • 整合性制御はランタイムでAPK署名を確認し、改変を検出すると実行を停止します
  • デバッガ、エミュレータ、Fridaの検出により、ランタイムでの動的解析を防ぎます
  • RASPエージェントは、実行中のデバイスでのメモリ操作やシステムコールの傍受を検出します

DexGuardとは?

DexGuardは、ProGuard(Eric Lafortune)を開発した同じチームによって開発された、Androidアプリケーションを難読化および保護するための商用ツールです。この製品は、標準的なProGuardの難読化では不十分なプロジェクト向けの拡張として2012年に登場しました。DexGuardはコンパイル後の段階で動作し、APKパッケージングの前にDEXバイトコードを保護された形式に変換します。

DexGuardのアーキテクチャは、多層防御モデルに基づいています。第1層は、overload inductionを使用したクラス、メソッド、フィールド名の難読化です。第2層は、文字列定数の暗号化と、ランタイムでのスタブメソッドを介したロードです。第3層は、署名のチェックサム検証によるAPK整合性制御です。Guardsquareの技術レポート(2025年)によると、これらの層を組み合わせることで、アプリケーションの分析時間が数分から数週間に増加します。

DexGuardは、アプリケーション、ライブラリ、SDK、Unityゲームプロジェクトなど、すべてのタイプのAndroidプロジェクトをサポートします。このツールは、com.guardsquare.dexguardプラグインを介して標準のGradleパイプラインに統合され、セットアップ後の手動介入は必要ありません。

DexGuardとオープンソースの代替品との主な違いは、アクティブなランタイム保護です。このツールはコードを難読化するだけでなく、アプリケーション実行中にチェックを実行するエージェントを追加します。これにより、Fridaインジェクション、Xposed、JDWPデバッグなどの攻撃を検出し、クラッシュ、偽データの生成、サーバー通知などの対応が可能です。

DexGuardでの難読化の仕組み

DexGuardの難読化プロセスは、各々が特定の攻撃ベクトルを対象とした、バイトコード変換の連続的な段階で構成されています。

Overload inductionを使用した名前難読化

標準的な難読化ツールは、名前を1文字のa、b、cに置き換えます。DexGuardはoverload inductionを使用します。異なるシグネチャを持つ異なるメソッドに同じ短い名前を割り当てます。逆コンパイラはオーバーロードを解決できず、誤ったコードを生成します。Guardsquareのテストによると、名前のオーバーロードにより逆コンパイルエラーが78%増加します。

定数の暗号化

文字列リテラル、URL、APIキー、トークンは、ビルド段階でAES-256を使用して暗号化されます。ランタイムでは、スタブメソッドが使用前に文字列を復号化し、使用後にメモリ領域をゼロにします。これにより、DEXファイル内の文字列の静的表示から保護されます。暗号化がない場合の結果例:攻撃者がstrings dexguard.apkを実行すると、すべてのAPIエンドポイントが平文で表示されます。

コード整合性制御

DexGuardは各DEXファイルのSHA-256ハッシュを計算し、ネイティブレイヤーに値を保存します。アプリケーション起動時に、エージェントは現在のハッシュを参照値と比較します。不一致(改変されたAPK)がある場合、アプリケーションは終了します。さらに、リソースとマニフェストの整合性チェックを設定することもできます。

groovy
// build.gradle(アプリレベル)
buildscript {
    repositories {
        maven { url "https://guard repositories.com/dexguard" }
    }
    dependencies {
        classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
    }
}

apply plugin: "com.guardsquare.dexguard"

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            dexguard {
                config "dexguard-project.txt"
            }
        }
    }
}

DexGuard vs ProGuard:主な違い

両方のツールは同じ会社によって開発されていますが、異なるシナリオを対象としています。ProGuardは、Android SDKにデフォルトで含まれているオープンソースのオプティマイザ兼最小限の難読化ツールです。DexGuardは、無料版では利用できない保護レベルを追加する商用製品です。

特徴ProGuardDexGuard
ライセンスオープンソース(GPL)商用
名前難読化単純な置換Overload induction
文字列暗号化なしAES-256
RASP保護なしあり
Frida検出なしあり
デバッグ保護なしあり
整合性制御なしSHA-256ハッシュ
Unityサポートなしあり

ツールの選択は、保護される情報のクラスによって決まります。通常のモバイルアプリケーションには、ProGuardで十分です。コードの開示が財務上または規制上のリスクを伴う銀行、決済、医療アプリケーションには、DexGuardが推奨されるソリューションです。OWASP Mobile Top 10(2024年)によると、機密データを扱うアプリケーションでの難読化の欠如は、重大なリスクと見なされています。

GradleプロジェクトでのDexGuard設定

DexGuardの統合は、ルートのbuild.gradleにGuardsquareリポジトリを追加することから始まります。バージョン9.xのプラグインは、AGP 7.4–8.5およびGradle 7.6–8.7と互換性があります。保護設定は、個別のdexguard-project.txtファイルで定義され、そこで特定の手法が有効化されます。

groovy
// ルートbuild.gradle
buildscript {
    repositories {
        maven { url "https://maven.guardsquare.com/dexguard" }
    }
}

// dexguard-project.txt — 最小構成
# 文字列の暗号化
@stringEncryption

# Overload inductionによる難読化
@overloadInduction

# APK整合性制御
@integrityCheck

# デバッガとエミュレータからの保護
@antiDebug
@antiEmulator

@stringEncryptionおよび@overloadInductionディレクティブは、商用コードを保護するための鍵です。すべてのアノテーションが有効化されると、ビルド時間が30〜60秒増加しますが、これは保護レベルによって正当化されます。設定はVCSに保存され、リリースビルドにのみ適用されます。

リフレクションを使用するクラスの例外を設定することが重要です。DexGuardはProGuardと同様に、リフレクションを自動的に解析しません。dexguard-project.txtでは、Class.forNameや@JavascriptInterfaceを介してロードされるライブラリクラスに-keepルールを追加する必要があります。

groovy
// dexguard-project.txt — keepルール
# Gsonモデルクラスを保持
-keep class com.example.model.** { *; }

# WebViewインターフェースを保持
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# Firebaseクラッシュレポートを除外
-keep class com.google.firebase.** { *; }

DexGuardの保護手法

DexGuardには20以上の保護手法が含まれており、静的(ビルド段階)と動的(ランタイム)に分けられます。特定の手法の選択は、アプリケーションの脅威モデルによって異なります。

静的保護

リソース暗号化 — 画像、アセット、設定ファイルは、最初のアクセス時に暗号化および復号化されます。制御フローの難読化は、デッドコードを挿入し、命令シーケンスを変更して、jadxなどの逆コンパイラにとってバイトコードを読み取り不能にします。定数の隠蔽は、数値リテラルをランタイムで計算される算術式に置き換えます。

動的保護(RASP)

Runtime Application Self-Protection — アプリケーション内部でランタイム環境の動作を監視するエージェントです。DexGuard RASPは、/proc/self/mapsを介したFrida接続、Xposed Frameworkの存在、デバッガ(JDWP)下での実行、Androidエミュレータ(QEMU)を検出します。脅威が検出されると、クラッシュまたは誤ったデータの生成というポリシーがトリガーされます。OWASP Mobile Security(2025年)の調査によると、RASP保護は典型的な自動化攻撃の94%を阻止しました。

時間ベース攻撃からの保護

DexGuardは、重要なコードセクションにランダムな遅延を追加し、動的解析中のブルートフォース時間を増加させます。パラメータはミリ秒単位で設定され、ビルドごとにランダム化されます。これにより、ファジングツールや自動スキャナの使用が困難になります。

統合ガイドラインと互換性

既存のプロジェクトにDexGuardを統合する際は、ライブラリや一般的なSDKとの後方互換性を考慮する必要があります。一部のライブラリは、リフレクション呼び出しのために極端な難読化と互換性がありません。

一般的なSDKとの互換性

DexGuardは、正しいkeepルールを使用して、Firebase Crashlytics、Google Analytics、Google Play Services、Retrofit、OkHttp、Glide、Gsonと互換性があります。アノテーションとコード生成(Dagger、Hilt、Room、DataBinding)を使用するライブラリは、生成されたクラスの明示的な保存が必要です。Guardsquareチームは、一般的なSDK向けの公式設定サンプルを公開しています。

環境要件

最小要件:Android Gradle Plugin 7.4、Gradle 7.6、JDK 11。DexGuard 9.1はtargetSdk 34とcompileSdk 34をサポートしています。Java 17およびAGP 8.2+には、DexGuardバージョン9.2以上が必要です。このツールは、完全最適化モードのR8と互換性がありません — DexGuardを使用する場合、R8は自動的に無効化されます。

難読化後のテスト

DexGuardを設定した後は、リフレクションと動的クラスローディングの影響を受けるすべてのパスの回帰テストが必要です。リリース前に、保護を有効にしたビルドでUI自動テストを実行することをお勧めします。GuardsquareはDexGuard Tracerユーティリティを提供しており、アプリケーションをクラッシュさせることなくランタイムでClassNotFoundExceptionエラーをログに記録し、keepルールのデバッグを簡素化します。

よくある質問

DexGuardはProGuardとどう違うのですか?

ProGuardは、基本的な名前の置換とバイトコード最適化を備えた無料の難読化ツールです。DexGuardは、AES-256文字列暗号化、名前のoverload induction、ランタイムのRASPエージェント、APK整合性制御、Frida、Xposed、エミュレータ、デバッガの検出を追加します。ProGuardは通常のアプリケーションに十分ですが、DexGuardは銀行やエンタープライズアプリケーション向けです。

DexGuardライセンスの費用はいくらですか?

DexGuardは、年間支払いの商用ライセンスで配布されています。費用はプロジェクト数とサブスクリプションの種類によって異なります。2025年現在、1プロジェクトあたりの基本ライセンスは年間5,000 USDからです。スタートアップ向けには、最大40%割引のパートナーシッププログラムが利用可能です。

DexGuardはKotlinやJetpack Composeで使用できますか?

はい、DexGuardはKotlinとJetpack Composeと完全に互換性があり、コルーチンやComposeコンパイラも含まれます。Kotlinコンパイラによって生成されたクラスには、追加のkeepルールが必要です。Guardsquareは、公式ドキュメントのkotlin-project.txt設定テンプレートを使用することを推奨しています。

DexGuardはAPKサイズを増加させますか?

文字列の暗号化とRASPエージェントの追加により、保護するコードの量に応じてAPKサイズが5〜15%増加します。名前の難読化と制御フローの難読化はサイズを増加させません — 既存の名前を置き換えるだけです。平均して、完全なDexGuard保護を施したAPKは、元のものより8〜12%大きくなります。

デバッグのためにDexGuardを無効にできますか?

はい、保護設定はリリースビルドタイプにのみ適用されます。デバッグビルドの場合、DexGuardは自動的に暗号化とRASPチェックを無効にします。開発者は、gradle.propertiesのguard.force.enable=trueパラメータを使用して、保護されたビルドをテストするためにデバッグモードでDexGuardを強制的に有効にできます。

まとめ

  • DexGuardは、アンチリバースエンジニアリング手法の完全なセットでProGuardの機能を拡張するAndroid向け商用保護ツールです
  • Overload inductionによる難読化は、解決不能なメソッドオーバーロードを生成することで、逆コンパイルされたコードを機能不全にします
  • AES-256による文字列定数とリソースの暗号化は、jadxやstringsによるDEXファイルの静的解析を阻止します
  • RASPエージェントはランタイムでFrida、Xposed、JDWPデバッガ、エミュレータを検出し、脅威検出時にクラッシュを実行します
  • ネイティブレイヤーでのSHA-256ハッシュによるAPK整合性制御は、アプリケーションの改変バージョンの実行を防ぎます
  • @stringEncryption、@overloadInduction、@antiDebugアノテーションを使用したGradleプロジェクトへの統合には10〜15分のセットアップが必要です
  • DexGuardは、コードの侵害が財務リスクを伴う銀行、決済、医療Androidアプリケーションに推奨されるツールです

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください