2016-07-21 6 views
1

私は、Xposedがどのようにフックするかを理解しようとしています。どのようにXhopped Androidでフックするのですか?

Xposed Bridgeのソースコードは、起動するたびにすべてのプロセスの内部にあるjarファイルです。 また、JNIを介してネイティブメソッドに渡すために、クラスメソッド、パラメータなどを取得するためにJavaリフレクションを使用していることがわかりました。

私は、Xposedがプロセスをフックして、それを完全に制御できることを理解できません。

フックはXposedBridge jarファイル内のJava側で行われるか、ネイティブコードのARTレベルで行われることを確認しようとしています。

答えて

1

良い質問です。 XPosedは、ART VMであり以前はDalvik VMであったapp_processファイルを変更することで動作します。

この新しいART/Dalvik VMは、XPosedBridge.jarファイルと、実行時にシステムに登録されているすべてのxposedモジュールをロードします。 Androidの仕組みは、一から作成されたJava VM(Zygoteと呼ばれる)が1つあり、アプリが起動するたびにこのVMがforkされ、新しいアプリが独自のVMを持つためです。

さらに、この修正されたART/Dalvik VMはZygoteのfork関数の後にコールバックを追加して、packageOnLoadイベントをインターセプトするすべてのxposedモジュールコードをトリガーすることができます。

最後に、個々のクラスのメソッドをインターセプトするために、XposedBridge(xposedモジュールを作成するときに使用しているライブラリ)のhookMethod機能は、VMのネイティブクラス構造体を変更します。新しい置換メソッドにフックしようとしているメソッドのメソッドポインタをリダイレクトするためにフックしようとしている特定のクラスに対して定義されています。

関連する問題