Ausführliche Erklärung und Beispielcode für die Verwendung des WalxPlugin Root-freien Frameworks

Erstveröffentlichung am 4. Juli 2023

Das WalxPlugin-Framework (im Folgenden als WP-Framework bezeichnet) ist ein Plug-in-Modul, das ohne Root-Berechtigungen verwendet werden kann und problemlos Funktionen wie das Einbinden anderer Anwendungen auf Nicht-Root-Geräten und den Zugriff auf Prozessdaten implementieren kann. Das Framework befindet sich derzeit in der Beta-Version.

1. Das WP-Framework-Toolkit bietet die folgenden Module:

1.WP-Manager: Wird zum Verwalten der Autorisierung und Verwendung von Plug-In-Modulen verwendet. Plug-Ins werden von Entwicklern entworfen und können nach Bestätigung durch den Benutzer von der Zielanwendung (Host) geladen werden.

2. Loader: Unsichtbar für Benutzer und Entwickler, aber vom WP Manager in die Ziel-App geladen.

3. Das zur Entwicklung des SDK verwendete JAR-Paket: walxpluginsdk.jar. Entwickler müssen das JAR-Paket in das Projekt importieren.

4. Kernmodul: Dieses Modul wird von WP selbst bereitgestellt. Es handelt sich um ein Plug-In, das mit dem Programm geliefert wird und für die Entwicklung und das Debuggen verwendet wird. Seine Grundfunktionen sind:

(1) AMS-Überwachung, d. h. Überwachung des Schnittstellenaufrufs der Zielanwendung zum ActivityManagerService-Dienst;

(2) Aktivitätsüberwachung, dies trennt tatsächlich die Funktion von AMS, um die Aktivität zu starten;

(3) Anwendungsansicht anzeigen: Wird zum Anzeigen aller Ansichtslisten und Informationen in Aktivität und Fenster verwendet.

(4) Anwendungskomponenten anzeigen: Wird zum Anzeigen der Daten der vier Hauptkomponenten verwendet, einschließlich aller erstellten Objektinformationen.

(5) Anwendungsdaten exportieren: Wird zum Extrahieren von Dateien im privaten Verzeichnis unter dem Paketnamen application/data/data/ verwendet.

2. Was kann das WP-Framework?

WP bietet hauptsächlich eine Reihe einfacher Entwicklungsstandards, und Entwickler können Funktionen selbst entwerfen, z. B. die eigenen Anforderungen des Entwicklers, z. B. die Überwachung von Anwendungsaufrufen usw. Natürlich kann es auch Netzwerkanforderungen überwachen, aber aufgrund des Zeitdrucks , das Framework-eigene Modul wurde nicht implementiert. Hinzu kommen die Bedürfnisse der Benutzer, wie z. B. Anwendungsanpassung usw., das Abfangen von API-Aufrufen nach dem Start der Host-Anwendung, das Ändern der Anwendungsschnittstelle, das Ersetzen eigener Daten usw. oder die Möglichkeit, Funktionen ähnlich dem roten Umschlag von WeChat zu implementieren Grabbing, aber globale Hooks können nicht ausgeführt werden und nur einfache Schnittstellenaufrufe können über den Proxy geändert und Objektdaten abgerufen werden. Im Gegensatz zu einigen Debugging-Tools, die nur in der Entwicklungsphase eingesetzt werden können, kann es in der Praxis vollständig genutzt werden, um dauerhafte Änderungen an der Anwendung vorzunehmen.

Implementierungsprinzip: Das entwickelte Modul, dh der Kerncode in der APK, befindet sich im selben Prozess wie die Zielanwendung, was der Hook-Injection-Technologie oder der Dex-Injection-Technologie entspricht, sodass sie voneinander auf Daten zugreifen können. und der WP-Manager fügt eine Dex-Datei ein, die verwendet wird, um die Startsteuerung zu erhalten, vom Benutzer autorisierte Module zu laden und dann die Zielanwendung neu zu signieren. Es ist zu beachten, dass einige Anwendungen eine Signaturüberprüfung durchführen und daher möglicherweise nicht gestartet werden können. Die Umgehung des Überprüfungsmechanismus muss später implementiert werden. Möglicherweise muss die spezifische Anwendung analysiert und sogar verwendet werden ida, weil viele Anwendungen eine native Ebene des zugrunde liegenden Codes haben.

Nachdem wir nun mit den Funktionen fertig sind, sprechen wir über die Verwendung.

Hier sind einige Bilder:

Das Folgende sind die erhaltenen WeChat-Daten:

WeChat ams-Überwachungsdaten:

Die Daten der WeChat-Anmeldeschnittstelle und die Mobiltelefonnummer wurden von mir beiläufig eingegeben:

Zuerst müssen Sie die WP-Entwicklungstools von der am Ende des Artikels angegebenen Adresse herunterladen und dann die WP-Manager-Anwendung installieren. Im folgenden Beispiel wird erläutert, wie Sie die Schaltflächenfarbe der WeChat-Willkommensoberfläche ändern.

 Screenshot des Hauptcodes:

Öffnen Sie nun Android Studio, um ein Modul zu erstellen, geben Sie den Paketnamen ein, importieren Sie dann das JAR-Paket, synchronisieren Sie das Projekt, erstellen Sie eine neue Starteintragsklasse, beispielsweise mit dem Namen Main, implementieren Sie dann die IWalxPluginMain-Schnittstelle und überschreiben Sie die Methoden onLoadModule und onMenuItemClick , und fügen Sie dann Folgendes zum
onLoadModule-Code hinzu, um den Aktivitätslebenszyklus zu überwachen:

WalxHelper.registerActivityListener(context, this);

Fügen Sie Ihren eigenen Implementierungscode in onMenuItemClick hinzu:

switch (itemId) {
    case 1000:
        Toast.makeText(context, "点击了1000", Toast.LENGTH_SHORT).show();
        break;
}


        
Fügen Sie abschließend den folgenden Code zur onActivityResumed-Methode hinzu, um die Willkommens-Anmeldeschnittstelle von WeChat zu überwachen und die Farbe der Anmeldeschaltfläche zu ändern:

if(activity.getClass().getSimpleName().equals("WelcomeActivity")){
    Button loginButton = (Button) WalxHelper.findViewById(activity, 2131312425); //登录按钮id
    if (loginButton != null) {
        loginButton.setBackgroundColor(Color.RED); //将登录按钮的颜色改成红色
    }
}

Der vollständige Code lautet wie folgt:

public class Main implements IWalxPluginMain, Application.ActivityLifecycleCallbacks {
    @Override
    public void onLoadModule(Context context, ClassLoader classLoader, String modulePackage) {
        Toast.makeText(context, modulePackage, Toast.LENGTH_SHORT).show();
        WalxHelper.registerActivityListener(context, this);
    }

    @Override
    public void onMenuItemClick(Context context, ClassLoader classLoader, int itemId) {
        switch (itemId) {
            case 1000:
                Toast.makeText(context, "点击了1000", Toast.LENGTH_SHORT).show();
                break;
        }
    }

    @Override
    public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(@NonNull Activity activity) {

    }

    @Override
    public void onActivityResumed(@NonNull Activity activity) {
        Button loginButton = (Button) WalxHelper.findViewById(activity, 2131312425); //登录按钮id
        if (loginButton != null) {
            loginButton.setBackgroundColor(Color.RED); //将登录按钮的颜色改成红色
        }
    }

    @Override
    public void onActivityPaused(@NonNull Activity activity) {

    }

    @Override
    public void onActivityStopped(@NonNull Activity activity) {

    }

    @Override
    public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(@NonNull Activity activity) {

    }
}

Erstellen Sie abschließend ein Assets-Verzeichnis unter src/main und erstellen Sie im Verzeichnis eine Datei walxplugin.json. Das Dateiformat ist wie folgt:

{   „desc“: „Testmodul“,   „targetPackages“: „com.tencent.mm“,   „mainClass“: „com.zwxuf.myplugin.Main“,   „menu“:[     {       „id“:1000,       „name ":"Menüpunkt testen"     }   ] }









Feldbedeutung:

desc: Modulbeschreibung;
targetPackages: Die Zielanwendung, die vom Modul injiziert werden soll, d. h. der zu ändernde Anwendungspaketname. Mehrere Paketnamen werden auf Englisch getrennt. Wenn Sie alle Anwendungen injizieren möchten, geben Sie einfach *; mainClass ein : Hauptklasse
, Anwendungsstart Diese Methode wird später zurückgerufen und Ihr eigener Initialisierungscode wird in dieser Methode hinzugefügt;
Menü: Menüpunkt, Array-Format, dieses Menü wird angezeigt, wenn Sie im WP-Manager auf Übernehmen klicken;

Wie in der Abbildung gezeigt:

Endgültiges laufendes Rendering:

Jedes Mal, wenn Sie WeChat von nun an starten, ist die Anmeldeschaltfläche immer rot. Der Schaltflächenrand hat jedoch quadratische Ecken. Es ist einfach, ihn in abgerundete Ecken zu ändern. Erstellen Sie eine drawable.xml im Modul, fügen Sie eine abgerundete Eckenform hinzu, verwenden Sie dann WalxHelper.getDrawable, um die zeichnbare Ressource abzurufen, und legen Sie sie dann als fest der Hintergrund der Schaltfläche.

Hinweis: Da Sie ein Modul schreiben, können die Ressourcen in der Anwendung nicht geladen werden. Verwenden Sie daher bitte nicht die Ressourcenreferenzmethode, die mit R.* beginnt, sondern die von der WalxHelper-Toolklasse bereitgestellten Methoden, z. B. WalxHelper.getLayout Methode zum
Erhalten eines Layouts, WalxHelper.getDrawable wird verwendet, um ein Bild zu erhalten.

Aktivität verwenden:

Erstellen Sie eine Klasse, erben Sie die WalxPluginUI-Klasse und verwenden Sie dann alle Aktivitätsmethoden in der Klasse. Verwenden Sie beim Starten nicht die startActivity des Systems, sondern die startPluginUI-Methode in WalxHelper.

Verwenden Sie in der Activity-Klasse keine Methoden wie setContentView(R.layout.activity_main), sondern verwenden Sie stattdessen den folgenden Code:

View mContentView = WalxHelper.getLayout(this, R.layout.activity_main);
setContentView(mContentView);


Exportieren Sie abschließend die Modul-APK, installieren Sie sie manuell oder über WP Manager und autorisieren Sie dann das Öffnen des Moduls. Wenn das Modul als nicht authentifiziert angezeigt wird, bedeutet dies, dass das Modul vom Benutzer nicht autorisiert wurde und nicht verwendet werden kann. Derzeit , müssen Sie klicken, um die Autorisierung zu aktivieren. Deinstallieren Sie außerdem WP Management. Nach der Installation des Servers werden alle Module nicht mehr authentifiziert und müssen erneut autorisiert werden.

Nach der Installation des Moduls müssen Sie die Anwendung installieren, die Sie ändern möchten. Bei der Erstinstallation müssen Sie die Anwendung zuerst deinstallieren. Um das WeChat-Modul verwenden zu können, müssen Sie WeChat neu installieren. Bitte sichern Sie zuerst Ihre Daten.

So verwenden Sie die WalxHelper-Toolklasse:


//获取应用所有Activity
WalxHelper.getActivities(context);

//获取Activity中的所有View,不包括窗口中的view
WalxHelper.getAllChildViews(activity);

//获取所有根View,根view包含窗口的View和Dialog以及PopupWindow中的view
WalxHelper.getAllRootViews();

//启动一个Activity
WalxHelper.startModuleUI(Context context, Intent intent);
        
//启动一个Activity
WalxHelper.startModuleUI(Context context, Class<? extends WalxPluginUI > activity);
        
//拦截方法
WalxHelper.intercept(String parentClassName, Object parentObject, String hookClassName, String hookField, OnInterceptMethodListener listener);
        
//恢复方法
WalxHelper.restore(String parentClassName, Object parentObject, String hookClassName, String hookField);

//获取Activity线程
WalxHelper.getActivityThread();

//获取当前应用程序实例
WalxHelper.getApplication();

//获取基本上下文实例
WalxHelper.getBaseContext();

//获取PMS实例
WalxHelper.getPackageManager();

//获取全局PMS接口
WalxHelper.getIPackageManager();

//获取所有服务实例
WalxHelper.getServices();


        
Die restlichen Funktionen können Sie selbst studieren.


Vorsichtsmaßnahmen:

1. Aufgrund der Neusignierung können einige Anwendungen möglicherweise nicht signiert werden. In diesem Fall können Sie den Dateimanager aufrufen, die Datei „singed.apk“ im internen Speicher suchen und apksigner auf dem Computer verwenden, um die Datei vorübergehend zu signieren. Sie können Ihren eigenen Keystore zum Signieren der Datei verwenden. Folgemaßnahmen Die Signaturmethode wird verbessert.

2. Bei einigen Anwendungen handelt es sich um vorinstallierte Anwendungen, die mit dem System geliefert werden. Diese Anwendungen können möglicherweise nicht signiert oder installiert werden, daher verwenden Sie diese Versionen bitte nicht. Es wird empfohlen, die Originalversion zur Installation erneut aus dem Internet herunterzuladen.

3. Einige Anwendungen wurden erfolgreich installiert, können aber nicht gestartet werden oder stürzen ab. Zu diesem Zeitpunkt können Sie die Anwendung mit WP neu installieren, die beiden Optionen „Neuen Eingang erstellen“ und „Ursprünglichen Eingang deaktivieren“ abbrechen und es erneut versuchen .

Die Bedeutung des Erstellens eines neuen Eingangs: Das heißt, der Anwendung ein Startsymbol zuweisen. Auf dem Desktop werden zwei Anwendungssymbole angezeigt, die Namen sind jedoch unterschiedlich. Eines ist der ursprüngliche Name und das andere wird als Moduleingang bezeichnet. Wann Klicken Sie beim Starten auf den Moduleingang, um die Anwendung zu starten, anstatt auf das ursprüngliche Anwendungssymbol zu klicken, um sie zu starten. Wenn diese Option nicht aktiviert ist, kann das Plug-in nur über WP beim Starten der Anwendung aktiviert werden und das Plug-in kann nicht durch Klicken auf den Desktop geladen werden.

Der Sinn der Deaktivierung des ursprünglichen Zugangs besteht darin, die ursprüngliche Startschnittstellenanweisung der Anwendung zu löschen und durch einen neuen Eingang zu ersetzen. Nach dem Aktivieren dieser Option wird nur ein Symbol auf dem Desktop generiert. Klicken Sie zu diesem Zeitpunkt einfach normal, um zu starten die Anwendung.

Warum verwendet WP nicht die Service-Methode, um den Code zu starten? Da der Dienst nach dem Stoppen der Anwendung nicht gestartet werden kann, verfügt die Anwendung zu diesem Zeitpunkt über das Flag FLAG_STOPPED.

Temporäre Download-Adresse von Baidu Netdisk:

https://pan.baidu.com/s/1D_jwnmSpwv4Kd19TrqZvHQ

Extraktionscode: 1234

Von dieser Website herunterladen: https://download.csdn.net/download/zzmzzff/88008663

Ich denke du magst

Origin blog.csdn.net/zzmzzff/article/details/131545443
Empfohlen
Rangfolge