Bibliografía y comunidad
1. Qué es y por qué existe
Los dos documentos anteriores cubren lo normativo: la «especificación» cuando la hay y el «código» cuando no. Este cubre el resto: quién ha medido este ecosistema, quién lo explica bien y dónde se aprende a trabajar en él.
Y cierra con la sección más práctica del bloque, la 8: cómo mantenerla viva. Una documentación de treinta y cuatro documentos con fechas, versiones y URLs empieza a pudrirse el día siguiente de escribirse. La «sección 8 · Cómo mantener esta documentación al día» dice qué se pudre primero, qué mirar y con qué órdenes comprobarlo dentro de un año.
1.1 Criterio de admisión
Tres reglas, y la tercera es de alcance:
- Autor identificable. Nada de agregadores anónimos, ni de sitios que reescriben la documentación de Android con publicidad encima. Si no se sabe quién lo firma, no entra.
- Verificado. Cada cita académica de la «sección 3 · Literatura académica» tiene autores, año y venue comprobados contra el PDF o la página institucional, no contra una lista de terceros. La «sección 3.7 · Lo que se quedó fuera, y por qué» dice qué se quedó fuera por no poder confirmarlo, que es información tan útil como la lista misma.
- Alcance. Aquí se documentan protecciones para detectar e informar, no para neutralizar. Aquí eso se traduce en: literatura que analiza packers, PairIP o Play Integrity, sí; recetas de bypass o de desempaquetado paso a paso, no. La «sección 3.3 · Packers» detalla los dos casos frontera que sí entran y por qué, y la 3.7 los que se dejaron fuera.
2. Cómo leer la sección académica
Los papers de esta área envejecen de una forma peculiar: la metodología sigue siendo válida mucho después de que las cifras dejen de serlo. Un estudio de 2018 que mide qué porcentaje de aplicaciones de Google Play están ofuscadas ya no describe el Play de hoy, pero su forma de detectar la ofuscación sigue sirviendo, y su cifra sigue siendo el punto de comparación.
Por eso cada entrada dice qué aporta que siga siendo cierto, no solo de qué va.
Todos los enlaces de la «sección 3 · Literatura académica» se comprobaron el 12 de agosto de 2026 y devuelven HTTP 200.
Se han elegido deliberadamente las copias de autor o institucionales en lugar de los DOI:
dl.acm.org y sciencedirect.com devuelven 403 a cualquier cliente que no sea un navegador,
lo que los hace inútiles para una documentación que se verifica con guiones (ver «§8.4 · Informe de enlaces al 13 de agosto de 2026»).
3. Literatura académica
3.1 Prevalencia y técnicas de ofuscación
Wermke, Dominik; Huaman, Nicolas; Acar, Yasemin; Reaves, Bradley; Traynor, Patrick; Fahl, Sascha — «A Large Scale Investigation of Obfuscation Use in Google Play». ACSAC 2018, pp. 222–235. DOI 10.1145/3274694.3274726. https://dwermke.com/pdf/conf-acsac-wermke18.pdf · preprint: https://arxiv.org/abs/1801.02742
Mide la ofuscación en 1,7 millones de aplicaciones gratuitas de Google Play. El resultado que se cita en todas partes: solo alrededor del 24,92 % están ofuscadas por decisión del desarrollador, pese a que la herramienta viene integrada en la cadena de compilación.
Qué aporta hoy: el punto de comparación. Cuando uno mide su propio muestrario y le sale una proporción, esta es la cifra contra la que se contrasta. Lo usa «40-ofuscacion/02 §9».
Dong, Shuaike; Li, Menghao; Diao, Wenrui; Liu, Xiangyu; Liu, Jian; Li, Zhou; Xu, Fenghao; Chen, Kai; Wang, XiaoFeng; Zhang, Kehuan — «Understanding Android Obfuscation Techniques: A Large-Scale Investigation in the Wild». SecureComm 2018, LNICST 254, pp. 172–192. DOI 10.1007/978-3-030-01701-9_10. https://diaowenrui.github.io/paper/securecomm18-dong.pdf · preprint: https://arxiv.org/abs/1801.01633
La taxonomía de referencia: renombrado de identificadores, cifrado de cadenas, reflexión de Java y packing, cada uno medido por separado en el ecosistema real.
Qué aporta hoy: el vocabulario. Cuando aquí se habla de «cuatro familias de transformación» se está usando esta clasificación. También la observación sobre los alfabetos de renombrado, que es una huella práctica de identificación.
Niroshan, Akila; Seneviratne, Suranga; Seneviratne, Aruna — «State of Obfuscation: A Longitudinal Study of Code Obfuscation Practices in Google Play Store». SAC 2025. DOI 10.1145/3672608.3707860.
⚠️ Citado sin enlace verificable. Los metadatos se confirmaron en el catálogo de ACM, pero
no se ha encontrado ninguna URL que responda: tanto dl.acm.org como la resolución del DOI
devuelven 403. Se incluye porque es el estudio longitudinal más reciente localizado sobre el
tema y quien tenga acceso institucional lo querrá; no se ha podido leer, y por tanto no se
apoya en él ninguna afirmación de estos documentos.
3.2 Deofuscación
Bichsel, Benjamin; Raychev, Veselin; Tsankov, Petar; Vechev, Martin — «Statistical Deobfuscation of Android Applications». ACM CCS 2016, Viena. DOI 10.1145/2976749.2978422. https://files.sri.inf.ethz.ch/website/papers/deguard.pdf · ficha: https://www.sri.inf.ethz.ch/publications/bichsel2016statistical
DeGuard, del grupo SRI de la ETH de Zúrich. Revierte la ofuscación de layout de ProGuard
mediante un modelo probabilístico entrenado sobre Big Code: dado un nombre a.b.c, predice
el nombre original a partir del contexto estructural. Recupera el 79,1 % de los nombres.
Qué aporta hoy: es la referencia obligada de la frontera entre deofuscación
determinista y heurística, que es la distinción que ordena
«40-ofuscacion/05». Aplicar un mapping.txt es
determinista y exacto; esto es estadístico y falla el 20 % de las veces. Confundir ambas cosas
es el error conceptual más frecuente en este dominio.
El precursor metodológico, por si hace falta la base teórica: Raychev, Veselin; Vechev, Martin; Krause, Andreas — «Predicting Program Properties from Big Code». ACM POPL 2015 (https://www.sri.inf.ethz.ch/publications/raychev2015predicting). Es JSNICE, sobre JavaScript; DeGuard aplica la misma máquina de predicción estructurada a Android. El motor está publicado: https://github.com/eth-sri/Nice2Predict
⚠️ Estado de la demo pública apk-deguard.com: el 12 de agosto de 2026 respondía por
HTTP (200) y servía todavía la página real de DeGuard, pero por HTTPS devolvía 502 con
un certificado de otro dominio (debin.ai, que a su vez no resuelve). El 24 de septiembre
ya no contesta: el dominio resuelve, pero la conexión no llega a establecerse ni por HTTP
ni por HTTPS. Se cita el paper, no la demo.
3.3 Packers
Duan, Yue; Zhang, Mu; Bhaskar, Abhishek Vasisht; Yin, Heng; Pan, Xiaorui; Li, Tongxin; Wang, Xueqiang; Wang, XiaoFeng — «Things You May Not Know About Android (Un)Packers: A Systematic Study based on Whole-System Emulation». NDSS 2018, San Diego. https://www.ndss-symposium.org/wp-content/uploads/2018/02/ndss2018_04A-4_Duan_paper.pdf
DroidUnpack. El primer estudio sistemático de los packers de Android mainstream: qué hacen, cómo se comportan en tiempo de ejecución y qué implicaciones de seguridad tienen.
Caso frontera, y se incluye. El trabajo presenta un framework genérico de desempaquetado, lo que lo acerca al límite del alcance. Se incluye porque su objeto declarado es el estudio sistemático del fenómeno, no instrucciones contra un producto comercial concreto, y porque la caracterización del modelo stub más payload cifrado que sostiene «40-ofuscacion/03» viene de aquí. Lo que se toma de este trabajo es la descripción del modelo y las huellas, no el método de extracción.
Dong, Zikan; Liu, Hongxuan; Wang, Liu; Luo, Xiapu; Guo, Yao; Xu, Guoai; Xiao, Xusheng; Wang, Haoyu — «What Did You Pack in My App? A Systematic Analysis of Commercial Android Packers». ESEC/FSE 2022, Industry Track, Singapur. DOI 10.1145/3540250.3558969. https://yaoguopku.github.io/papers/Dong-FSE-22.pdf
PackDiff. Mide qué comportamientos sensibles —permisos, APIs, recogida de datos— añaden siete packers comerciales sin que el desarrollador lo sepa.
Caso frontera, y se incluye. Analiza qué hacen los packers, no cómo evadirlos. Es además el argumento más sólido para la posición del muestrario: un packer no es solo un obstáculo para el análisis, es código de un tercero con capacidades propias dentro de la aplicación, y por eso detectarlo e informarlo tiene valor por sí mismo.
El grupo de Xiapu Luo (PolyU) y la línea de unpacking académico. Existe un conjunto
coherente de trabajos —DexHunter, PackerGrind, Happer, Parema— accesibles en
https://www4.comp.polyu.edu.hk/~csxluo/ (comprobados los cuatro). Los cita
«40-ofuscacion/03», que es el documento donde
corresponden.
Aquí se listan pero no se desarrollan. Son la misma categoría frontera que DroidUnpack: su aportación reutilizable es la caracterización de qué hace cada familia de packer, que es lo que alimenta la detección. Su método de extracción queda fuera del alcance de esta documentación, y esta bibliografía no lo resume.
3.4 Decompilación
Mauthe, Noah; Kargén, Ulf; Shahmehri, Nahid — «A Large-Scale Empirical Study of Android App Decompilation». SANER 2021, Honolulu, pp. 400–410. DOI 10.1109/SANER50967.2021.00044. Best Paper Award. https://www.ida.liu.se/~ulfka17/papers/SANER2021.pdf
Cuantifica los fallos de decompilación sobre 41.172 aplicaciones —3.018 de F-Droid, 13.601 de un rastreo de Google Play y 24.553 muestras de malware—, comparando cuatro decompiladores: jadx, CFR, Fernflower y Procyon. Dos conclusiones que van contra la intuición del sector: la ofuscación es rara incluso en malware, y la mayoría de los fallos de decompilación son errores de implementación de las herramientas, no defensas deliberadas de la aplicación.
Qué aporta hoy: es la fuente de toda la «sección 6 de 30-herramientas/01 · La comparación honesta: qué dicen las mediciones», incluido el 96 % de complementariedad entre decompiladores, y de las cifras de detección de packers por APKiD de «30-herramientas/05 §6.3». Es probablemente el paper más útil de esta lista para quien elige herramienta.
Kargén, Ulf; Mauthe, Noah; Shahmehri, Nahid — «Android decompiler performance on benign and malicious apps: an empirical study». Empirical Software Engineering 28(2):48, 2023. DOI 10.1007/s10664-022-10281-9. https://liu.diva-portal.org/smash/get/diva2:1743022/FULLTEXT01
Es la versión en revista del anterior: repite la metodología y añade 54.945 muestras de malware de AndroZoo, sin fijar tampoco las versiones de los decompiladores. Es la medición pública más reciente que se ha localizado («30-herramientas/01 §6»).
3.5 Firma
Wang, Haoyu; Liu, Hongxuan; Xiao, Xusheng; Meng, Guozhu; Guo, Yao — «Characterizing Android App Signing Issues». ASE 2019. DOI 10.1109/ASE.2019.00035. https://impillar.github.io/files/ase2019sig.pdf
El primer estudio a gran escala de firmas de APK: más de 3 millones de aplicaciones
distintas, de Google Play y de 24 mercados alternativos. Produce una taxonomía de 21
anti-patrones, incluidos Master Key y Janus.
Qué aporta hoy: contexto empírico para «20-firma/». Las vulnerabilidades que «10-formatos/01 §12» describe una a una, aquí están medidas: cuántas aplicaciones reales las presentaban y en qué mercados.
3.6 Infraestructura y datasets
Allix, Kevin; Bissyandé, Tegawendé F.; Klein, Jacques; Le Traon, Yves — «AndroZoo: Collecting Millions of Android Apps for the Research Community». MSR 2016, pp. 468–471. DOI 10.1145/2901739.2903508. https://jacquesklein2302.github.io/papers/2016-androzoo-msr.pdf
El dataset de referencia del área: millones de APK con etiquetado antivirus. Casi todo
estudio empírico posterior de esta lista lo usa como base.
Qué aporta hoy: si alguna vez hay que ampliar el «muestrario» —86 aplicaciones— a una escala estadística, esta es la vía establecida.
Arzt, Steven; Rasthofer, Siegfried; Fritz, Christian; Bodden, Eric; Bartel, Alexandre; Klein, Jacques; Le Traon, Yves; Octeau, Damien; McDaniel, Patrick — «FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Apps». PLDI 2014, Edimburgo. DOI 10.1145/2594291.2594299. https://www.bodden.de/pubs/far+14flowdroid.pdf
Análisis de taint estático sensible al ciclo de vida de Android. 93 % de recall y 86 % de precisión sobre DroidBench.
Qué aporta hoy: está fuera del alcance directo de esta documentación —es análisis de flujo de
datos, no de formato—, pero es la referencia que explica por qué el análisis estático de
Android es difícil más allá del parseo: el ciclo de vida de los componentes no tiene un
main, y eso rompe las técnicas clásicas.
Backes, Michael; Bugiel, Sven; Derr, Erik — «Reliable Third-Party Library Detection in
Android and its Security Applications». ACM CCS 2016, Viena. DOI 10.1145/2976749.2978333.
https://group.cispa.io/bugiel/publication/derr-16-ccs/derr-16-ccs.pdf
(la dirección antigua trust.cispa.saarland/… redirige aquí: el CISPA cambió de dominio)
LibScout: detección de bibliotecas de terceros resistente a la ofuscación, con un estudio longitudinal sobre 96.995 paquetes de 3.590 aplicaciones.
Qué aporta hoy: la técnica —comparar perfiles estructurales en vez de nombres— es directamente aplicable a la deofuscación heurística, porque resuelve el mismo problema: identificar código cuando los nombres ya no sirven.
Aonzo, Simone; Georgiu, Gabriel Claudiu; Verderame, Luca; Merlo, Alessio — «Obfuscapk: An open-source black-box obfuscation tool for Android apps». SoftwareX, vol. 11 (2020), art. 100403. DOI 10.1016/j.softx.2020.100403. Repositorio: https://github.com/ClaudiuGeorgiu/Obfuscapk
La herramienta de ofuscación black-box modular que se usa como generador de ground truth al evaluar detectores. Sus 21 transformaciones son el catálogo de «40-ofuscacion/02 §6».
⚠️ El artículo en sciencedirect.com devuelve 403 a clientes automatizados. Los datos
bibliográficos se confirmaron por otras vías; el enlace útil es el del repositorio.
3.7 Lo que se quedó fuera, y por qué
Parte del valor de una bibliografía es lo que descarta. Estos son los casos:
| Referencia | Motivo |
|---|---|
| Niroshan et al., arXiv:2502.04636 (2025) | Preprint sin venue revisado por pares. Parece relacionado con el artículo de SAC 2025 de «§3.1 · Prevalencia y técnicas de ofuscación», pero el título difiere y no se ha podido verificar que sean la misma publicación; citarlos como equivalentes sería inventar |
| Meng, Zhang, Lu, Chen — «A Longitudinal Study of Android Apps Signing Key Protection», arXiv:2606.21487 (jun. 2026) | Preprint muy reciente sin aceptación en venue confirmada. Temáticamente encaja del todo; se deja anotado para revisarlo en la próxima revisión de la documentación |
| «We Can Still Crack You! General Unpacking Method for Android Packer», Black Hat Asia 2015 | Fuera de alcance. Su objeto es un método general de desempaquetado, es decir, una receta |
| Herramientas de desempaquetado automático de packers comerciales | Fuera de alcance por el mismo motivo, aunque sean públicas y estén bien hechas. Aquí se documenta cómo se detectan, no cómo se extrae el payload |
| DexHunter, PackerGrind, Happer, Parema (PolyU) | Listados en «§3.3 · Packers», no desarrollados aquí. Se toma su caracterización de familias; no su método de extracción |
Nota explícita sobre PairIP. Al consolidar las fuentes del muestrario aparecieron dos recursos sobre PairIP cuyo objeto es revertir la protección: una entrada de blog que reconstruye su máquina virtual y un repositorio de código con el mismo fin. Los cita «40-ofuscacion/04», que es donde se explica qué es PairIP y cómo se detecta.
Esta bibliografía no los recoge, y la omisión es deliberada, no un descuido: el bypass de PairIP queda fuera del alcance sin matices, y un índice bibliográfico que los listara los estaría recomendando como lectura. Aquí la frontera se aplica a la recomendación, no solo a la redacción. Quien necesite saber qué es PairIP tiene el documento de aquí que lo explica; quien busque saltárselo, esta documentación no es su sitio. | Literatura y utilidades de bypass de Play Integrity y PairIP | Fuera de alcance, sin excepción. Ver la nota de abajo |
4. Charlas y presentaciones
Con vídeo o transparencias públicas y comprobadas.
Strazzere, Tim; Sawyer, Jon — «Android Hacker Protection Level 0». DEF CON 22 (2014).
Transparencias: https://media.defcon.org/DEF%20CON%2022/DEF%20CON%2022%20presentations/DEF%20CON%2022%20-%20Strazzere-and-Sawyer-Android-Hacker-Protection-Level-UPDATED.pdf
Vídeo: https://media.defcon.org/DEF%20CON%2022/DEF%20CON%2022%20video%20and%20slides/DEF%20CON%2022%20-%20Tim%20Strazzere%20%26%20Jon%20Sawyer%20-%20Android%20Hacker%20Protection%20Level%200.mp4
El repaso clásico al panorama de protectores de Android: qué familias había, qué hacía cada una y qué las delataba. Tiene más de diez años y las familias concretas han cambiado, pero el marco de análisis no.
Por qué está aquí: Tim Strazzere es el autor de APKiD, la herramienta cuyas reglas YARA sostienen buena parte de «40-ofuscacion/02 §7». Esta charla es el razonamiento que hay detrás de esas reglas.
Stone, Maddie — «Securing the System: A Deep Dive into Reversing Android Pre-Installed Apps». Black Hat USA 2019. Transparencias: https://i.blackhat.com/USA-19/Thursday/us-19-Stone-Securing-The-System-A-Deep-Dive-Into-Reversing-Android-Preinstalled-Apps.pdf Vídeo: https://www.youtube.com/watch?v=U6qTcpCfuFc
Qué cambia al analizar aplicaciones preinstaladas frente a las de usuario, con casos reales de puertas traseras y de modificaciones del framework.
⚠️ Corrección de una atribución frecuente: esta charla se cita a menudo como de DEF CON 27.
Fue Black Hat USA 2019. Se verificó contra el PDF alojado en i.blackhat.com.
Stone, Maddie — «Unpacking the Packed Unpacker: Reversing an Android Anti-Analysis Native Library». Black Hat USA 2018. https://i.blackhat.com/us-18/Thu-August-9/us-18-Stone-Unpacking-The-Packed-Unpacker.pdf
Análisis de una biblioteca nativa anti-análisis real, encontrada por el equipo de Google Play Protect: qué comprobaciones hacía y cómo estaban implementadas.
Por qué es la charla más útil de esta sección para esta documentación. Es la contrapartida práctica de «40-ofuscacion/04»: muestra anti-debug, anti-emulador y comprobaciones de integridad tal como aparecen en un binario real, no en abstracto. El título y la autoría se verificaron en la diapositiva de portada del PDF.
⚠️ www.blackhat.com devuelve 403 a clientes automatizados; el subdominio de contenidos
i.blackhat.com, donde viven los PDF, responde con normalidad. Las páginas de ponente no se
pueden comprobar con guion.
5. Blogs y autores técnicos
Con nombre y trayectoria identificable. La regla es que nunca se cita un blog para un dato que está en la especificación; estos sirven para lo que no está en ninguna parte: el contexto, la historia y los modos de fallo.
| Autor | Sitio | Por qué importa |
|---|---|---|
Connor Tumbleson (iBotPeaches) |
https://connortumbleson.com/ | Mantenedor de apktool desde 2012; lo creó Ryszard Wiśniewski en 2010. Escribe las notas de cada release explicando qué se rompió y por qué. Es la mejor fuente sobre la evolución real del reempaquetado |
| Tim Strazzere y Red Naga | https://rednaga.io/ | Autor de APKiD. Análisis de packers y de huellas de compilador, que es exactamente el material de detección que usa esta documentación |
| Caleb Fenton | https://calebfenton.github.io/ | Coautor de APKiD y autor de Simplify (deofuscación de DEX por ejecución virtual). Escribe sobre los límites reales de la deofuscación automática |
Jay Freeman (saurik) |
https://www.saurik.com/ | El análisis de la vulnerabilidad Master Key (bug 8219321). Es la fuente que cita «10-formatos/01 §12» porque no hay descripción técnica equivalente en la documentación oficial. ⚠️ https://www.saurik.com/id/17 redirige hoy a https://www.saurik.com/masterkey1.html |
| Guardsquare | https://www.guardsquare.com/blog | Los autores de ProGuard y DexGuard. Fuente del análisis de Janus y de la historia de ProGuard (Eric Lafortune, primer commit el 1 de mayo de 2002). Es material de un fabricante: excelente en lo técnico, interesado en lo comparativo |
| Quarkslab | https://blog.quarkslab.com/ | Análisis técnico firmado y reproducible de protecciones reales. Dos entradas relevantes y comprobadas: «A Glimpse Into Tencent's Legu Packer» y «Practical Android Software Protection in the Wild». Los cita «40-ofuscacion/03» |
Cómo usarlos: para el porqué y para la historia. Para el qué, la spec o el código.
6. Foros y comunidad
6.1 Los issue trackers, que son la mejor fuente de modos de fallo
Esta es la recomendación menos obvia y la más rentable del documento.
El conocimiento sobre cómo fallan estas herramientas no está documentado en ningún sitio
salvo en sus issues. Ninguna documentación de apktool dice qué APK concretos no consigue
reempaquetar; los issues sí, con el fichero adjunto y la traza.
| Tracker | URL | Qué se saca |
|---|---|---|
| jadx | https://github.com/skylot/jadx/issues | Casos reales de Code decompiled incorrectly, límites de memoria, DEX que ningún decompilador digiere |
| apktool | https://github.com/iBotPeaches/Apktool/issues | El catálogo de facto de fallos de reempaquetado. Casi siempre con el APK que lo provoca |
| smali / baksmali | https://github.com/google/smali/issues | Casos límite del ensamblado y opcodes nuevos |
| ARSCLib | https://github.com/REAndroid/ARSCLib/issues | Estructuras de resources.arsc que rompen a los lectores |
Cómo se usa bien: buscar por mensaje de error exacto, no por descripción del problema. Ver «50-procesos/04», que es el documento que convierte esto en catálogo.
6.2 Foros
Reverse Engineering Stack Exchange — https://reverseengineering.stackexchange.com/
Preguntas con respuesta razonada y votada. La etiqueta android es la relevante.
⚠️ El listado por etiqueta devuelve 403 a clientes automatizados (Cloudflare); la raíz del
sitio responde con normalidad. Se navega bien desde un navegador.
XDA Developers — https://xdaforums.com/
El foro histórico de la modificación de Android. Sigue siendo el mejor sitio para lo específico
de dispositivo y de ROM.
⚠️ No se ha podido comprobar automáticamente: devuelve 403 tanto a curl como a WebFetch
(protección anti-bot). No se afirma aquí nada sobre su estado más allá de que el dominio
responde rechazando clientes no navegador.
Advertencia de calidad, que vale para los dos: el material de foro es la última opción del
orden de preferencia, y con motivo. Mucho de lo que circula sobre
formatos de APK en foros son cadenas de copiar y pegar de hace ocho años, con datos que ya
eran inexactos entonces. Un dato de foro se contrasta contra el código antes de escribirlo.
7. CTF y material de aprendizaje
Para quien llega al dominio y quiere práctica, no lectura.
Stone, Maddie — «Android App Reverse Engineering 101»
https://github.com/maddiestone/AndroidAppRE · web: https://www.ragingrock.com/AndroidAppRE/
(la ruta https://maddiestone.github.io/AndroidAppRE/ redirige allí)
Taller completo con ejercicios: fundamentos de la aplicación, introducción al reversing,
análisis de DEX, código nativo y ofuscación. Es el mejor punto de partida práctico que
existe, y es gratuito.
OWASP MASTG — Mobile Application Security Testing Guide
https://mas.owasp.org/MASTG/ · repositorio: https://github.com/OWASP/mastg
(el nombre anterior OWASP/owasp-mastg redirige)
La guía de referencia del sector para prueba de seguridad de aplicaciones móviles. Su valor aquí no es la parte de pentesting sino la sistematización: qué se comprueba, en qué orden y con qué herramienta.
OWASP MASTG Crackmes — https://mas.owasp.org/crackmes/
Aplicaciones Android deliberadamente protegidas, con soluciones publicadas. Son el material
de entrenamiento que mejor se ajusta a esta documentación: obligan a leer AXML, a seguir la
lógica hasta .so y a entender comprobaciones de integridad, que es justo lo que documentan
«10-formatos/» y «40-ofuscacion/».
Nota de alcance sobre los crackmes. Resolver un crackme es neutralizar una protección. Se incluye igualmente porque son binarios escritos para ser resueltos, sin usuario ni producto detrás, y porque el objetivo es formativo. La frontera es sobre protecciones de aplicaciones reales de terceros, no sobre ejercicios didácticos. Lo que no entra aquí son writeups cuyo objeto sea saltarse la protección de una aplicación comercial concreta.
8. Cómo mantener esta documentación al día
La sección que hay que leer dentro de un año.
8.1 Qué caduca, y con qué ritmo
| Qué | Ritmo | Dónde está documentado |
|---|---|---|
| Versiones y estado de mantenimiento de las herramientas | Meses. Es lo primero que se rompe | «00-panorama/02» entero, y las fichas de «30-herramientas/» |
Requisitos de Google Play (targetSdkVersion, 16 KB) |
Anual, con fecha conocida | «60-referencias/01 §9», «10-formatos/07», «20-firma/04» |
| Rutas de AOSP y de los repositorios | Meses a años, sin aviso | «60-referencias/02» |
URLs de developer.android.com |
Meses. Reorganizan rutas y dejan redirecciones que un día se retiran | Todos los documentos |
Formatos binarios (DEX, AXML, resources.arsc, ZIP) |
Años. Muy estables | «10-formatos/» |
| Specs de firma | Rara vez. v2 no ha cambiado desde que se publicó | «20-firma/» |
| RFC y estándares externos | Prácticamente nunca | «60-referencias/01 §§10-12» |
La asimetría es la enseñanza: el 80 % del esfuerzo de mantenimiento se va en el 20 % del documentación que habla de herramientas y de requisitos comerciales. Los documentos de formato apenas necesitan tocarse.
8.2 Qué mirar en cada release de Android
Dónde se anuncian los cambios:
| Fuente | Qué trae |
|---|---|
| https://developer.android.com/about/versions | El índice de versiones. De ahí cuelga el behavior changes de cada una |
https://developer.android.com/about/versions/<N>/behavior-changes-all |
La página que hay que leer entera. Los cambios que afectan a toda aplicación, no solo a las que suben targetSdk |
| https://source.android.com/docs/security/bulletin | Boletines de seguridad mensuales. Es donde aparecen las vulnerabilidades de parseo de APK |
| https://developer.android.com/studio/releases | Android Studio y AGP |
| https://android.googlesource.com/platform/frameworks/base/+refs | Las etiquetas. Confirma qué release existe de verdad, frente a lo que anuncia el marketing |
Qué ficheros de AOSP vigilar, en orden de impacto sobre esta documentación:
frameworks/base/libs/androidfw/include/androidfw/ResourceTypes.h— si cambia una estructura aquí, cambia «10-formatos/04» y «10-formatos/05».frameworks/base/tools/aapt2/format/binary/TableFlattener.cpp— cambios en qué escribeaapt2. Un flag nuevo aquí aparece en losAPKreales un año después.art/libdexfile/dex/dex_file.hystandard_dex_file.cc— una versión nueva deDEX.tools/apksig/.../v3/V3SchemeConstants.java— un esquema de firma nuevo. v3.2 llegó así: está en la etiquetaandroid-17.0.0_r1y no enmain, que se congeló en marzo de 2025. Estos ficheros se vigilan en las etiquetas y en la rama que nombraandroid-latest-release.system/libziparchive/zip_archive.cc— un endurecimiento del lector deZIPconvierte en no instalablesAPKque antes lo eran.
Las señales de que un formato ha cambiado, por orden de aparición:
- Una constante nueva
RES_*o un flag nuevo enResourceTypes.h. - Un
kDexVersionnuevo, okNumDexVersionsincrementado. - Un identificador de bloque nuevo en
*SchemeConstants.java. - La señal práctica, y la que llega primero: una avalancha de issues en apktool o jadx con el mismo mensaje de error nuevo. La comunidad detecta los cambios de formato antes de que se documenten («§6.1 · Los issue trackers, que son la mejor fuente de modos de fallo»).
8.3 Procedimiento de revisión
En este orden, porque cada paso es más caro que el anterior.
Paso 1 — Enlaces (minutos, automatizable).
Regenerar la lista de URL de esta documentación y comprobarla. Sin User-Agent, o
developer.android.com devolverá 302 falsos («§8.4 · Informe de enlaces al 13 de agosto de 2026»):
cd <raíz de la documentación>
grep -rhoE 'https?://[^ )>"'"'"'`,]+' --include='*.md' . \
| sed 's/[.,;:]$//' | grep -v '^http://schemas.android.com' | sort -u > /tmp/urls.txt
while read -r u; do
printf '%s\t%s\t%s\n' \
"$(curl -sSL --max-time 30 -o /dev/null -w '%{http_code}\t%{url_effective}' "$u")" "$u"
done < /tmp/urls.txt | awk -F'\t' '$1!="200" || $2!=$3'
Salidas a revisar: los 404 (enlace muerto) y los casos en que la URL final difiere de la original (redirección: hay que actualizar la cita antes de que la redirección se retire).
Paso 2 — Herramientas (minutos). Versión y actividad de cada repositorio de «00-panorama/02»:
for r in skylot/jadx iBotPeaches/Apktool google/smali REAndroid/ARSCLib \
REAndroid/APKEditor rednaga/APKiD google/bundletool avast/apkverifier; do
curl -s "https://api.github.com/repos/$r" | python3 -c "
import sys,json; d=json.load(sys.stdin)
print(f\"{d['full_name']:28} {d['default_branch']:8} push={d['pushed_at'][:10]} archived={d['archived']}\")"
done
Señales de alarma: archived=True, o un pushed_at de más de un año.
Paso 3 — Requisitos de Play (minutos, pero hay que leer). Abrir https://developer.android.com/google/play/requirements/target-sdk y comparar con la tabla de «60-referencias/01 §9». Da por hecho que ha cambiado: cambia todos los agostos.
Paso 4 — Rutas de AOSP (minutos). Comprobar que las rutas de «60-referencias/02» siguen existiendo, y de paso cuál es la etiqueta más alta:
curl -s 'https://android.googlesource.com/platform/frameworks/base/+refs' \
| grep -oE 'android-[0-9]+\.0\.0_r[0-9]+' | sort -uV | tail -5
Paso 5 — Formatos (horas; solo si el paso 4 delata movimiento). Comparar el fichero de la etiqueta nueva contra el de la vieja. Esto es lo que detecta un cambio de formato de verdad:
F=libs/androidfw/include/androidfw/ResourceTypes.h
B=https://android.googlesource.com/platform/frameworks/base/+/refs/tags
for T in android-16.0.0_r4 android-17.0.0_r1; do
curl -s "$B/$T/$F?format=TEXT" | base64 -d > "/tmp/RT-$T.h"
done
diff -u /tmp/RT-android-16.0.0_r4.h /tmp/RT-android-17.0.0_r1.h | head -80
Si el diff sale vacío, los documentos de formato no necesitan revisión, y ese es el
resultado más frecuente.
Paso 6 — Muestrario de APK (horas).
El muestrario es una foto de agosto de 2026. Las cifras que salen de él
—porcentajes de ofuscación, de source stamp, de alineación— describen esa foto. Si se amplía
el muestrario, hay que re-medir y volver a fechar, no ajustar a mano.
8.4 Informe de enlaces al 13 de agosto de 2026
Barrido sobre los 34 documentos: 307 URL distintas comprobadas. Se excluyen del recuento
los marcadores de posición de la documentación (https://url.exacta/aqui,
https://api.ejemplo.com), los URI de espacio de nombres XML de schemas.android.com, que no
son documentos y no deben resolver, y los prefijos: una plantilla como
https://api.github.com/repos/<org>/<repo> o una asignación de shell B=https://… no son
direcciones y devuelven 404 por construcción. verificar.py los descarta desde el 13 de agosto
de 2026; hasta entonces producía dos falsas alarmas fijas en cada barrido.
Enlace realmente roto: uno.
| URL | Dónde se cita | Diagnóstico |
|---|---|---|
https://gosec.sjtu.edu.cn/publications/RAID2015Yang.pdf |
«40-ofuscacion/03» | 404 confirmado. La raíz del servidor sí responde (200), así que el PDF se ha movido o retirado, no es un dominio caído. Hay que localizar una copia alternativa o retirar la cita |
El segundo enlace roto que figuraba aquí el 12 de agosto,
…/frameworks/base/+/refs/tags, no era un enlace: es la variableBde la receta del paso 5, que se completa con$Ty$Fantes de usarse. Lo correcto no era arreglar la URL sino el verificador, y eso es lo que se hizo. Merece quedar anotado porque el error de método —tratar un prefijo como una dirección— es el mismo que produce las docenas de falsos positivos degooglesourceque describe el párrafo de más abajo.
Bloqueos de cliente, no enlaces muertos (funcionan en navegador; devuelven 403 a curl):
| URL | Nota |
|---|---|
crates.io/crates/smali y su API |
Exige User-Agent. Con uno, la API devuelve 200 y confirma el dato del muestrario: versión 0.6.2 del 5 de agosto de 2026, licencia GPL-3.0-only, 4.745 descargas |
dl.acm.org/doi/10.1145/3274694.3274726 |
Cloudflare. Ya señalado en «40-ofuscacion/02»; se usa arXiv |
sciencedirect.com/…/S2352711020300108 |
Ídem; se usa el repositorio de Obfuscapk |
bi-zone.medium.com/…frosting… |
Medium rechaza clientes automatizados |
xdaforums.com |
Anti-bot. No verificable con guion («§6.2 · Foros») |
Falso positivo por límite de tasa. Trece URL de android.googlesource.com devolvieron
429 en el barrido. No es un problema de los enlaces, es del método: se consultaron
demasiadas seguidas. Reconsultadas con tres segundos de separación, doce devolvieron 200 y la
decimotercera resultó ser el 404 real de la tabla de arriba. Quien repita esta comprobación
debe espaciar las peticiones a googlesource o se llevará una docena de falsas alarmas.
Enlace muerto encontrado fuera del muestrario, mencionado para que no se añada: dexlayout.cc
en la rama main de ART devuelve 404 porque el directorio fue eliminado
(«doc 02 §3.2»).
Diecinueve redirecciones, que conviene corregir en su origen: hoy funcionan, pero el día que se retire la redirección la cita queda muerta. Las que importan:
| Citado como | Va realmente a |
|---|---|
developer.android.com/build/releases/past-releases/agp-N-N-0-release-notes (cinco casos) |
developer.android.com/build/releases/agp-N-N-0-release-notes — el segmento past-releases/ desapareció |
developer.android.com/build/shrink-code |
…/topic/performance/app-optimization/enable-app-optimization |
developer.android.com/training/articles/perf-jni |
developer.android.com/ndk/guides/jni-tips |
developer.android.com/build/releases/gradle-plugin |
…/build/releases/agp-9-3-0-release-notes — apunta a la versión concreta del día, así que la cita envejece sola |
github.com/google/smali/blob/master/LICENSE |
…/blob/main/LICENSE — la rama por defecto es main |
trust.cispa.saarland/publication/derr-16-ccs/… |
group.cispa.io/bugiel/publication/derr-16-ccs/… — el CISPA cambió de dominio; «§3.6 · Infraestructura y datasets» ya cita el antiguo, que aún redirige |
www.saurik.com/id/17 |
www.saurik.com/masterkey1.html |
support.pkware.com/pkzip/appnote |
pkware.my.site.com/s/pkzip-and-securezip — ya no sirve el APPNOTE; ver «doc 01 §10.1» |
www.unicode.org/versions/latest/ |
www.unicode.org/versions/Unicode17.0.0/ el 12 de agosto, y Unicode18.0.0/ el 24 de septiembre — útil: fija la versión vigente de Unicode |
maddiestone.github.io/AndroidAppRE/ |
www.ragingrock.com/AndroidAppRE/ |
apktool.org/docs/cli-parameters |
…/cli-parameters/ (barra final) |
virbox.com |
lm.virbox.com |
www.allatori.com/*.html (tres casos) |
allatori.com/*.html (sin www, a HTTPS) |
Trampa metodológica, y la más importante de este informe: comprobar
developer.android.com con curl y un User-Agent de navegador devuelve 302 hacia
accounts.google.com por el mecanismo de auto-inicio de sesión. Sin User-Agent devuelve
200. Una primera pasada de esta verificación marcó cuatro páginas como caídas por este motivo,
y ninguna lo estaba. Quien automatice la comprobación debe hacerlo sin User-Agent.
Fuera del muestrario, un enlace que sí está muerto y conviene no añadir:
www.softxjournal.com, hoy un dominio aparcado.
apk-deguard.com es otro caso («§3.2 · Deofuscación»). El 12 de agosto estaba medio rota: resolvía
(138.201.196.241) y por HTTP devolvía 200 con la página real de DeGuard, mientras HTTPS daba 502
con un certificado de otro dominio. El 24 de septiembre ya no contesta por ninguno de los dos.
Fuentes
- Bichsel, Benjamin; Raychev, Veselin; Tsankov, Petar; Vechev, Martin — «Statistical Deobfuscation of Android Applications», ACM CCS 2016 — https://files.sri.inf.ethz.ch/website/papers/deguard.pdf Consultado el 12 de agosto de 2026. Autores, año y venue verificados contra la portada del PDF y la ficha institucional del grupo SRI de la ETH de Zúrich (https://www.sri.inf.ethz.ch/publications/bichsel2016statistical). De aquí sale la «sección 3.2 · Deofuscación», incluido el 79,1 % de nombres recuperados. Se confirmó que el nombre es Petar Tsankov, no «Peter», como aparece en algunas fuentes secundarias.
- Wermke, Huaman, Acar, Reaves, Traynor, Fahl — ACSAC 2018 — https://dwermke.com/pdf/conf-acsac-wermke18.pdf y https://arxiv.org/abs/1801.02742 Consultados el 12 de agosto de 2026. «Sección 3.1 · Prevalencia y técnicas de ofuscación». En las actas figura «Bradley Reaves»; en arXiv, «Brad Reaves».
- Dong, Li, Diao, Liu, Liu, Li, Xu, Chen, Wang, Zhang — SecureComm 2018 — https://diaowenrui.github.io/paper/securecomm18-dong.pdf Consultado el 12 de agosto de 2026. «Sección 3.1 · Prevalencia y técnicas de ofuscación».
- Mauthe, Kargén, Shahmehri — SANER 2021 — https://www.ida.liu.se/~ulfka17/papers/SANER2021.pdf Consultado el 12 de agosto de 2026. «Sección 3.4 · Decompilación». Las cifras concretas que se toman de este trabajo están en «30-herramientas/01 §6».
- Duan, Zhang, Bhaskar, Yin, Pan, Li, Wang, Wang — NDSS 2018 — https://www.ndss-symposium.org/wp-content/uploads/2018/02/ndss2018_04A-4_Duan_paper.pdf Consultado el 12 de agosto de 2026. «Sección 3.3 · Packers». Se confirmó que NDSS 2018 es la 25.ª edición, no la 24.ª como indican varias fuentes secundarias.
- Dong, Liu, Wang, Luo, Guo, Xu, Xiao, Wang — ESEC/FSE 2022 — https://yaoguopku.github.io/papers/Dong-FSE-22.pdf Consultado el 12 de agosto de 2026. «Sección 3.3 · Packers».
- Wang, Liu, Xiao, Meng, Guo — ASE 2019 — https://impillar.github.io/files/ase2019sig.pdf Consultado el 12 de agosto de 2026. «Sección 3.5 · Firma».
- Allix, Bissyandé, Klein, Le Traon — MSR 2016 — https://jacquesklein2302.github.io/papers/2016-androzoo-msr.pdf Consultado el 12 de agosto de 2026. «Sección 3.6 · Infraestructura y datasets».
- Arzt, Rasthofer, Fritz, Bodden, Bartel, Klein, Le Traon, Octeau, McDaniel — PLDI 2014 — https://www.bodden.de/pubs/far+14flowdroid.pdf Consultado el 12 de agosto de 2026. «Sección 3.6 · Infraestructura y datasets». Tiene dos DOI; el canónico es el de las actas de PLDI '14 (10.1145/2594291.2594299), no el de la reimpresión en SIGPLAN Notices.
- Backes, Bugiel, Derr — ACM CCS 2016 — https://trust.cispa.saarland/publication/derr-16-ccs/derr-16-ccs.pdf Consultado el 12 de agosto de 2026. «Sección 3.6 · Infraestructura y datasets».
- Aonzo, Georgiu, Verderame, Merlo — SoftwareX 11 (2020), art. 100403 — https://github.com/ClaudiuGeorgiu/Obfuscapk
Consultado el 12 de agosto de 2026. «Sección 3.6 · Infraestructura y datasets». El artículo en
sciencedirect.comdevuelve 403; los datos bibliográficos se confirmaron por otras vías y el enlace útil es el del repositorio. - Strazzere, Tim; Sawyer, Jon — «Android Hacker Protection Level 0», DEF CON 22 (2014) —
transparencias y vídeo en
https://media.defcon.org/DEF%20CON%2022/Consultados el 12 de agosto de 2026. La existencia de ambos ficheros se verificó listando los índicesDEF CON 22 presentations/yDEF CON 22 video and slides/del archivo de medios de DEF CON, y comprobando después que ambas URL devuelven HTTP 200. «Sección 4 · Charlas y presentaciones». - Stone, Maddie — «Securing the System: A Deep Dive into Reversing Android Pre-Installed
Apps», Black Hat USA 2019 — https://i.blackhat.com/USA-19/Thursday/us-19-Stone-Securing-The-System-A-Deep-Dive-Into-Reversing-Android-Preinstalled-Apps.pdf
y https://www.youtube.com/watch?v=U6qTcpCfuFc
Consultados el 12 de agosto de 2026. El venue se corrigió: se cita con frecuencia como
DEF CON 27 y el PDF alojado en
i.blackhat.com/USA-19/acredita que fue Black Hat USA 2019. - Stone, Maddie — «Android App Reverse Engineering 101» — https://github.com/maddiestone/AndroidAppRE
Consultado el 12 de agosto de 2026. «Sección 7 · CTF y material de aprendizaje». Se comprobó que
maddiestone.github.io/AndroidAppRE/redirige awww.ragingrock.com/AndroidAppRE/. - OWASP MASTG y MASTG Crackmes — https://mas.owasp.org/MASTG/ ,
https://mas.owasp.org/crackmes/ y https://github.com/OWASP/mastg
Consultados el 12 de agosto de 2026. «Sección 7 · CTF y material de aprendizaje». Se comprobó que el repositorio anterior
OWASP/owasp-mastgredirige aOWASP/mastg. - Blogs de autor — https://connortumbleson.com/ , https://rednaga.io/ , https://calebfenton.github.io/ , https://www.saurik.com/ y https://www.guardsquare.com/blog Consultados el 12 de agosto de 2026, los cinco con HTTP 200. «Sección 5 · Blogs y autores técnicos». La atribución de apktool a Connor Tumbleson y de APKiD a Tim Strazzere y Caleb Fenton procede de «00-panorama/02» y «30-herramientas/05».
- Issue trackers de jadx, apktool, smali y ARSCLib — https://github.com/skylot/jadx/issues y las tres homólogas. Consultados el 12 de agosto de 2026, los cuatro con HTTP 200. «Sección 6.1 · Los issue trackers, que son la mejor fuente de modos de fallo».
- Fuentes de seguimiento de releases de Android — https://developer.android.com/about/versions , https://developer.android.com/about/versions/16/behavior-changes-all , https://source.android.com/docs/security/bulletin , https://developer.android.com/studio/releases y https://android.googlesource.com/platform/frameworks/base/+refs Consultadas el 12 de agosto de 2026, las cinco con HTTP 200. De aquí sale íntegra la tabla de la «sección 8.2 · Qué mirar en cada release de Android».
- Raychev, Vechev, Krause — «Predicting Program Properties from Big Code», ACM POPL 2015 — https://www.sri.inf.ethz.ch/publications/raychev2015predicting y el motor https://github.com/eth-sri/Nice2Predict Consultados el 12 de agosto de 2026. Autores, año y venue verificados contra la ficha institucional. «Sección 3.2 · Deofuscación», como precursor metodológico de DeGuard.
- Estado de
apk-deguard.com— comprobado el 12 de agosto de 2026 concurlyopenssl s_client. Lo que se observó, y es lo único que se afirma: por HTTP devuelve 200 y sirve una página titulada «DeGuard | Statistical Deobfuscation for Android»; por HTTPS devuelve 502; el certificado presentado tieneCN=debin.aiy ese dominio no resuelve. Repetido el 24 de septiembre de 2026 concurl: el dominio sigue resolviendo a 138.201.196.241, pero la conexión caduca sin respuesta por HTTP y por HTTPS. De ahí la redacción de la «sección 3.2 · Deofuscación». - Stone, Maddie — «Unpacking the Packed Unpacker: Reversing an Android Anti-Analysis Native Library», Black Hat USA 2018 — https://i.blackhat.com/us-18/Thu-August-9/us-18-Stone-Unpacking-The-Packed-Unpacker.pdf Consultado el 12 de agosto de 2026. El título completo, la autoría y el congreso se leyeron de la diapositiva de portada del PDF descargado, no de fuentes secundarias. «Sección 4 · Charlas y presentaciones».
- Quarkslab — blog técnico — https://blog.quarkslab.com/a-glimpse-into-tencents-legu-packer.html y https://blog.quarkslab.com/practical-android-software-protection-in-the-wild-an-appetizer.html Consultados el 12 de agosto de 2026, ambos con HTTP 200. «Sección 5 · Blogs y autores técnicos»; los cita «40-ofuscacion/03».
- Comprobación de enlaces de esta documentación — 307 URL distintas extraídas de los
34 documentos con un guion en
python3(verificar.py) —descartando marcadores de posición, plantillas con variables y los URI de espacio de nombres deschemas.android.com— y comprobadas concurl -sSL -o /dev/null -w '%{http_code}\t%{url_effective}'sinUser-Agent: primer barrido el 12 de agosto de 2026 e informe al 13, cuando el guion dejó de tratar los prefijos como direcciones. De aquí sale íntegra la «sección 8.4 · Informe de enlaces al 13 de agosto de 2026»: el enlace realmente roto (el 12 de agosto figuraban dos, y el segundo era un prefijo), los cinco bloqueos de cliente, las diecinueve redirecciones y los dos falsos positivos metodológicos —elUser-Agentendeveloper.android.com, aislado comparando la misma URL con y sin cabecera, y el límite de tasa degooglesource, aislado reconsultando con tres segundos de separación—. - API de crates.io — https://crates.io/api/v1/crates/smali
Consultada el 12 de agosto de 2026 con
User-Agentpropio, que es lo que exige el servicio. De aquí sale la confirmación de la versión 0.6.2, la licencia GPL-3.0-only y las 4.745 descargas de la tabla de la «sección 8.4 · Informe de enlaces al 13 de agosto de 2026», que coinciden con lo que declara «30-herramientas/02». - Kargén, Mauthe, Shahmehri — Empirical Software Engineering 28(2):48, 2023 — https://doi.org/10.1007/s10664-022-10281-9 y https://liu.diva-portal.org/smash/get/diva2:1743022/FULLTEXT01 Consultado el 25 de septiembre de 2026. «Sección 3.4 · Decompilación».