Objection Tutorial

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

はじめに

objection - ランタイムモバイル探索

Objection は、Frida によって提供されるランタイムモバイル探索ツールキットです。これは、脱獄やルート化されたモバイルデバイスを必要とせずに、モバイルアプリケーションとそのセキュリティ姿勢を評価するのを助けることを目的に構築されました。

注意: これは脱獄/ルートバイパスの一形態ではありません。objectionを使用することで、直面している適用可能なサンドボックスによって課せられたすべての制限に依然として制約されます。

概要

objection目標は、ユーザーがFridaが提供する主要なアクションを呼び出すことを可能にすることです。**そうでなければ、ユーザーはテストしたい各アプリケーションのために単一のスクリプトを作成する必要があります。

チュートリアル

このチュートリアルでは、ここからダウンロードできるAPKを使用します:

またはそのオリジナルリポジトリから(app-release.apkをダウンロード)

インストール

bash
pip3 install objection

接続

通常のADB接続を行い、デバイスでfridaサーバーを起動します(クライアントとサーバーの両方でfridaが動作していることを確認します)。

ルート化されたデバイスを使用している場合、_--gadget_オプション内でテストしたいアプリケーションを選択する必要があります。この場合:

bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

基本アクション

このチュートリアルでは、objectionのすべてのコマンドはリストされず、私がより便利だと感じたものだけが含まれます。

環境

パスワードやパスなどの興味深い情報は、環境内に見つけることができます。

bash
env

Fridaに関する情報

bash
frida

アップロード/ダウンロード

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

frida スクリプトのインポート

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

ルート検出

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Exec Command

bash
android shell_exec whoami

スクリーンショット

bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

静的分析を動的に

実際のアプリケーションでは、静的分析のおかげで、この部分で発見されたすべての情報を知っておくべきです。それでも、この方法では、クラス、メソッド、およびエクスポートされたオブジェクトの完全なリストのみが表示されるため、新しい何かを見ることができるかもしれません。

これは、アプリの可読なソースコードを取得できない場合にも役立ちます。

アクティビティ、レシーバー、およびサービスのリスト

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

Fridaが見つからない場合、エラーが発生します

現在のアクティビティを取得する

bash
android hooking get current_activity

クラスの検索

アプリケーション内のクラスを探し始めましょう。

bash
android hooking search classes asvid.github.io.fridaapp

クラスのメソッドを検索する

では、クラス MainActivity: 内のメソッドを抽出しましょう。

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

クラスの宣言されたメソッドとそのパラメータのリスト

クラスのメソッドが必要とするパラメータを確認しましょう:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

クラスのリスト

現在のアプリケーション内で読み込まれたすべてのクラスをリストすることもできます:

bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

これは、クラスのメソッドをフックしたいが、クラスの名前しか知らない場合に非常に便利です。この関数を使用して、クラスを所有するモジュールを検索し、そのメソッドをフックすることができます。

フックが簡単

メソッドのフック(監視)

アプリケーションのソースコードから、MainActivity関数_sum()_が毎秒実行されていることがわかります。関数が呼び出されるたびに、すべての可能な情報(引数、戻り値、バックトレース)をダンプしてみましょう。

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

クラス全体をフック(監視)する

実際、クラス MainActivity のすべてのメソッドが非常に興味深いと思いますので、すべてフックしましょう。注意してください、これによりアプリケーションがクラッシュする可能性があります。

bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

アプリケーションをフックされたクラスで操作すると、各関数が呼び出されるタイミング、その引数、および戻り値が表示されます。

関数のブール戻り値を変更する

ソースコードから、関数 checkPinString を引数として受け取り、boolean を返すことがわかります。関数を常にtrueを返すようにしましょう:

今、PINコードのテキストボックスに何かを書き込むと、何でも有効であることがわかります:

クラスインスタンス

特定のJavaクラスのライブインスタンスを検索して印刷します。これは完全修飾クラス名で指定されます。これは、発見されたobjectionの文字列値を取得しようとした結果であり、通常はオブジェクトのプロパティ値を含むものです。

android heap print_instances <class>

Keystore/Intents

キーストアとインテントを使用して遊ぶことができます:

bash
android keystore list
android intents launch_activity
android intent launch_service

メモリ

ダンプ

bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

リスト

bash
memory list modules

リストの下部にfridaが表示されています:

fridaが何をエクスポートしているか確認しましょう:

検索/書き込み

objectionを使用してメモリ内を検索および書き込むこともできます:

bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

SQLite

SQLiteデータベースと対話するには、コマンドsqliteを使用できます。

Exit

bash
exit

Objectionでの欠点

  • フッキングメソッドは時々アプリケーションをクラッシュさせます(これはFridaのせいでもあります)。
  • クラスのインスタンスを使用してインスタンスの関数を呼び出すことができません。また、新しいクラスのインスタンスを作成してそれを使用して関数を呼び出すこともできません。
  • アプリケーションで使用されている一般的な暗号メソッドをフックして、暗号化されたテキスト、プレーンテキスト、キー、IV、および使用されているアルゴリズムを見るためのショートカット(sslpinninのようなもの)がありません。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする