Explicación detallada y código de muestra para usar el marco sin raíz WalxPlugin

Publicado por primera vez el 4 de julio de 2023.

El marco WalxPlugin (en lo sucesivo, el marco WP) es un módulo complementario que se puede usar sin permisos de root y puede implementar fácilmente funciones como llamar a otras aplicaciones y acceder a datos de proceso en dispositivos no root. El marco se encuentra actualmente en versión beta.

1. El kit de herramientas del marco WP proporciona los siguientes módulos:

1.WP Manager: se utiliza para administrar la autorización y el uso de los módulos de complemento. Los complementos están diseñados por los desarrolladores y pueden ser cargados por la aplicación de destino (host) después de la confirmación por parte del usuario.

2. Cargador: invisible para usuarios y desarrolladores, pero WP Manager lo carga en la aplicación de destino.

3. El paquete jar utilizado para desarrollar el SDK: walxpluginsdk.jar. Los desarrolladores deben importar el paquete jar al proyecto.

4. Módulo principal: este módulo lo proporciona el propio WP, es un complemento que viene con el programa y se utiliza para el desarrollo y la depuración, sus funciones básicas son:

(1) monitoreo de AMS, es decir, monitorear la llamada de la interfaz de la aplicación de destino al servicio ActivityManagerService;

(2) Monitoreo de actividad, esto en realidad separa la función de AMS para iniciar la Actividad;

(3) Ver Vista de la aplicación: se utiliza para ver todas las listas de Ver y la información en Actividad y Ventana;

(4) Ver componentes de la aplicación: se utiliza para ver los datos de los cuatro componentes principales, incluida toda la información del objeto creado;

(5) Exportar datos de la aplicación: se utiliza para extraer archivos en el directorio privado bajo el nombre del paquete aplicación/datos/datos.

2. ¿Qué puede hacer el marco de WP?

WP proporciona principalmente un conjunto de estándares de desarrollo simples, y los desarrolladores pueden diseñar funciones por sí mismos, como las propias necesidades del desarrollador, como monitorear llamadas de aplicaciones, etc. Por supuesto, también puede monitorear solicitudes de red, pero debido a la prisa , el módulo propio del marco no se ha implementado. Luego están las necesidades de los usuarios, como la personalización de la aplicación, etc., interceptar llamadas API después de que se inicia la aplicación host, modificar la interfaz de la aplicación, reemplazar los propios datos, etc., o poder implementar una función similar a la red de WeChat. captura de sobres, pero no puede realizar enlaces globales, solo se pueden modificar llamadas de interfaz simples a través del proxy y se pueden obtener datos del objeto. Entonces, a diferencia de algunas herramientas de depuración que solo se pueden usar en la fase de desarrollo, se puede usar completamente en la práctica para realizar cambios duraderos en la aplicación.

Principio de implementación: el módulo desarrollado, es decir, el código central en el apk, estará en el mismo proceso que la aplicación de destino, lo que equivale a la tecnología de inyección de gancho o tecnología de inyección dex, para que puedan acceder a los datos entre sí. y el administrador de WP inyectará un archivo dex, utilizado para obtener control de inicio, cargar módulos autorizados por el usuario y luego volver a firmar la aplicación de destino. Cabe señalar que algunas aplicaciones realizarán la verificación de firma, por lo que es posible que no puedan iniciarse. En cuanto a cómo omitir el mecanismo de verificación, esto debe implementarse más adelante. Puede que sea necesario analizar la aplicación específica e incluso usarla. ida, porque muchas aplicaciones tienen una capa nativa de código subyacente.

Ahora que hemos terminado de hablar de las funciones, hablemos de cómo usarlas.

Aquí hay algunas fotos:

Los siguientes son los datos de WeChat obtenidos:

Datos de seguimiento de WeChat ams:

Los datos de la interfaz de inicio de sesión de WeChat y el número de teléfono móvil los completé casualmente:

Primero, debe descargar las herramientas de desarrollo de WP desde la dirección proporcionada al final del artículo y luego instalar la aplicación de administrador de WP. El siguiente ejemplo explica cómo modificar el color del botón de la interfaz de bienvenida de WeChat.

 Captura de pantalla del código principal:

Ahora abra Android Studio para crear un módulo, complete el nombre del paquete, luego importe el paquete jar, sincronice el proyecto, cree una nueva clase de entrada de inicio, por ejemplo, llamada Main, luego implemente la interfaz IWalxPluginMain, anule los métodos onLoadModule y onMenuItemClick y luego agregue lo siguiente al
código onLoadModule para monitorear el ciclo de vida de la actividad:

WalxHelper.registerActivityListener(context, this);

Agregue su propio código de implementación en onMenuItemClick:

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


        
Finalmente, agregue el siguiente código al método onActivityResumed para monitorear la interfaz de inicio de sesión de bienvenida de WeChat y modificar el color del botón de inicio de sesión:

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

El código completo es el siguiente:

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

    }
}

Finalmente, cree un directorio de activos en src/main y cree un archivo walxplugin.json en el directorio, el formato de archivo es el siguiente:

