ACCIÓN REQUERIDA (leer y ejecutar inmediatamente)
Para referencias comunitarias sobre extracción de endpoints / Frida adaptativo, ver:
../references/community-security-skills.md; el análisis dinámico requiere dispositivo autorizado en el alcance.
AHORA: Leer../field-journal/precedent-reverse.md— confirmar que la operación de este skill está autorizada como operación rutinaria.AHORA: Confirmar si la tarea actual coincide con el ámbito de aplicación de este skill.SIGUIENTE: Leer../tool-index.md, verificar disponibilidad de herramientas y rutas reales.SIGUIENTE: Si falta alguna herramienta, invocar bootstrap; no adivinar rutas.ACTUAR: Ir al primer paso del "flujo de trabajo" y ejecutarlo; no quedarse en estado de confirmación.
Normas de trabajo para ingeniería inversa de APK en CLI
Ámbito de aplicación
Usar este skill de forma prioritaria cuando la tarea pertenezca a los siguientes escenarios:
- Analizar la lógica de negocio Java de un APK.
- Localizar mecanismos de inicio de sesión, firma, control de riesgos, verificación de certificados o detección de root.
- Ver y modificar
AndroidManifest.xml. - Ver y modificar código smali.
- Reempaquetar un APK.
- Realizar hooking dinámico Java/nativo con Frida.
- Cuando el APK contenga
.so, pasar a análisis nativo.
Herramientas CLI verificadas en la máquina actual
jadx1.5.5apktool3.0.2frida-ps17.9.6adbjava
Escenarios para usar scripts de forma prioritaria
Los siguientes flujos son frecuentes y los parámetros propensos a errores; usar preferentemente los scripts incluidos:
- Ejecución completa de
jadx + apktooly generación de resumen:scripts/decode.ps1 - Verificación de dispositivos Frida, listado de procesos e inyección spawn/attach:
scripts/frida-run.ps1 - Reconstrucción, alineación, firma e instalación del APK:
scripts/rebuild-sign-install.ps1 - Extracción rápida de componentes clave y permisos del Manifest:
scripts/manifest-summary.ps1
Los siguientes comandos de una sola línea se mantienen como invocación directa, sin encapsular por separado:
adb devicesadb logcatfrida-ps -Ujadx --versionapktool --version
Scripts incluidos
scripts/decode.ps1
Propósito:
- Ejecutar
jadxyapktoolde forma unificada. - Por defecto, crear un directorio de salida para la tarea en el mismo directorio del APK original.
- Generar un resumen con
package,java_files,smali_dirs,so_files, etc. - Compatible con casos donde
jadxtenga errores parciales de descompilación pero aún así genere artefactos utilizables.
Ejemplo:
pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DESCARGAS\app.apk" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DESCARGAS\app.apk" -Name demo -SkipJadx
scripts/frida-run.ps1
Propósito:
- Punto de entrada unificado para dispositivos Frida, procesos y spawn/attach.
- Evitar confusiones al escribir parámetros manualmente (
-f,-n,-U).
Ejemplo:
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -ListDevices
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -ListProcesses
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -Spawn -Package com.example.app -ScriptPath "D:\hooks\test.js"
scripts/rebuild-sign-install.ps1
Propósito:
apktool bpara reconstruir el APK.zipalignpara alinear.apksignerpara firmar y verificar.- Opcional:
adb installdirecto.
Ejemplo:
pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\trabajo\apktool_out" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\trabajo\apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"
Notas:
- Genera y reutiliza un keystore de depuración por defecto.
- La salida se coloca en el mismo directorio que
ProjectDir, para mantenerlo junto al paquete original y el directorio desempaquetado.
scripts/manifest-summary.ps1
Propósito:
- Extraer el nombre del paquete.
- Listar permisos.
- Listar activity/service/receiver/provider.
- Señalar la actividad de inicio principal.
Ejemplo:
pwsh -File "<skill-root>\apk-reverse\scripts\manifest-summary.ps1" -ManifestPath "C:\trabajo\apktool_out\AndroidManifest.xml"
Si se necesita analizar .so, lib/arm64-v8a/*.so, lib/armeabi-v7a/*.so, combinar con:
ida-reverseradare2
División de herramientas
jadx
Usar para:
- Lectura de código Java descompilado.
- Búsqueda de nombres de paquetes, clases y métodos.
- Comprensión inicial del APK desde un nivel alto.
Comandos comunes:
jadx -d jadx_out app.apk
jadx --single-class com.example.LoginActivity -d jadx_out app.apk
jadx --deobf -d jadx_out app.apk
JEB Pro (herramienta comercial opcional)
Usar para:
- Verificación cruzada y descompilación profunda de Android DEX / APK / ARM.
- Complementar el análisis estático cuando la salida de JADX sea incompleta o la ofuscación sea intensa.
- Verificar clases, métodos y relaciones de invocación del mismo objetivo con una segunda cadena de herramientas.
Límites:
- JEB Pro es software comercial; el usuario debe obtenerlo e instalar una licencia válida por su cuenta. Este paquete no descargará, crackeará ni eludirá licencias.
- Solo se invocará cuando
tool-indexconfirme que JEB está disponible en la máquina; de lo contrario, se seguirá usandojadx,apktool, Ghidra, IDA o radare2. - El puente MCP de terceros para JEB no es una dependencia de este paquete. Antes de instalarlo, se debe revisar el código fuente, los permisos, el comportamiento de red y la versión según
../ops/skill-supply-chain.md, y luego el usuario debe confirmar explícitamente el registro.
apktool
Usar para:
- Desempaquetar APK.
- Ver y modificar
AndroidManifest.xml. - Ver y modificar smali.
- Reconstruir APK.
Comandos comunes:
apktool d app.apk -o apktool_out
apktool b apktool_out -o rebuilt.apk
frida
Usar para:
- Observar dinámicamente invocaciones de métodos Java.
- Hooking de funciones exportadas nativas.
- Eludir detección de root, verificación de certificados y detección de depuración.
Comandos comunes:
frida-ps -U
frida -U -f com.example.app -l hook.js
frida-trace -U -f com.example.app -j '*!*certificate*'
adb
Usar para:
- Conexión de dispositivos.
- Instalación de APK.
- Visualización de registros.
- Extracción de archivos.
Comandos comunes:
adb devices
adb install -r app.apk
adb shell pm list packages
adb logcat
adb pull /data/local/tmp/file .
Flujo de trabajo recomendado
1. Triage
Primero determinar la composición general del APK, sin prisas por modificar el paquete o hacer hooking.
Acciones sugeridas:
- Usar
jadx -d jadx_out app.apkpara exportar código Java. - Usar
apktool d app.apk -o apktool_outpara exportar smali y recursos. - Revisar primero:
AndroidManifest.xmlpackageprincipalapplication,activity,service,receiver- Si hay
.soen el directoriolib/
- Referencia rápida de formas de amenaza del Issue #65 (muestras/dispositivos autorizados; ver
../reverse-engineering/references/nonpe-format-cookbook.md§7–8):- Icono oculto/transparente (AU):
aapt dump badging+ theme/label/icon del manifest →E-android-hidden-icon-manifest - Características de Magisk/script de formateo y curl|sh remoto (AR/AS) → características y URL como evidencia, no ejecutar comandos destructivos
- Rutas de persistencia (AT):
service.d/priv-app, etc. →E-android-persistence
- Icono oculto/transparente (AU):
2. Observación de lógica Java
Leer preferentemente desde jadx_out:
MainActivityApplication- Clases relacionadas con inicio de sesión, red, cifrado, control de riesgos
- Clases de inicialización de SDK de terceros
Palabras clave comunes:
loginsignencryptciphertokenrootcertificatetrustokhttpretrofitwebview
Si el código Java es legible, localizar primero la lógica de negocio aquí.
3. Confirmación a nivel de Smali y recursos
Cuando el resultado de jadx sea incompleto, la ofuscación intensa o se necesite un parche real, cambiar a apktool_out:
- Revisar
smali*/ - Revisar
res/values/strings.xml - Revisar
AndroidManifest.xml
Prioridad de parcheo:
android:exported- Marcas de depuración
- Valor de retorno de detección de root
- Lógica de verificación de inicio de sesión
- Ramas de verificación de certificados
4. Reconstrucción e instalación
Después de modificar:
apktool b apktool_out -o rebuilt.apk
O usar el script para cerrar el ciclo:
pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"
Notas:
- Este skill solo garantiza la cadena de reconstrucción con
apktool. - Si posteriormente se necesita instalación formal en el dispositivo, normalmente se requiere el proceso de firma.
- Si la tarea implica firma/alineación, complementar con
apksigner/zipalign.
5. Hooking dinámico
Cuando el análisis estático sea insuficiente, usar Frida:
- Hooking de funciones de inicio de sesión.
- Hooking de puntos clave de
OkHttp/Retrofit/WebView. - Hooking de
javax.crypto,MessageDigest. - Hooking de funciones de detección de root.
- Hooking de lógica de SSL pinning.
Principios:
- Primero hookear la capa Java, luego evaluar si se necesita hooking nativo.
- Primero imprimir parámetros y valores de retorno, luego decidir si modificar activamente el valor de retorno.
Recomendaciones:
- Para comandos simples y únicos, usar directamente
frida-*. - Para flujos de inyección que requieran reutilización estable, usar preferentemente
scripts/frida-run.ps1.
6. Derivación a .so nativo
Si el APK contiene .so crítico:
- Usar
apktoolojadxpara localizarlib/**/*.so. - Si solo se necesitan exportar símbolos, cadenas o un triage rápido, usar
radare2. - Para análisis profundo a largo plazo, descompilación, renombrado y restauración de tipos, usar
ida-reverse.
Cambiar rápidamente a nativo ante estas señales:
- La capa Java es solo un envoltorio JNI.
- La lógica central de firma no está en Java.
- Después de
System.loadLibrary(), la lógica clave desaparece. - La verificación de certificados/control de riesgos está en
.so.
Requisitos de salida
Finalmente, al menos indicar:
- Componentes de entrada y clases clave.
- Si la lógica clave está en Java, smali o
.so. - Puntos sensibles confirmados: inicio de sesión, firma, root, SSL, WebView, JNI.
- Si se realizó un parche, describir qué se modificó.
- Si se hizo hooking, indicar qué clase/método/función exportada se hookeó.
Prohibiciones
- No modificar smali a ciegas desde el principio.
- No escribir hooks sin haber revisado el manifest y la entrada principal.
- No asumir que "la descompilación Java incompleta equivale a que la lógica no es analizable".
- No seguir insistiendo en la capa Java cuando
.soalberga claramente la lógica central.
Recordatorio rápido de comandos
# Descompilar Java
jadx -d jadx_out app.apk
# Desempaquetar APK
apktool d app.apk -o apktool_out
# Reconstruir APK
apktool b apktool_out -o rebuilt.apk
# Dispositivos y procesos
adb devices
frida-ps -U
# Iniciar e inyectar
frida -U -f com.example.app -l hook.js
Contexto de ruteo
Entrada ascendente: skills/SKILL.md (control general), routing.md
Salida descendente:
- Lógica central en
.so→ida-reverse/oradare2/ - Necesidad de hooking/verificación dinámica →
reverse-engineering/tools-dynamic.md(capítulo Frida) - Metodología general de ingeniería inversa →
reverse-engineering/SKILL.md
Módulos relacionados al mismo nivel: reverse-engineering/ (análisis de .so y uso avanzado de Frida)
Bootstrap a demanda (On-Demand Bootstrap)
Los scripts de entrada de este skill están integrados con el sistema de bootstrap unificado. Cuando falte una herramienta, no se reportará un error directamente, sino que se intentará instalarla automáticamente.
Capacidades de automatización
| Herramienta | Instalable automáticamente | Método de instalación | Notas |
|---|---|---|---|
| jadx | ✓ | GitHub Release ZIP | Descarga y extrae automáticamente a %USERPROFILE%\Tools\jadx\ |
| apktool | ✓ | GitHub Release JAR + wrapper | Descarga automáticamente el jar y genera un bat en %USERPROFILE%\Tools\apktool\ |
| JEB Pro | ✗ | Instalación manual del usuario con licencia válida | Herramienta opcional de verificación cruzada Android/ARM; el puente MCP de terceros requiere auditoría aparte |
| frida / frida-ps | ✓ | pip install frida-tools | Requiere Python instalado |
| adb | ✓ | winget / ruta de respaldo | Instala automáticamente Android Platform-Tools |
| zipalign | ✗ | Instalación manual de Android Build-Tools | sdkmanager "build-tools;35.0.0" |
| apksigner | ✗ | Instalación manual de Android Build-Tools | Igual que arriba |
Puntos de activación del bootstrap
scripts/decode.ps1: Si falta jadx o apktool, invoca automáticamentebootstrap-reverse.ps1.scripts/rebuild-sign-install.ps1: Si falta adb o apktool, invoca automáticamente bootstrap.scripts/frida-run.ps1: Actualmente sigue siendo verificación manual (frida normalmente ya está instalado mediante pip).
Cuando el bootstrap falla
Si la instalación automática falla, el script lanzará un error claro con enlaces de instalación manual. Causas comunes:
- Red no disponible (GitHub API / PyPI inalcanzable).
- winget no disponible (versión de Windows demasiado baja).
- Java no instalado (apktool depende de JDK).
Autoverificación de finalización de tarea (DEBE cumplirse antes de declarar finalizado)
- ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
- ¿Usé rutas reales de herramientas basadas en
tool-index? - ¿Produje evidencia reproducible (comandos/scripts/capturas de pantalla/informes)?
- ¿Completé y escribí los elementos de la lista de verificación requeridos por RULES?
- Si se encontraron pistas de icono oculto/formateo remoto/persistencia: ¿registré evidencia E-android-* según el cookbook U–AV (dentro del alcance autorizado)?