# Objection Tutorial {{#include ../../../banners/hacktricks-training.md}} ## **はじめに** **objection - ランタイムモバイル探索** [**Objection**](https://github.com/sensepost/objection) は、[Frida](https://www.frida.re) によって提供されるランタイムモバイル探索ツールキットです。これは、脱獄やルート化されたモバイルデバイスを必要とせずに、モバイルアプリケーションとそのセキュリティ姿勢を評価するのを助けることを目的に構築されました。 **注意:** これは脱獄/ルートバイパスの一形態ではありません。`objection`を使用することで、直面している適用可能なサンドボックスによって課せられたすべての制限に依然として制約されます。 ### 概要 **objection**の**目標**は、ユーザーが**Fridaが提供する主要なアクションを呼び出す**ことを可能にすることです。**そうでなければ、**ユーザーはテストしたい**各アプリケーションのために単一のスクリプトを作成する必要があります。 ## チュートリアル このチュートリアルでは、ここからダウンロードできるAPKを使用します: {{#file}} app-release.zip {{#endfile}} またはその[オリジナルリポジトリ](https://github.com/asvid/FridaApp)から(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 ``` ![](<../../../images/image (220).png>) #### Fridaに関する情報 ```bash frida ``` ![](<../../../images/image (1093).png>) #### アップロード/ダウンロード ```bash file download [] file upload [] ``` #### frida スクリプトのインポート ```bash import ``` #### 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 ``` ![](<../../../images/image (1016).png>) ```bash android hooking list services android hooking list receivers ``` Fridaが見つからない場合、エラーが発生します #### 現在のアクティビティを取得する ```bash android hooking get current_activity ``` ![](<../../../images/image (813).png>) #### クラスの検索 アプリケーション内のクラスを探し始めましょう。 ```bash android hooking search classes asvid.github.io.fridaapp ``` ![](<../../../images/image (507).png>) #### クラスのメソッドを検索する では、クラス _MainActivity:_ 内のメソッドを抽出しましょう。 ```bash android hooking search methods asvid.github.io.fridaapp MainActivity ``` ![](<../../../images/image (929).png>) #### クラスの宣言されたメソッドとそのパラメータのリスト クラスのメソッドが必要とするパラメータを確認しましょう: ```bash android hooking list class_methods asvid.github.io.fridaapp.MainActivity ``` ![](<../../../images/image (299).png>) #### クラスのリスト 現在のアプリケーション内で読み込まれたすべてのクラスをリストすることもできます: ```bash android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes. ``` これは、**クラスのメソッドをフックしたいが、クラスの名前しか知らない場合**に非常に便利です。この関数を使用して、**クラスを所有するモジュールを検索**し、そのメソッドをフックすることができます。 ### フックが簡単 #### メソッドのフック(監視) アプリケーションの[ソースコード](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt)から、**MainActivity**の**関数**_**sum()**_が**毎秒**実行されていることがわかります。関数が呼び出されるたびに、**すべての可能な情報**(引数、戻り値、バックトレース)を**ダンプ**してみましょう。 ```bash android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return ``` ![](<../../../images/image (1086).png>) #### クラス全体をフック(監視)する 実際、クラス MainActivity のすべてのメソッドが非常に興味深いと思いますので、**すべてフック**しましょう。注意してください、これによりアプリケーションが**クラッシュ**する可能性があります。 ```bash android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return ``` アプリケーションをフックされたクラスで操作すると、**各関数が呼び出されるタイミング**、その**引数**、および**戻り値**が表示されます。 ![](<../../../images/image (861).png>) #### 関数のブール戻り値を変更する ソースコードから、関数 _checkPin_ が _String_ を引数として受け取り、_boolean_ を返すことがわかります。関数を**常にtrueを返す**ようにしましょう: ![](<../../../images/image (883).png>) 今、PINコードのテキストボックスに何かを書き込むと、何でも有効であることがわかります: ![](<../../../images/image (228).png>) ### クラスインスタンス 特定のJavaクラスの**ライブインスタンス**を検索して印刷します。これは完全修飾クラス名で指定されます。これは、発見されたobjectionの文字列値を取得しようとした結果であり、通常は**オブジェクトのプロパティ値を含む**ものです。 ``` android heap print_instances ``` ![](<../../../images/image (1095).png>) ### Keystore/Intents キーストアとインテントを使用して遊ぶことができます: ```bash android keystore list android intents launch_activity android intent launch_service ``` ### メモリ #### ダンプ ```bash memory dump all #Dump all memory memory dump from_base #Dump a part ``` #### リスト ```bash memory list modules ``` ![](<../../../images/image (286).png>) リストの下部にfridaが表示されています: ![](<../../../images/image (1097).png>) fridaが何をエクスポートしているか確認しましょう: ![](<../../../images/image (298).png>) #### 検索/書き込み objectionを使用してメモリ内を検索および書き込むこともできます: ```bash memory search "" (--string) (--offsets-only) memory write "
" "" (--string) ``` ### SQLite SQLiteデータベースと対話するには、コマンド`sqlite`を使用できます。 ### Exit ```bash exit ``` ## Objectionでの欠点 - フッキングメソッドは時々アプリケーションをクラッシュさせます(これはFridaのせいでもあります)。 - クラスのインスタンスを使用してインスタンスの関数を呼び出すことができません。また、新しいクラスのインスタンスを作成してそれを使用して関数を呼び出すこともできません。 - アプリケーションで使用されている一般的な暗号メソッドをフックして、暗号化されたテキスト、プレーンテキスト、キー、IV、および使用されているアルゴリズムを見るためのショートカット(sslpinninのようなもの)がありません。 {{#include ../../../banners/hacktricks-training.md}}