{   "desc":"Módulo de prueba",   "targetPackages":"com.tencent.mm",   "mainClass":"com.zwxuf.myplugin.Main",   "menu":[     {       "id":1000,       "nombre ":"Elemento del menú de prueba"     }   ] }









Significado del campo:

desc: descripción del módulo;
targetPackages: la aplicación de destino que será inyectada por el módulo, es decir, el nombre del paquete de la aplicación que se modificará. Varios nombres de paquetes están separados en inglés. Si desea inyectar todas las aplicaciones, simplemente complete *; mainClass : clase principal
, inicio de la aplicación Este método se volverá a llamar más tarde y se agregará su propio código de inicialización en este método;
menú: elemento de menú, formato de matriz, este menú se mostrará cuando haga clic en Aplicar en WP Manager;

Como se muestra en la figura:

Representación final en ejecución:

Cada vez que inicie WeChat a partir de ahora, su botón de inicio de sesión siempre será rojo. Sin embargo, el borde del botón tiene esquinas cuadradas. Es fácil cambiarlo a esquinas redondeadas. Cree un drawable.xml en el módulo, agregue una forma de esquina redondeada, luego use WalxHelper.getDrawable para obtener el recurso dibujable y luego configúrelo como el fondo del botón.

Nota: Dado que está escribiendo un módulo, los recursos de la aplicación no se pueden cargar, así que no utilice el método de referencia de recursos que comienza con R.*, sino utilice los métodos proporcionados por la clase de herramienta WalxHelper, como WalxHelper.getLayout. método para
obtener un diseño, WalxHelper.getDrawable se utiliza para obtener una imagen.

Usando actividad:

Cree una clase, herede la clase WalxPluginUI y luego use todos los métodos de Actividad en la clase. No use startActivity del sistema al iniciar, sino use el método startPluginUI en WalxHelper.

No utilice métodos como setContentView(R.layout.activity_main) en la clase Actividad, utilice el siguiente código en su lugar:

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


Finalmente, exporte el módulo apk, instálelo manualmente o a través de WP Manager, y luego autorice la apertura del módulo. Si el módulo se muestra sin autenticar, significa que el módulo no ha sido autorizado por el usuario y no se puede utilizar. En este momento , debe hacer clic para habilitar la autorización Además, desinstale WP Management Después de instalar el servidor, todos los módulos dejarán de estar autenticados y requerirán una nueva autorización.

Después de instalar el módulo, debe instalar la aplicación que desea modificar. Para la primera instalación, primero debe desinstalar la aplicación. Para usar el módulo WeChat, debe reinstalar WeChat. Primero haga una copia de seguridad de sus datos.

Cómo utilizar la clase de herramienta 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();


        
Las funciones restantes las puede estudiar usted mismo.


Precauciones:

1. Debido a la nueva firma, es posible que algunas aplicaciones no puedan firmar. En este caso, puede ingresar al administrador de archivos, buscar el archivo singed.apk en el almacenamiento interno y usar apksigner para firmar temporalmente el archivo en su computadora. Puede usar su propio almacén de claves para firmar el archivo. Seguimiento Se mejorará el método de firma.

2. Algunas aplicaciones son aplicaciones preinstaladas que vienen con el sistema. Es posible que estas aplicaciones no estén firmadas o instaladas, así que no utilice estas versiones. Se recomienda volver a descargar la versión original de Internet para su instalación.

3. Algunas aplicaciones se instalan correctamente, pero no se pueden iniciar o fallan. En este momento, puede reinstalar la aplicación usando WP y cancelar las dos opciones de "Crear una nueva entrada" y "Desactivar la entrada original" e intentarlo nuevamente. .

El significado de crear una nueva entrada: es decir, asignar un ícono de inicio a la aplicación. Se mostrarán dos íconos de aplicación en el escritorio, pero los nombres son diferentes. Uno es el nombre original y el otro se llama entrada del módulo. Cuando Al comenzar, haga clic en la entrada del módulo para iniciar la aplicación en lugar de hacer clic en el icono de la aplicación original para iniciar. Si esta opción no está marcada, el complemento solo se puede activar a través de WP al iniciar la aplicación y no se puede cargar haciendo clic en el escritorio.

El significado de deshabilitar la entrada original es eliminar la declaración de la interfaz de inicio original de la aplicación y reemplazarla con una nueva entrada. Después de marcar esta opción, solo se generará un ícono en el escritorio. En este momento, simplemente haga clic normalmente para comenzar. la aplicación.

¿Por qué WP no utiliza el método de servicio para iniciar el código? Debido a que el servicio no se puede iniciar después de detener la aplicación, la aplicación tiene el indicador FLAG_STOPPED en este momento.

Dirección de descarga temporal de Baidu Netdisk:

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

Código de extracción: 1234

Descargar desde este sitio: https://download.csdn.net/download/zzmzzff/88008663

Supongo que te gusta

Origin blog.csdn.net/zzmzzff/article/details/131545443
Recomendado
Clasificación