私は現在、モバイルアプリケーションのフックに関するテクニックの調査を行っており、Xposed(Android)、Frida(AndroidおよびiOS)、Cycript(iOS)などのいくつかのフレームワークに出会いました。
XposedとFridaに関するドキュメントは、彼らがどのようにそれを行っているかを説明するのにかなり良いです。 Xposed状態は、Zygoteプロセスを開始し、メソッドのフックを支援する追加のJARファイルをロードして、バイナリーを操作します。 Fridaのドキュメントでは、ptrace(Linux環境の場合)を使用してプロセスにアタッチし、スレッドをロードするブートストラップを割り当てて設定し、簡単に言えば、fridaエージェントを含む.soファイルを起動すると説明しています。
Cycriptが追求する戦略についての有用なドキュメントが見つかりませんでした。実際のフッキングを行うCydia基板の上に構築されていることを知っています。基板がこれをどのように正確に達成するかについての詳細も見つけることができませんでした。
IOSでは、objective-cランタイムはランタイム指向であるため、ランタイム操作を可能にすることも理解しています。
Cycript/Cydia Substrateがアプリケーションにフック/インジェクトするためにどのように機能するか正確に知っていますか?
前もって感謝します。
DYLD_INSERT_LIBRARIESをプログラムのlaunchdマニフェストに追加することで明らかに機能していることがわかりました。これにより、アプリケーションが起動するたびに、ダイナミックライブラリをロードして悪意のあるペイロードがロードされます。
それでも、AndroidおよびiOSでランタイムフック/操作を実行する方法は他にもありますか?
Cycriptはモバイル基板でcynjectを使用します https://git.saurik.com/cycript.git/blob/HEAD:/Inject.cpp
Cynjectはmachタスクポートを使用して、ターゲットプロセスにスレッドを挿入して作成します。 https://github.com/rweichler/substrate/blob/master/DarwinInjector.cpp
mach_port_t self(mach_task_self()), task;
_krncall(task_for_pid(self, pid, &task));