Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Obfuscapk — 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 | Kitploit
Herramientas/GitHubGitHub/claudiugeorgiu/obfuscapk
Seguridad AndroidAnálisis EstáticoAnálisis Dinámico (Sandboxing)Ingeniería InversaSeguridad MóvilPapers e InvestigaciónAprendizaje y EducaciónArchived
GitHubclaudiugeorgiu/obfuscapk

Obfuscapk

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

Ver Repositorio
1.3k323hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

[!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.

Logo

Una herramienta de ofuscación de caja negra para aplicaciones Android.

Codacy Code Coverage Python Version License

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

🆕 Soporte para Android App Bundle 🆕

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.

❱ Publicación

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" }

root@kitploit:~
## ❱ Demo

![Demo](https://assets.kitploit.com/production/public/readmes/3132/632e285a29e53c28a5549c70012673a2761ca3ca4fd7eac3ad89be3d6a9a2a21.gif)



## ❱ Arquitectura

![Architecture](https://assets.kitploit.com/production/public/readmes/3132/da41bec35f1c09df38ad201aa1e74f0b1426dba0201162a70b4d5376b3da654e.png)

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

Docker image


Prerrequisitos

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

root@kitploit:~
#### 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

Instalación

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 .

root@kitploit:~
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.

Desde la fuente


Requisitos previos

Asegúrese de tener una versión reciente de apktool, apksigner y zipalign instaladas y disponibles desde la línea de comandos:```Shell $ apktool Apktool v2.9.0 - a tool for reengineering Android apk files ...

root@kitploit:~
```Shell
$ apksigner
Usage:  apksigner <command> [options]
        apksigner --version
        apksigner --help
...
root@kitploit:~
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...

Para admitir la ofuscación de app bundles también necesitas BundleDecompiler, así que descarga la última versión 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 ejecutable configurado.

Para usar BundleDecompiler y apktool también necesitas una versión reciente de Java. zipalign y apksigner están incluidos en el Android SDK. La ubicación de los ejecutables también se puede especificar a través de las siguientes variables de entorno: APKTOOL_PATH, BUNDLE_DECOMPILER_PATH, APKSIGNER_PATH y ZIPALIGN_PATH (por ejemplo, en Ubuntu, ejecuta export APKTOOL_PATH=/custom/location/apktool antes de ejecutar Obfuscapk en la misma terminal).

Aparte de las herramientas anteriores, el único requisito de este proyecto es tener instalado un Python 3 funcional (al menos 3.7) (junto con su gestor de paquetes pip).

Install

Ejecuta los siguientes comandos en el directorio principal del proyecto (Obfuscapk/) para instalar las dependencias necesarias:```Shell $ # Make sure to run the commands in Obfuscapk/ directory.

$ # The usage of a virtual environment is highly recommended. $ python3 -m venv venv $ source venv/bin/activate

$ # Install Obfuscapk's requirements. $ python3 -m pip install -r src/requirements.txt

root@kitploit:~
Después de instalar los requisitos, haz una prueba rápida para verificar que todo funciona correctamente:```Shell
$ cd src/
$ # The following command has to be executed always from Obfuscapk/src/ directory
$ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable.
$ python3 -m obfuscapk.cli --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...

Obfuscapk ya está listo para ser utilizado, consulta las instrucciones de uso para más información.

❱ Uso

A partir de ahora, Obfuscapk se considerará como un ejecutable disponible como obfuscapk, por lo que debes adaptar los comandos según cómo hayas instalado la herramienta:

  • Imagen Docker: un directorio local que contenga la aplicación a ofuscar debe montarse en /workdir dentro del contenedor (por ejemplo, el directorio actual "${PWD}"), por lo que el comando:

    root@kitploit:~
    $ obfuscapk [params...]
    

    se convierte en:

    root@kitploit:~
    $ docker run --rm -it -u $(id -u):$(id -g) -v "${PWD}":"/workdir" obfuscapk [params...]
    
  • Desde el código fuente: cada instrucción debe ejecutarse desde el directorio Obfuscapk/src/ (o agregando el directorio Obfuscapk/src/ a la variable de entorno PYTHONPATH) y el comando:

    root@kitploit:~
    $ obfuscapk [params...]
    

    se convierte en:

    root@kitploit:~
    $ python3 -m obfuscapk.cli [params...]
    

Comencemos viendo el mensaje de ayuda:```Shell $ obfuscapk --help obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] [-i] [-p] [-k VT_API_KEY] [--keystore-file KEYSTORE_FILE] [--keystore-password KEYSTORE_PASSWORD] [--key-alias KEY_ALIAS] [--key-password KEY_PASSWORD] [--use-aapt2] <APK_OR_BUNDLE_FILE>

root@kitploit:~
Hay dos parámetros obligatorios: `<APK_OR_BUNDLE_FILE>`, la ruta (relativa o absoluta) al archivo apk o al paquete de aplicación a ofuscar y la lista con los nombres de las técnicas de ofuscación a aplicar (especificadas con una opción `-o` que se puede usar varias veces, p. ej., `-o Rebuild -o NewAlignment -o NewSignature`). Los otros argumentos opcionales son los siguientes:

* `-w DIR` se usa para establecer el directorio de trabajo donde guardar los archivos intermedios (generados por `apktool`). Si no se especifica, se crea un directorio llamado `obfuscation_working_dir` en el mismo directorio que la aplicación de entrada. Esto puede ser útil para fines de depuración, pero si no es necesario, se puede establecer en un directorio temporal (p. ej., `-w /tmp/`).

* `-d OUT_APK_OR_AAB` se usa para establecer la ruta del archivo de destino: el archivo apk generado por el proceso de ofuscación (p. ej., `-d /home/user/Desktop/obfuscated.apk` o `-d /home/user/Desktop/obfuscated.aab`). Si no se especifica, el archivo ofuscado final se guardará dentro del directorio de trabajo. Nota: los archivos existentes se sobrescribirán sin previo aviso.

* `-i` es una bandera para ignorar las librerías de terceros conocidas durante el proceso de ofuscación, para usar menos recursos, mejorar el rendimiento y reducir el riesgo de errores. La [lista de librerías](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/libs_to_ignore.txt) a ignorar está adaptada del proyecto [LiteRadar](https://github.com/pkumza/LiteRadar).

* `-p` es una bandera para mostrar barras de progreso durante las operaciones de ofuscación. Al usar la herramienta en operaciones por lotes/construcciones automáticas, es conveniente tener las barras de progreso deshabilitadas; de lo contrario, esta bandera debe estar habilitada para ver el progreso de la ofuscación.

* `-k VT_API_KEY` solo es necesario cuando se usa el ofuscador `VirusTotal`, para establecer la clave API que se usará al comunicarse con Virus Total.

* `--keystore-file KEYSTORE_FILE`, `--keystore-password KEYSTORE_PASSWORD`, `--key-alias KEY_ALIAS` y `--key-password KEY_PASSWORD` se pueden usar para especificar un almacén de claves personalizado (necesario para la firma del apk). Si se usa `--keystore-file`, también se deben especificar `--keystore-password` y `--key-alias`, mientras que `--key-password` solo es necesario si la clave elegida tiene una contraseña diferente a la del almacén de claves. Por defecto (cuando no se especifica `--keystore-file`), se usa un [almacén de claves incluido con Obfuscapk](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/obfuscation_keystore.jks) para las operaciones de firma.

* `--ignore-packages-file IGNORE_PACKAGES_FILE` es una ruta a un archivo que contiene nombres de paquetes que se deben ignorar. Todas las clases dentro de esos paquetes no se ofuscarán cuando se use esta opción. El archivo debe tener un nombre de paquete por línea, como se muestra en el siguiente ejemplo:
    ```
    com.mycompany.dontobfuscate
    com.mycompany.ignore
    ...
    ```
* `--use-aapt2` es una bandera para usar la opción aapt2 al reconstruir una aplicación con `apktool`.

Consideremos ahora un ejemplo simple de trabajo para ver cómo funciona Obfuscapk:```Shell
$ # original.apk is a valid Android apk file.
$ obfuscapk -o RandomManifest -o Rebuild -o NewAlignment -o NewSignature original.apk

Al ejecutar el comando anterior, esto es lo que sucede detrás de escena:

  • ya que no se especificó un directorio de trabajo, se crea un nuevo directorio de trabajo (obfuscation_working_dir) en la misma ubicación que original.apk (esto puede ser útil para inspeccionar los archivos smali/manifiesto/recursos en caso de errores)

  • se realizan algunas comprobaciones para asegurarse de que todos los archivos/ejecutables necesarios estén disponibles y listos para usar

  • el proceso de ofuscación real comienza: los ofuscadores especificados se ejecutan (en orden) uno por uno hasta que no quede ningún ofuscador o hasta que se encuentre un error

    • al ejecutar el primer ofuscador, original.apk se descompila con apktool y los resultados se almacenan en el directorio de trabajo

    • dado que el primer ofuscador es RandomManifest, las entradas en el manifiesto de Android descompilado se reordenan aleatoriamente (sin romper las estructuras xml)

    • el ofuscador Rebuild simplemente reconstruye la aplicación (ahora con el manifiesto modificado) usando apktool, y dado que no se especificó un archivo de salida, el archivo apk resultante se guarda en el directorio de trabajo creado antes

    • el ofuscador utiliza la herramienta para alinear el archivo apk resultante

Como se vio en el ejemplo anterior, los ofuscadores Rebuild, NewAlignment y NewSignature siempre son necesarios para completar una operación de ofuscación, para construir el apk ofuscado final. No son técnicas de ofuscación reales, pero son necesarios en el proceso de compilación, por lo que se incluyen en la lista de ofuscadores para mantener la arquitectura general modular.

¿No funciona como se esperaba? Consulte FAQ y solución de problemas.

❱ Ofuscadores

Los ofuscadores incluidos en Obfuscapk se pueden dividir en diferentes categorías, dependiendo de las operaciones que realicen:

  • Trivial: como su nombre lo indica, esta categoría incluye operaciones simples (que no modifican mucho la aplicación original), como firmar el archivo apk con una nueva firma.

  • Renombrar: operaciones que cambian los nombres de los identificadores utilizados (clases, campos, métodos).

  • Cifrado: empaquetar código/recursos cifrados y descifrarlos durante la ejecución de la aplicación. Cuando Obfuscapk se inicia, genera automáticamente una clave secreta aleatoria (de 32 caracteres, usando letras y dígitos ASCII) que se utilizará para el cifrado.

  • Código: todas las operaciones que implican la modificación del código fuente descompilado.

  • Recursos: operaciones en los archivos de recursos (como modificar el manifiesto).

  • Otro

Los ofuscadores actualmente incluidos con Obfuscapk se presentan brevemente a continuación (en orden alfabético). Consulte el código fuente del proyecto para obtener más detalles.

[!TIP] No todos los ofuscadores siguientes corresponden a técnicas de ofuscación reales (por ejemplo, Rebuild, NewAlignment, NewSignature y VirusTotal), pero están implementados como ofuscadores para mantener la arquitectura modular y fácil de extender con nueva funcionalidad.

AdvancedReflection [Código]

Usa reflexión para invocar APIs peligrosas del Android Framework. Para determinar si un método pertenece al Android Framework, Obfuscapk se refiere al mapeo descubierto por Backes et al.
📄 Código fuente de AdvancedReflection

ArithmeticBranch [Código]

Inserta código basura. En este caso, el código basura se compone de cálculos aritméticos y una instrucción de bifurcación que depende del resultado de estos cálculos, diseñada de tal manera que la bifurcación nunca se toma.
📄 Código fuente de ArithmeticBranch

AssetEncryption [Cifrado]

Cifrar archivos de assets.
📄 Código fuente de AssetEncryption

CallIndirection [Código]

Esta técnica modifica el grafo de flujo de control sin afectar la semántica del código: añade nuevos métodos que invocan a los originales. Por ejemplo, una invocación al método m1 será sustituida por un nuevo método envoltorio m2, que, al ser invocado, llama al método original m1.
📄 Código fuente de CallIndirection

ClassRename [Renombrar]

Cambiar el nombre del paquete y renombrar clases (incluso en el archivo de manifiesto).
📄 Código fuente de ClassRename

ConstStringEncryption [Cifrado]

Cifrar cadenas constantes en el código.
📄 Código fuente de ConstStringEncryption

DebugRemoval [Código]

Eliminar información de depuración.
📄 Código fuente de DebugRemoval

FieldRename [Renombrar]

Renombrar campos.
📄 Código fuente de FieldRename

Goto [Código]

Dado un método, inserta una instrucción goto que apunta al final del método y otra goto que apunta a la instrucción después del primer goto; modifica el grafo de flujo de control añadiendo dos nuevos nodos.
📄 Código fuente de Goto

LibEncryption [Cifrado]

Cifrar bibliotecas nativas.
📄 Código fuente de LibEncryption

MethodOverload [Código]

Explota la característica de sobrecarga del lenguaje de programación Java para asignar el mismo nombre a diferentes métodos pero usando diferentes argumentos. Dado un método ya existente, esta técnica crea un nuevo método void con el mismo nombre y argumentos, pero también añade nuevos argumentos aleatorios. Luego, el cuerpo del nuevo método se llena con instrucciones aritméticas aleatorias.
📄 Código fuente de MethodOverload

MethodRename [Renombrar]

Renombrar métodos.
📄 Código fuente de MethodRename

NewAlignment [Trivial]

Realinear la aplicación.
📄 Código fuente de NewAlignment

NewSignature [Trivial]

Volver a firmar la aplicación con una nueva firma personalizada.
📄 Código fuente de NewSignature

Nop [Código]

Inserta código basura. Nop, abreviatura de no-operation, es una instrucción dedicada que no hace nada. Esta técnica simplemente inserta instrucciones nop aleatorias dentro de cada implementación de método.
📄 Código fuente de Nop

RandomManifest [Recurso]

Reordenar aleatoriamente las entradas en el archivo de manifiesto.
📄 Código fuente de RandomManifest

Rebuild [Trivial]

Reconstruir la aplicación.
📄 Código fuente de Rebuild

Reflection [Código]

Esta técnica analiza el código existente buscando invocaciones a métodos de la aplicación, ignorando las llamadas al Android framework (ver AdvancedReflection). Si encuentra una instrucción con una invocación de método adecuada (es decir, sin métodos constructores, visibilidad pública, suficientes registros libres, etc.), dicha invocación se redirige a un método personalizado que invocará el método original usando las APIs de Reflection.
📄 Código fuente de Reflection

Reorder [Código]

Esta técnica consiste en cambiar el orden de los bloques básicos en el código. Cuando se encuentra una instrucción de bifurcación, la condición se invierte (por ejemplo, bifurcar si es menor que, se convierte en bifurcar si es mayor o igual que) y los bloques básicos objetivo se reordenan en consecuencia. Además, también reordena aleatoriamente el código abusando de las instrucciones goto.
📄 Código fuente de Reorder

ResStringEncryption [Cifrado]

Cifrar cadenas en recursos (solo aquellas llamadas dentro del código).
📄 Código fuente de ResStringEncryption

VirusTotal [Otro]

Enviar la aplicación original y la ofuscada a Virus Total. Debes proporcionar la clave de API de VT (ver opción -k).
📄 Código fuente de VirusTotal

❱ Licencia

Eres libre de usar este código bajo la Licencia MIT.

❱ Créditos

Unige Dibris

Este software fue desarrollado con fines de investigación en el Computer Security Lab (CSecLab), alojado en DIBRIS, Universidad de Génova.

❱ Equipo

  • Simone Aonzo - Asistente de Investigación
  • Gabriel Claudiu Georgiu - Desarrollador Principal
  • Luca Verderame - Investigador Postdoctoral
  • Alessio Merlo - Miembro del Profesorado
Descargar herramienta
NewAlignment
zipalign
  • el ofuscador NewSignature firma el nuevo archivo apk creado con un certificado personalizado contenido en un keystore incluido con Obfuscapk (aunque se puede especificar un keystore diferente con el parámetro --keystore-file)

  • cuando todos los ofuscadores se han ejecutado sin errores, el archivo apk ofuscado resultante se puede encontrar en obfuscation_working_dir/original_obfuscated.apk, firmado, alineado y listo para instalar en un dispositivo/emulador