
Una herramienta automática de ofuscación para aplicaciones Android que funciona de manera caja negra, soporta características avanzadas de ofuscación y tiene una arquitectura modular fácilmente extensible con nuevas técnicas
[!IMPORTANT] Este proyecto está archivado y ya no recibe mantenimiento.
Algunas de las preguntas más frecuentes se responden en FAQ y solución de problemas.

Una herramienta de ofuscación de caja negra para aplicaciones Android.
Obfuscapk es una herramienta modular de Python para ofuscar aplicaciones Android sin necesidad
de su código fuente, ya que se utiliza apktool
para descompilar el archivo apk original y construir una nueva aplicación, tras aplicar algunas
técnicas de ofuscación en el código smali descompilado, los recursos y el manifiesto. La
aplicación ofuscada conserva la misma funcionalidad que la original, pero las diferencias
internas a veces hacen que la nueva aplicación sea muy diferente de la original
(por ejemplo, para los antivirus basados en firmas).
Obfuscapk está añadiendo soporte para
Android App Bundles (archivos aab) usando
BundleDecompiler (ver
#121). Para usar esta nueva
funcionalidad, descarga la última versión de BundleDecompiler disponible desde
aquí,
guárdalo como BundleDecompiler.jar en un directorio incluido en PATH (por ejemplo, en Ubuntu,
/usr/local/bin o /usr/bin) y asegúrate de que tenga el flag de ejecutable activado.
[!IMPORTANT] BundleDecompiler aún no funciona en Windows, por lo que la ofuscación de app bundles no es compatible con Obfuscapk en la plataforma Windows. Además, el soporte para app bundle está aún en desarrollo temprano, así que si enfrentas algún problema o deseas ayudarnos a mejorar, consulta contribuir.
Se pueden encontrar más detalles sobre Obfuscapk en el artículo "Obfuscapk: An open-source black-box obfuscation tool for Android apps". Puedes citar el artículo de la siguiente manera:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ Demo

## ❱ Arquitectura

Obfuscapk está diseñado para ser modular y fácil de extender, por lo que se construye utilizando un
[sistema de plugins](https://github.com/tibonihoo/yapsy). En consecuencia, cada ofuscador es
un plugin que hereda de una clase base abstracta y necesita implementar el método `obfuscate`.
Cuando la herramienta comienza a procesar un nuevo archivo de aplicación Android, crea un
[objeto de ofuscación](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
para almacenar toda la información necesaria (por ejemplo, la ubicación del código `smali` descompilado)
y el estado interno de las operaciones (por ejemplo, la lista de ofuscadores ya usados).
Luego, el objeto de ofuscación se pasa, como parámetro al método `obfuscate`, a todos
los plugins/ofuscadores activos (en secuencia) para que sean procesados y modificados. La lista y
el orden de los plugins activos se especifica mediante las [opciones de línea de comandos](#-uso).
La herramienta se puede extender fácilmente con nuevos ofuscadores: basta con agregar el código fuente
que implementa la técnica de ofuscación y los metadatos del plugin (un
archivo `<nombre-del-ofuscador>.obfuscator`) en el directorio
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
(toma como ejemplo un ofuscador simple existente como
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)).
La herramienta detectará automáticamente el nuevo plugin, por lo que no se necesita
configuración adicional (el nuevo plugin será tratado como todos los demás
plugins incluidos con la herramienta).
## ❱ Instalación
Hay dos formas de obtener una copia funcional de Obfuscapk en tu propio ordenador: ya sea
[usando Docker](#imagen-docker) o [usando directamente el código fuente](#desde-el-código-fuente)
en un entorno de `Python 3`. En ambos casos, lo primero que hay que hacer es obtener una copia
local de este repositorio, así que abre una terminal en el directorio donde quieras guardar
el proyecto y clona el repositorio:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
Esta es la forma sugerida de instalar Obfuscapk, ya que el único requisito es tener una versión reciente de Docker instalada:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### Imagen oficial de Docker Hub
La [imagen oficial de Docker de Obfuscapk](https://hub.docker.com/r/claudiugeorgiu/obfuscapk)
está disponible en Docker Hub (construida automáticamente desde este repositorio):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Si descargaste la imagen oficial desde Docker Hub, ya estás listo para usar la herramienta, así que
revisa las instrucciones de uso; de lo contrario, ejecuta el siguiente
comando en el directorio Obfuscapk/src/ previamente creado (la carpeta que contiene el
Dockerfile) para construir la imagen de Docker:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
Cuando la imagen de Docker esté lista, realiza una prueba rápida para verificar que todo se instaló correctamente:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk ya está listo para usarse, consulte las instrucciones de uso para más información.