
Androidアプリ向けのペネトレーションテストおよび監査ツールキット。
Androidアプリのペンテストをより速く、より簡単に、より効率的に行うためのJavaツールです。AndroTicklerは、情報収集、静的および動的チェックなど、Androidアプリのペンテストのほとんどの側面をカバーする多くの機能を提供します。また、ペンテスターがペンテスト中に必要とするいくつかの機能も提供します。AndroTicklerはFridaと統合して、メソッドトレースと操作を提供します。以前はTicklerという名前で公開されていました。
AndroTicklerは、LinuxホストとUSBポートに接続されたroot化されたAndroidデバイスを必要とします。このツールはAndroidデバイスに何もインストールせず、/sdcardにTicklerディレクトリを作成するだけです。AndroTicklerは、Android SDKに依存してデバイス上でコマンドを実行し、アプリのデータをホスト上のTicklerWorkspaceディレクトリにコピーしてさらなる分析を行います。TicklerWorkspaceはAndroTicklerの作業ディレクトリであり、各アプリはTicklerWorkspace内に個別のサブディレクトリを持ちます。このサブディレクトリには以下のものが含まれます(ユーザーのアクションに応じて):
libsディレクトリとTickler.conf設定ファイルは、jarファイルと同じディレクトリに存在します。設定ファイルは、ホスト上のTicklerDirディレクトリとAndroidデバイスの/sdcard上のTicklerの場所を設定します。設定ファイルが存在しないか、これらの2つのディレクトリが設定されていない場合、デフォルト値が使用されます(それぞれカレントディレクトリ上のTickler_workspaceと/sdcard/Tickler)。Tickler_libディレクトリには、apktoolやdex2jarなど、AndroTicklerで使用されるいくつかのJavaライブラリと外部ツールが含まれています。
AndroTicklerは以下のツールに強く依存するため、使用前にこれらがマシンに存在する必要があります:
一部の機能には他のツールが必要ですが、AndroTicklerはそれらがなくても実行できます:
コードからツールをビルド
gradle build
AndroTickler.jarをTickler_libディレクトリおよびTickler.confファイルと同じディレクトリに移動します(build/libsに自動作成されます)
dex2jarを実行可能に設定します(libs/notJars//dex2jar-2.1/d2j-dex2jar.shおよびlibs/notJars//dex2jar-2.1/d2j_invoke.sh)
テスト対象のアプリケーションがインストールされたAndroidデバイスを接続します
注意: ソースコードのビルドが失敗した場合は、リリースタブから最新のコンパイル済みリリースをダウンロードできます。
現在のバージョンでは次のことができます:
java -jar AndroTickler.jar -h
デバイスにインストールされているアプリを一覧表示:
java -jar AndroTickler.jar -pkgs
デバイスにインストールされているアプリ(パッケージ)で、パッケージ名にsearchKeyを含むものを検索します
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [other options]
-pkgオプションを指定したコマンド(以下のオプションのいずれかと併用するかどうかに関わらず)は、以前に実行されていない場合、以下のアクションを実行します:
java -jar AndroTickler.jar -pkg <package> -info
以下の情報を返します:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
アプリのデコンパイルされたJavaコードから以下を取得します:
当然ながら、その出力は通常巨大なため、コマンドの出力をファイルにリダイレクトすることをお勧めします。
short 開発者に属するデコンパイルされたコードのみをスクイーズします。例えば、アプリのパッケージ名がcom.notEnaf.myappの場合、squeeze shortはcom/notEnafディレクトリ内のコードのみをスクイーズします。
codeLocationディレクトリ内のコードのみをスクイーズします。検索を制限したり、ソースコードが利用可能な場合にそれをスクイーズするのに役立ちます。
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
アプリのすべてのコンポーネントを一覧表示します
-exp エクスポートされたコンポーネントのみを表示
-v 各コンポーネントの詳細情報を提供します:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
デフォルトでは、すべての-dbコマンドはチェックを実行する前にホスト上のアプリのデータストレージディレクトリを更新します。
属性なし または e アプリのデータベースが暗号化されているかどうかをテストします。-dbフラグ後にオプションが指定されていない場合のデフォルトのアクションです。 l アプリのすべてのデータベースを一覧表示します。暗号化されたデータベースは検出されない可能性があります。 d 暗号化されていないデータベースのいずれかのsqliteダンプを取得します。 nu noUpdate: ホスト上のアプリのデータディレクトリを更新せずに上記のいずれかのオプションを実行します。
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
アプリのデータストレージディレクトリを(DataDirOldに)コピーし、ユーザーに希望するアクションを実行してもらい、完了したらEnterキーを押すよう求めます。その後、データストレージディレクトリを再度(DataDirに)コピーし、それらの間でdiffを実行して、追加、削除、または変更されたファイルを表示します。
d|detailed 通常の-diffコマンドと同じことを行います。さらに、テキストファイルと暗号化されていないデータベースで正確に何が変更されたかを表示します。
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
以下の場所でkeyを検索します:
検索は大文字小文字を区別しません。
デコンパイルされたJavaコードの場所をカスタムロケーションで置き換えます。
java -jar AndroTickler.jar -pkg <package> -sd <key>
アプリのデータストレージディレクトリ内で指定されたキーを検索します
インテントのすべての可能な組み合わせによって、アプリのコンポーネントをトリガーします。例えば、アクティビティが2つの可能なアクションと3つのデータURIスキームを持つインテントフィルターを持っている場合、AndroTicklerはこのインテントのすべての可能な組み合わせでアクティビティをトリガーします。さらに、AndroTicklerはコンポーネントに対応するJavaクラス内で言及されているインテントエクストラを取得し、それらにダミー値を割り当てて、可能なインテントの組み合わせに追加します。boolean、string、int、floatタイプのエクストラのみがサポートされています。
-expオプションが使用された場合、コンポーネントはroot権限や特別な権限なしでトリガーされます。使用しない場合、コンポーネントはroot権限でトリガーされます。これにより、通常権限の攻撃者または高権限の攻撃者という2つの異なるシナリオでアプリをテストできます。
コンポーネントをトリガーする前に、AndroTicklerは実行されるすべてのコマンドを表示します。次に、各コマンドについて、コンポーネントをトリガーし、コマンドを表示してからユーザーを待機します。これにより、ユーザーはコマンド実行後に追加のチェックを行う十分な時間を得られます。ユーザーが次のコマンドに進む前に、PoC文書用にデバイスのスクリーンショットを撮るオプションが与えられます。
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
targetは、listコマンドで説明した通り、以下が可能です:
値がない場合、ターゲットは上記のすべてです。
[-comp] <component_name> 1つのコンポーネントのみを指定します。-compフラグなしで*<component_name>*を直接使用することもできます。 -exp AndroTicklerは通常権限を使用して、エクスポートされたターゲットのみをトリガーします。 -all デフォルトのオプション。AndroTicklerはroot権限を使用してエクスポートされたターゲットをトリガーします。 -log トリガーセッション中に生成されたすべてのログキャットメッセージをキャプチャします。ログファイルはlogsサブディレクトリに保存されます。
Fridaはホストマシンにインストールされている必要があります。また、Androidデバイス上のFridaサーバーの場所をTickler.confファイルのFrida_server_pathエントリに追加する必要があります。
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
このメソッドの引数と戻り値を表示します(プリミティブデータ型とStringのみ)。
reuse valsおよびsetオプションの場合、Fridaはその機能のFridaスクリプトを作成/更新します。作成されたスクリプトを自由に変更でき、AndroTicklerを通して実行したい場合は、-reuseオプションを使用して上書きされないようにします。
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
引数番号NumberOfArgToModifyをnewValueに設定します(プリミティブデータ型とStringのみ)。 NumberOfArgToModifyは0から始まります:最初の引数 --> NumberOfArgToModify = 0、...など 戻り値を変更するには、NumberOfArgToModifyをretに設定します。
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
ホスト上のscriptPathにあるfrida JSスクリプトを実行します
読み込まれたクラスの列挙:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
アプリのデバッグ可能バージョンを作成します。これはデバイスにインストールして、任意の外部ツールを使用してデバッグできます。 AndroTicklerにはデバッグ可能なapkに署名するためのキーストアが付属していますが、ホストにjarsignerツールが必要です。
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
ディレクトリからapkファイルをビルドし、署名してインストールします。
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
デバイスが撮影したバックグラウンドスナップショットを(-pkgオプションの有無にかかわらず動作)bgSnapshotsサブディレクトリにコピーします。
データストレージディレクトリのコピー:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
データストレージディレクトリをDataDirにコピーします dest 宛先ディレクトリのオプション名。いずれにせよtransfersサブディレクトリに配置されます。
任意のファイル/ディレクトリのコピー:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Androidデバイスからファイル/ディレクトリをコピーします。
destオプションが指定されない場合、ディレクトリ名はトランザクションのタイムスタンプになります。
java -jar AndroTickler.jar [-pkg <package>] -screen
-pkgオプションを必要としないオプションの場合、そのデータはTickler_Dir/NoPackageに保存されます。
java -jar AndroTickler.jar -pkg <package> -t -act -exp
エクスポートされたアクティビティをトリガーします
java -jar AndroTickler.jar -pkg <package> -t -prov -log
すべてのコンテンツプロバイダーにクエリを実行し、ツールの実行が停止するまでログキャットメッセージを保存します
java -jar AndroTickler.jar -pkg <package> -t <component_name>
コンポーネントをトリガーします。トリガーのタイプはコンポーネントのタイプに依存します
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
2つの引数を持つメソッド"myMethod"にフックし、最初の引数(args[0])の値を"newValue"に変更します
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
2つの引数を持つメソッド"myMethod"にフックし、戻り値をboolean falseに変更します