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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
はじめに
objection - ランタイムモバイル探索
Objection は、Frida によって提供されるランタイムモバイル探索ツールキットです。これは、脱獄やルート化されたモバイルデバイスを必要とせずに、モバイルアプリケーションとそのセキュリティ姿勢を評価するのを助けることを目的に構築されました。
注意: これは脱獄/ルートバイパスの一形態ではありません。objection
を使用することで、直面している適用可能なサンドボックスによって課せられたすべての制限に依然として制約されます。
概要
objectionの目標は、ユーザーがFridaが提供する主要なアクションを呼び出すことを可能にすることです。**そうでなければ、ユーザーはテストしたい各アプリケーションのために単一のスクリプトを作成する必要があります。
チュートリアル
このチュートリアルでは、ここからダウンロードできるAPKを使用します:
またはそのオリジナルリポジトリから(app-release.apkをダウンロード)
インストール
pip3 install objection
接続
通常のADB接続を行い、デバイスでfridaサーバーを起動します(クライアントとサーバーの両方でfridaが動作していることを確認します)。
ルート化されたデバイスを使用している場合、_--gadget_オプション内でテストしたいアプリケーションを選択する必要があります。この場合:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
基本アクション
このチュートリアルでは、objectionのすべてのコマンドはリストされず、私がより便利だと感じたものだけが含まれます。
環境
パスワードやパスなどの興味深い情報は、環境内に見つけることができます。
env
Fridaに関する情報
frida
アップロード/ダウンロード
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
frida スクリプトのインポート
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
ルート検出
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Exec Command
android shell_exec whoami
スクリーンショット
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
静的分析を動的に
実際のアプリケーションでは、静的分析のおかげで、この部分で発見されたすべての情報を知っておくべきです。それでも、この方法では、クラス、メソッド、およびエクスポートされたオブジェクトの完全なリストのみが表示されるため、新しい何かを見ることができるかもしれません。
これは、アプリの可読なソースコードを取得できない場合にも役立ちます。
アクティビティ、レシーバー、およびサービスのリスト
android hooking list activities
android hooking list services
android hooking list receivers
Fridaが見つからない場合、エラーが発生します
現在のアクティビティを取得する
android hooking get current_activity
クラスの検索
アプリケーション内のクラスを探し始めましょう。
android hooking search classes asvid.github.io.fridaapp
クラスのメソッドを検索する
では、クラス MainActivity: 内のメソッドを抽出しましょう。
android hooking search methods asvid.github.io.fridaapp MainActivity
クラスの宣言されたメソッドとそのパラメータのリスト
クラスのメソッドが必要とするパラメータを確認しましょう:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
クラスのリスト
現在のアプリケーション内で読み込まれたすべてのクラスをリストすることもできます:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
これは、クラスのメソッドをフックしたいが、クラスの名前しか知らない場合に非常に便利です。この関数を使用して、クラスを所有するモジュールを検索し、そのメソッドをフックすることができます。
フックが簡単
メソッドのフック(監視)
アプリケーションのソースコードから、MainActivityの関数_sum()_が毎秒実行されていることがわかります。関数が呼び出されるたびに、すべての可能な情報(引数、戻り値、バックトレース)をダンプしてみましょう。
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
クラス全体をフック(監視)する
実際、クラス MainActivity のすべてのメソッドが非常に興味深いと思いますので、すべてフックしましょう。注意してください、これによりアプリケーションがクラッシュする可能性があります。
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
アプリケーションをフックされたクラスで操作すると、各関数が呼び出されるタイミング、その引数、および戻り値が表示されます。
関数のブール戻り値を変更する
ソースコードから、関数 checkPin が String を引数として受け取り、boolean を返すことがわかります。関数を常にtrueを返すようにしましょう:
今、PINコードのテキストボックスに何かを書き込むと、何でも有効であることがわかります:
クラスインスタンス
特定のJavaクラスのライブインスタンスを検索して印刷します。これは完全修飾クラス名で指定されます。これは、発見されたobjectionの文字列値を取得しようとした結果であり、通常はオブジェクトのプロパティ値を含むものです。
android heap print_instances <class>
Keystore/Intents
キーストアとインテントを使用して遊ぶことができます:
android keystore list
android intents launch_activity
android intent launch_service
メモリ
ダンプ
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
リスト
memory list modules
リストの下部にfridaが表示されています:
fridaが何をエクスポートしているか確認しましょう:
検索/書き込み
objectionを使用してメモリ内を検索および書き込むこともできます:
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
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。