Explication détaillée et exemple de code pour l'utilisation du framework sans racine WalxPlugin

Sortie pour la première fois le 4 juillet 2023

Le framework WalxPlugin (ci-après dénommé framework WP) est un module de plug-in qui peut être utilisé sans autorisation root. Il peut facilement implémenter des fonctions telles que l'appel d'autres applications et l'accès aux données de processus sur des appareils non root. Le framework est actuellement en version bêta.

1. La boîte à outils du framework WP fournit les modules suivants :

1.WP Manager : Utilisé pour gérer l'autorisation et l'utilisation des modules de plug-ins. Les plug-ins sont conçus par les développeurs et peuvent être chargés par l'application cible (hôte) après confirmation par l'utilisateur.

2. Loader : invisible pour les utilisateurs et les développeurs, mais chargé dans l'application cible par WP Manager.

3. Le package jar utilisé pour développer le SDK : walxpluginsdk.jar. Les développeurs doivent importer le package jar dans le projet.

4. Module principal : Ce module est fourni par WP lui-même. Il s'agit d'un plug-in fourni avec le programme et utilisé pour le développement et le débogage. Ses fonctions de base sont :

(1) Surveillance AMS, c'est-à-dire surveillance de l'appel d'interface de l'application cible au service ActivityManagerService ;

(2) Surveillance de l'activité, cela sépare en fait la fonction de l'AMS pour démarrer l'activité ;

(3) Afficher la vue de l'application : utilisé pour afficher toutes les listes et informations d'affichage dans l'activité et la fenêtre ;

(4) Afficher les composants de l'application : utilisé pour afficher les données des quatre composants principaux, y compris toutes les informations sur les objets créés ;

(5) Exporter les données de l'application : utilisé pour extraire les fichiers dans le répertoire privé sous le nom application/data/data/package.

2. Que peut faire le framework WP ?

WP fournit principalement un ensemble de normes de développement simples, et les développeurs peuvent concevoir eux-mêmes des fonctions, telles que les propres besoins du développeur, comme la surveillance des appels d'application, etc. Bien sûr, il peut également surveiller les requêtes réseau, mais en raison du manque de temps , le propre module du framework n'a pas été implémenté. Ensuite, il y a les besoins des utilisateurs, comme la personnalisation de l'application, etc., intercepter les appels d'API après le démarrage de l'application hôte, modifier l'interface de l'application, remplacer ses propres données, etc., ou être capable d'implémenter une fonction similaire au rouge de WeChat. capture d'enveloppe, mais ne peut pas effectuer de hooks globaux, seuls les appels d'interface simples peuvent être modifiés via le proxy et les données d'objet peuvent être obtenues. Ainsi contrairement à certains outils de débogage qui ne peuvent être utilisés qu’en phase de développement, il peut être pleinement utilisé en pratique pour apporter des modifications durables à l’application.

Principe de mise en œuvre : le module développé, c'est-à-dire le code principal de l'apk, sera dans le même processus que l'application cible, ce qui équivaut à la technologie d'injection de hook, ou technologie d'injection dex, afin qu'ils puissent accéder aux données les uns des autres, et le gestionnaire WP injectera un fichier dex, utilisé pour obtenir le contrôle de démarrage, chargera les modules autorisés par l'utilisateur, puis re-signera l'application cible. Il convient de noter que certaines applications effectueront une vérification de signature, elles risquent donc de ne pas pouvoir démarrer. Quant à la manière de contourner le mécanisme de vérification, cela devra être mis en œuvre ultérieurement. Il peut être nécessaire d'analyser l'application spécifique, et même d'utiliser ida, car de nombreuses applications ont une couche native de code sous-jacent.

Maintenant que nous avons fini de parler des fonctions, parlons de comment les utiliser.

Voici quelques images:

Voici les données WeChat obtenues :

WeChat ams surveille les données :

Les données de l'interface de connexion WeChat et le numéro de téléphone portable ont été remplis avec désinvolture par moi :

Tout d'abord, vous devez télécharger les outils de développement WP à partir de l'adresse fournie à la fin de l'article, puis installer l'application WP Manager. L'exemple suivant explique comment modifier la couleur des boutons de l'interface d'accueil de WeChat.

 Capture d'écran du code principal :

Ouvrez maintenant Android Studio pour créer un module, remplissez le nom du package, puis importez le package jar, synchronisez le projet, créez une nouvelle classe d'entrée de démarrage, par exemple, appelée Main, puis implémentez l'interface IWalxPluginMain, remplacez les méthodes onLoadModule et onMenuItemClick. , puis ajoutez ce qui suit au
code onLoadModule pour surveiller le cycle de vie de l'activité :

WalxHelper.registerActivityListener(context, this);

Ajoutez votre propre code d'implémentation dans onMenuItemClick :

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


        
Enfin, ajoutez le code suivant à la méthode onActivityResumed pour surveiller l'interface de connexion de bienvenue de WeChat et modifier la couleur du bouton de connexion :

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

Le code complet est le suivant :

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) {

    }
}

Enfin, créez un répertoire d'actifs sous src/main et créez un fichier walxplugin.json dans le répertoire. Le format de fichier est le suivant :

