Exploiting a debuggeable application

デバッグ可能なアプリケーションの悪用

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

ルートおよびデバッグ可能なチェックをバイパスする

この投稿のこのセクションは、https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0からの要約です。

Androidアプリをデバッグ可能にし、チェックをバイパスする手順

アプリをデバッグ可能にする

https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0に基づくコンテンツ

  1. APKを逆コンパイルする:

    • APKを逆コンパイルするためにAPK-GUIツールを使用します。

    • _android-manifest_ファイルにandroid:debuggable=trueを挿入してデバッグモードを有効にします。

    • 修正されたアプリケーションを再コンパイル、署名、およびzipalignします。

  2. 修正されたアプリケーションをインストールする:

    • コマンドを使用します:adb install <application_name>

  3. パッケージ名を取得する:

    • サードパーティアプリケーションをリストアップし、パッケージ名を見つけるためにadb shell pm list packages –3を実行します。

  4. アプリをデバッガー接続を待機するように設定する:

    • コマンド:adb shell am setup-debug-app –w <package_name>

    • 注意: このコマンドは、アプリケーションを起動する前に毎回実行する必要があり、デバッガーを待機させることを確認します。

    • 永続化するには、adb shell am setup-debug-app –w -–persistent <package_name>を使用します。

    • すべてのフラグを削除するには、adb shell am clear-debug-app <package_name>を使用します。

  5. Android Studioでデバッグの準備をする:

    • Android Studioで、_File -> Open Profile or APK_に移動します。

    • 再コンパイルされたAPKを開きます。

  6. 主要なJavaファイルにブレークポイントを設定する:

    • MainActivity.java(特にonCreateメソッド)、b.java、およびContextWrapper.javaにブレークポイントを設定します。

チェックをバイパスする

アプリケーションは、特定のポイントでデバッグ可能かどうかを確認し、ルート化されたデバイスを示すバイナリをチェックします。デバッガーを使用して、アプリ情報を変更し、デバッグ可能なビットを解除し、検索されるバイナリの名前を変更してこれらのチェックをバイパスできます。

デバッグ可能なチェックの場合:

  1. フラグ設定を変更する:

    • デバッガーコンソールの変数セクションで、this mLoadedAPK -> mApplicationInfo -> flags = 814267974に移動します。

    • 注意: flags = 814267974のバイナリ表現は11000011100111011110であり、「Flag_debuggable」がアクティブであることを示します。

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

これらの手順は、アプリケーションをデバッグできるようにし、デバッガーを使用して特定のセキュリティチェックをバイパスできるようにすることで、アプリケーションの動作をより詳細に分析または変更するのを容易にします。

ステップ2では、バイナリ表現で814267972にフラグ値を変更する必要があります。これはバイナリ表現で110000101101000000100010100として表されます。

脆弱性の悪用

ボタンとテキストビューを含む脆弱なアプリケーションを使用してデモが提供されました。最初に、アプリケーションは「Crack Me」と表示されます。ソースコードを変更せずに、ランタイムでメッセージを「Try Again」から「Hacked」に変更することを目指します。

脆弱性のチェック

  • apktoolを使用してアプリケーションを逆コンパイルしてAndroidManifest.xmlファイルにアクセスしました。

  • AndroidManifest.xmlにandroid_debuggable="true"が存在すると、アプリケーションがデバッグ可能であり、悪用の可能性があることを示します。

  • apktoolはコードを変更せずにデバッグ可能な状態を確認するためにのみ使用されることに注意してください。

セットアップの準備

  • デバイスエミュレータを起動し、脆弱なアプリケーションをインストールし、Dalvik VMポートをリッスンしているポートを特定するためにadb jdwpを使用しました。

  • JDWP(Java Debug Wire Protocol)は、VMで実行中のアプリケーションのデバッグを可能にするために一意のポートを公開することで、VM内のアプリケーションのデバッグを可能にします。

  • リモートデバッグのためにポートフォワーディングが必要であり、その後、JDBをターゲットアプリケーションにアタッチしました。

ランタイムでコードを注入する

  • ブレークポイントを設定し、アプリケーションのフローを制御して悪用を行いました。

  • classesmethods <class_name>などのコマンドを使用してアプリケーションの構造を明らかにしました。

  • onClickメソッドでブレークポイントを設定し、その実行を制御しました。

  • localsnextsetコマンドを使用してローカル変数を検査および変更し、特に「Try Again」メッセージを「Hacked」に変更しました。

  • 修正されたコードをrunコマンドを使用して実行し、アプリケーションの出力をリアルタイムで変更しました。

この例は、デバッグ可能なアプリケーションの動作を操作する方法を示し、アプリケーションのコンテキストでデバイス上でシェルアクセスを取得するなどのより複雑な悪用の可能性を示しています。

参考文献

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

Last updated