
[Oficial] Herramienta de ingeniería inversa para Android enfocada en la automatización de instrumentación dinámica mediante Frida. Desensambla dex, lo analiza estáticamente, genera hooks, descubre métodos reflejados, almacena datos interceptados y hace cosas nuevas a partir de ellos. Su objetivo es ser una plataforma integral de ingeniería inversa para Android.

Dexcalibur es una plataforma de ingeniería inversa de Android centrada en la automatización de instrumentación. Su particularidad es usar análisis dinámico para mejorar las heurísticas de análisis estático. Su objetivo es automatizar tareas aburridas relacionadas con la instrumentación dinámica, como :
¿Quieres compartir algo o necesitas ayuda? Únete a nuestros chats oficiales :
Telegram - la forma más rápida de obtener una respuesta
La documentación oficial está disponible aquí (sitio web - trabajo en progreso).
Ve las últimas noticias aquí : http://docs.dexcalibur.org/News.html
Mira los videos de demostración de Dexcalibur : Demo: ¿Menos de 1 minuto para hookear 61 métodos? No hay problema. (youtube)
¡Contribuye!
¡No dudes! Hay varias formas de contribuir :
Alternativa: usar Docker
adb (y un emulador de Android si es apropiado)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashPara Linux y MacOS
Instalación con NPM : Si Dexcalibur se ha instalado globalmente usando NPM (opción -g), entonces Dexcalibur se puede iniciar desde la terminal ejecutando $ dexcalibur, de lo contrario se puede iniciar con $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js.
Instalación desde código fuente : desde la carpeta dexcalibur, ejecuta $ dexcalibur o $ node dexcalibur.js.
Para Windows
Instalación con NPM : Incluso si Dexcalibur está instalado globalmente usando NPM (opción -g), Dexcalibur debe iniciarse desde la terminal ejecutando el siguiente comando desde una terminal node <NPM_ROOT>/dexcalibur/dexcalibur.js.
Instalación desde código fuente : desde la carpeta dexcalibur, en la terminal, ejecuta el comando node dexcalibur.js.
¿Estás usando una versión anterior de Dexcalibur?
Sigue los mismos pasos que una instalación nueva, y cuando debas ingresar la ruta del espacio de trabajo, ingresa la ubicación de tu espacio de trabajo actual.
Simplemente ejecutando:
$ npm install -g dexcalibur
La configuración y el espacio de trabajo existentes se detectarán automáticamente.
Las siguientes capturas de pantalla ilustran la actualización automática de xrefs en tiempo de ejecución.


Actualmente, la mayor limitación es que Dexcalibur no puede generar código fuente de hooks dirigidos a funciones nativas (en bibliotecas JNI). Sin embargo, puedes declarar manualmente un Interceptor de Frida editando un hook.
Considerando que Dexcalibur no proporciona (por el momento) características para analizar la parte nativa como bibliotecas JNI o JNA, solo se han detallado las características y limitaciones relacionadas con la parte Java.
La precisión del análisis depende de la integridad de la imagen de la API de Android utilizada durante los pasos iniciales del análisis. Esto significa que si usas un archivo DEX generado a partir del archivo Android.jar del SDK de Android, algunas referencias a métodos, campos o clases internas de la API de Java de Android podrían faltar. Se obtienen mejores resultados cuando el análisis comienza desde un archivo "boot.oat" extraído directamente de un dispositivo real que ejecuta la versión esperada de Android.
TODO : escribir texto
TODO : escribir texto
Comportamientos rastreados
El analizador estático involucrado en la acción "Ejecutar smali (VM)" es capaz de descubrir y aceptar pero rastrea los siguientes comportamientos :
Actualmente, los manejadores/escuchas para tales instrucciones inválidas no son compatibles, pero los eventos se rastrean y se muestran.
IR de Dexcalibur
La VM produce una Representación Intermedia (IR) personalizada y simplificada que se muestra solo para ayudar al analista a realizar su análisis.
Dependiendo del valor de la profundidad de la pila de llamadas y la configuración, el IR puede incluir o no instrucciones ejecutadas dentro de la función llamada. Si la ejecución entra en un bloque try y continúa hasta retornar, pero nunca ejecuta el catch, entonces el bloque catch no se mostrará. De hecho, el propósito del IR de Dexcalibur es mostrar solo "lo que se ejecuta" o "lo que podría ejecutarse dependiendo del valor de algún símbolo" en el contexto de la VM.
El IR de Dexcalibur ayuda a leer una versión limpia del bytecode eliminando goto inútiles y predicados opacos. El IR de Dexcalibur puede ser generado por la VM con 2 niveles de simplificación :
IR de primer nivel, podría usarse si no confías en el IR de segundo nivel :
Segundo nivel :