{   "desc": "Module de test",   "targetPackages": "com.tencent.mm",   "mainClass": "com.zwxuf.myplugin.Main",   "menu":[     {       "id":1000,       "name ":"Élément de menu Test"     }   ] }









Signification du champ :

desc : description du module ;
targetPackages : l'application cible à injecter par le module, c'est-à-dire le nom du package d'application à modifier. Les noms de plusieurs packages sont séparés en anglais. Si vous souhaitez injecter toutes les applications, remplissez simplement * ; mainClass : classe principale
, démarrage de l'application Cette méthode sera rappelée ultérieurement, et votre propre code d'initialisation sera ajouté dans cette méthode ;
menu : élément de menu, format de tableau, ce menu sera affiché lorsque vous cliquerez sur Appliquer dans WP Manager ;

Comme le montre la figure :

Rendu final en cours d'exécution :

Désormais, chaque fois que vous démarrez WeChat, son bouton de connexion sera toujours rouge. Cependant, la bordure du bouton a des coins carrés. Il est facile de la changer en coins arrondis. Créez un fichier drawable.xml dans le module, ajoutez une forme de coin arrondi, puis utilisez WalxHelper.getDrawable pour obtenir la ressource dessinable, puis définissez-la comme l'arrière-plan du bouton.

Remarque : Puisque vous écrivez un module, les ressources de l'application ne peuvent pas être chargées, veuillez donc ne pas utiliser la méthode de référence de ressource commençant par R.*, mais utilisez les méthodes fournies par la classe d'outils WalxHelper, telles que WalxHelper.getLayout. méthode pour
obtenir une mise en page, WalxHelper.getDrawable est utilisée pour obtenir une image.

Utilisation de l'activité :

Créez une classe, héritez de la classe WalxPluginUI, puis utilisez toutes les méthodes d'activité de la classe. N'utilisez pas startActivity du système au démarrage, mais utilisez la méthode startPluginUI dans WalxHelper.

N'utilisez pas de méthodes telles que setContentView(R.layout.activity_main) dans la classe Activity, mais utilisez plutôt le code suivant :

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


Enfin, exportez le module apk, installez-le manuellement ou via WP Manager, puis autorisez l'ouverture du module. Si le module affiche non authentifié, cela signifie que le module n'a pas été autorisé par l'utilisateur et ne peut pas être utilisé. Pour le moment , vous devez cliquer pour activer l'autorisation. De plus, désinstallez WP Management. Une fois le serveur installé, tous les modules ne seront plus authentifiés et nécessiteront une nouvelle autorisation.

Après avoir installé le module, vous devez installer l'application que vous souhaitez modifier. Pour la première installation, vous devez d'abord désinstaller l'application. Pour utiliser le module WeChat, vous devez réinstaller WeChat. Veuillez d'abord sauvegarder vos données.

Comment utiliser la classe d'outils WalxHelper :


//获取应用所有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();


        
Les fonctions restantes peuvent être étudiées par vous-même.


Précautions:

1. En raison de la re-signature, certaines applications peuvent ne pas réussir à être signées. Dans ce cas, vous pouvez accéder au gestionnaire de fichiers, rechercher le fichier singed.apk dans la mémoire interne et utiliser apksigner sur l'ordinateur pour signer temporairement le fichier. Vous pouvez utiliser votre propre magasin de clés pour signer le fichier. Suivi La méthode de signature sera améliorée.

2. Certaines applications sont des applications préinstallées fournies avec le système. Ces applications peuvent ne pas être signées ou installées, veuillez donc ne pas utiliser ces versions. Il est recommandé de télécharger à nouveau la version originale depuis Internet pour l'installation.

3. Certaines applications sont installées avec succès, mais ne peuvent pas être démarrées ou se bloquent. À ce stade, vous pouvez réinstaller l'application à l'aide de WP, annuler les deux options "Créer une nouvelle entrée" et "Désactiver l'entrée d'origine" et réessayer. .

La signification de la création d'une nouvelle entrée : c'est-à-dire attribuer une icône de démarrage à l'application. Deux icônes d'application seront affichées sur le bureau, mais les noms sont différents. L'une est le nom d'origine et l'autre s'appelle l'entrée du module. Lorsque Au démarrage, cliquez sur l'entrée du module pour démarrer l'application au lieu de cliquer sur l'icône de l'application d'origine pour démarrer. Si cette option n'est pas cochée, le plug-in ne peut être activé via WP qu'au démarrage de l'application, et le plug-in ne peut pas être chargé en cliquant sur le bureau.

La désactivation de l'entrée d'origine signifie supprimer l'instruction d'interface de démarrage d'origine de l'application et la remplacer par une nouvelle entrée. Après avoir coché cette option, une seule icône sera générée sur le bureau. À ce stade, cliquez simplement normalement pour démarrer L'application.

Pourquoi WP n’utilise-t-il pas la méthode de service pour démarrer le code ? Étant donné que le service ne peut pas être démarré une fois l'application arrêtée, l'application possède actuellement l'indicateur FLAG_STOPPED.

Adresse de téléchargement temporaire de Baidu Netdisk :

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

Code d'extraction : 1234

Téléchargez depuis ce site : https://download.csdn.net/download/zzmzzff/88008663

Je suppose que tu aimes

Origine blog.csdn.net/zzmzzff/article/details/131545443
conseillé
Classement