2016-07-21 17 views
1

Ich versuche zu verstehen, wie Xposed die Hooking-Teil und es bietet die API für den Benutzer, um jede Methode sehr leicht zu haken.Wie Xposed in Android einhaken

Ich habe den Quellcode von Xposed Bridge durchsucht, die JAR-Datei, die sich bei jedem Prozess in jedem Prozess befindet. Ich fand auch, dass sie Java-Reflektion verwenden, um die Klassenmethoden, Parameter usw. zu erhalten, um sie über JNI an die Native-Methoden zu übergeben.

Eine Sache, die ich nicht herausfinden kann, ist, dass Xposeed die Prozesse einhängt und in der Lage ist, die volle Kontrolle darüber zu bekommen.

Ich versuche herauszufinden, dass das Hooking auf der Java-Seite innerhalb der XposedBridge-JAR-Datei oder auf ART-Ebene in Native-Code stattfindet.

Antwort

1

Gute Frage. XPosed funktioniert durch Ändern der app_process-Datei, welche die ART VM und vorher die Dalvik VM ist.

Diese neu modifizierte ART/Dalvik-VM lädt die XPosedBridge.jar-Datei sowie alle xposed-Module, die bei der Ausführung im System registriert wurden. Das passiert nur einmal, denn die Funktionsweise von Android ist, dass es eine Java-VM gibt, die von Grund auf neu erstellt wird (Zygote genannt). Bei jedem Start einer App wird diese VM dann gegabelt, damit die neue App eine eigene VM hat.

Darüber hinaus fügt diese modifizierte ART/Dalvik-VM einen Rückruf nach der Gabelfunktion von Zygote hinzu, damit sie alle xposed-Modulcodes auslösen kann, die das Ereignis packageOnLoad abfangen.

Damit die Methode der einzelnen Klassen abgefangen werden kann, ändert die hookMethod-Funktionalität in XposedBridge (die Bibliothek, die Sie beim Erstellen Ihrer xposed-Module verwenden) die native Klassenstruktur in der VM ist für die bestimmte Klasse definiert, die Sie haken möchten, um den Methodenzeiger für die Methode, die Sie zu hacken versuchen, an Ihre neue Ersetzungsmethode umzuleiten.