Cómo ejecutar módulos Xposed sin acceso root usando NPatch
Cuando necesitas explorar la aplicación Android de otra persona, evadir SSL pinning, o activar la depuración oculta, el instinto habitual es recurrir a Magisk o KernelSU. Sin embargo, rootear un teléfono de uso diario solo para una utilidad es inconveniente. Los clientes bancarios comienzan a quejarse, Play Integrity se rompe, y en dispositivos corporativos root está directamente prohibido por políticas de seguridad.
Durante mucho tiempo este problema fue resuelto por el proyecto LSPatch. Tomaba un APK listo, incrustaba un runtime de LSPosed y los hooks necesarios dentro, después de lo cual la aplicación se ejecutaba con módulos Xposed sin privilegios del sistema. Cuando el LSPatch original dejó de mantenerse activamente, una bifurcación llamada NPatch (Neo LSPatch) intervino para llenar el vacío.
Qué hace esta herramienta
El proyecto toma un archivo APK normal y lo reempaqueta. Dentro del archivo inyecta los archivos DEX del loader y las bibliotecas nativas (.so) responsables de interceptar las llamadas ART (Android Runtime). Cuando se inicia la aplicación parcheada, esta capa incrustada se ejecuta primero. Inicializa el entorno de ejecución de la API de Xposed directamente dentro del proceso de aplicación aislado.
Para el resto del sistema, solo estás ejecutando un programa de usuario normal. No necesita derechos de superusuario, no toca la partición del sistema /system, y no intenta reemplazar zygote. Todas las modificaciones y hooks están estrictamente confinadas dentro del sandbox de ese paquete específico.
Se admiten versiones desde Android 9 hasta las versiones actuales de Android compatibles con la base de código JingMatrix/LSPosed.
Cómo funciona el proceso de parcheo
Bajo el capó, NPatch se basa en el trabajo de varios proyectos de código abierto:
- LSPosed maneja las llamadas a la API de Xposed y la intercepción de métodos en tiempo de ejecución en ART.
- Xpatch proporcionó el concepto central de inyectar código en un APK sin intervención del sistema.
- Apkzlib se utiliza para descomprimir, modificar el archivo zip y reempaquetar rápidamente sin una descompilación completa a smali.
A diferencia de la combinación clásica de apktool + jarsigner, donde descompilar proyectos grandes ofuscados frecuentemente falla con errores, este enfoque es más rápido y confiable. Los recursos y el manifest se ajustan directamente, después de lo cual se inyecta el loader.
Opciones de uso
Puedes trabajar con la herramienta de dos maneras: en una computadora a través de la terminal o directamente en tu teléfono.
Opción 1. Consola a través de jar
Si estás automatizando el ensamblaje de builds de prueba en CI o analizando software en una estación de trabajo, es más conveniente descargar el archivo jar listo desde los releases:
# Базовый синтаксис запуска утилиты
java -jar npatch.jar [аргументы]
La utilidad toma el APK fuente y los módulos a incrustar como entrada. La salida es un paquete modificado listo que solo necesita ser firmado con una clave de prueba e instalado a través de adb install.
Opción 2. Gestor en el dispositivo
Para tareas cotidianas es más simple descargar manager.apk desde la sección de releases en GitHub.
- Instala el gestor en tu dispositivo Android.
- Selecciona una aplicación instalada o un archivo APK local.
- Especifica los módulos de Xposed que deben cargarse al inicio.
- El gestor crea un nuevo paquete de instalación y sugiere eliminar el original antes de instalar la modificación.
Dado que la firma de la aplicación cambia inevitablemente durante el reempaquetado, no podrás actualizar el programa original sobre él. Necesitarás eliminarlo, perdiendo datos locales si no se sincronizaron.
Casos de uso prácticos
Uso regularmente estos patchers en ingeniería inversa y pruebas de clientes móviles.
- Evadir SSL Pinning para interceptación de tráfico. Envolver el tráfico en Burp Suite o mitmproxy es mucho más simple cuando puedes incrustar un módulo como TrustMeAlready o JustTrustMe directamente en el APK. No necesitas empujar certificados al almacén del sistema a través de Magisk.
- Instrumentación y recolección de logs. Si necesitas ver qué argumentos se están pasando a métodos privados en un SDK de terceros, escribes un pequeño hook de Xposed, lo inyectas en el build, y registras la pila de llamadas en logcat.
- Probando módulos en dispositivos limpios. Los desarrolladores de módulos encuentran útil verificar cómo se comporta su código de forma aislada sin LSPosed del sistema.
Precauciones y limitaciones
El enfoque sin root tiene límites naturales que debes conocer de antemano:
- Los módulos del sistema no funcionarán. Si un hook está diseñado para cambiar el comportamiento de
SystemUI, las cortinas de notificaciones, o los servicios de Android, NPatch es impotente aquí. Vive estrictamente dentro del proceso del usuario. - Algunas aplicaciones con anti-cheat estricto o autoprotección avanzada (verificaciones de integridad de firma, detección de archivos .so externos) detectarán la manipulación y saldrán al inicio.
- La documentación en el repositorio todavía es escasa. La mayoría de los detalles se discuten en el chat de Telegram del proyecto, y las builds recientes a menudo necesitan extraerse directamente de los artefactos de GitHub Actions.
¿Vale la pena probarlo?
Si periódicamente necesitas explorar las entrañas de una aplicación Android de terceros o probar rápidamente una hipótesis sin reflashear tu dispositivo, añade npatch.jar a tu caja de herramientas. El proyecto mantiene el código base de LSPatch actualizado y maneja el reempaquetado de aplicaciones para versiones más recientes de Android sin problemas.
Proyectos relacionados