
[Officiel] Outil de rétro-ingénierie Android axé sur l'automatisation de l'instrumentation dynamique exploitant Frida. Il désassemble le dex, l'analyse statiquement, génère des hooks, découvre les méthodes réfléchies, stocke les données interceptées et en tire de nouvelles choses. Son objectif est d'être une plateforme tout-en-un de rétro-ingénierie Android.

Dexcalibur est une plateforme de rétro-ingénierie Android axée sur l'automatisation de l'instrumentation. Sa particularité est d'utiliser l'analyse dynamique pour améliorer les heuristiques d'analyse statique. Il vise à automatiser les tâches fastidieuses liées à l'instrumentation dynamique, telles que :
Vous voulez partager quelque chose ou avez besoin d'aide ? Rejoignez nos discussions officielles :
Telegram - le moyen le plus rapide d'obtenir une réponse
La documentation officielle est disponible ici (site web - en cours de développement).
Voir les dernières nouvelles ici : http://docs.dexcalibur.org/News.html
Voir les vidéos de démonstration de Dexcalibur : Démo : Moins d'une minute pour hooker 61 méthodes ? Pas un problème. (youtube)
Contribuez !
N'hésitez pas ! Il y a plusieurs façons de contribuer :
Aller à la doc d'installation
Alternative : utiliser Docker
adb (et un émulateur Android si approprié)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashPour Linux et macOS
Installation via NPM : Si Dexcalibur a été installé globalement avec NPM (option -g), alors Dexcalibur peut être lancé depuis le terminal en faisant $ dexcalibur, sinon il peut être lancé par $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js.
Installation depuis les sources : depuis le dossier dexcalibur, exécutez $ dexcalibur ou $ node dexcalibur.js.
Pour Windows
Installation via NPM : Même si Dexcalibur a été installé globalement avec NPM (option -g), Dexcalibur doit être lancé depuis le terminal en exécutant la commande suivante node <NPM_ROOT>/dexcalibur/dexcalibur.js.
Installation depuis les sources : depuis le dossier dexcalibur, dans le terminal, exécutez la commande node dexcalibur.js.
Vous utilisez une version précédente de Dexcalibur ?
Suivez les mêmes étapes qu'une nouvelle installation, et lorsque vous devrez entrer le chemin de l'espace de travail, entrez l'emplacement de votre espace de travail actuel.
Simplement en faisant :
$ npm install -g dexcalibur
La configuration et l'espace de travail existants seront détectés automatiquement.
Les captures d'écran suivantes illustrent la mise à jour automatique des xrefs à l'exécution.


Actuellement, la plus grande limitation est que Dexcalibur n'est pas capable de générer du code source de hook ciblant une fonction native (dans une bibliothèque JNI). Cependant, vous pouvez déclarer manuellement un Interceptor de Frida en éditant un hook.
Étant donné que Dexcalibur ne fournit pas (pour le moment) de fonctionnalités pour analyser la partie native telle que la bibliothèque JNI ou JNA, seules les fonctionnalités et limitations liées à la partie Java ont été détaillées.
La précision de l'analyse dépend de l'exhaustivité de l'image de l'API Android utilisée lors des premières étapes de l'analyse. Cela signifie que si vous utilisez un fichier DEX généré à partir du fichier Android.jar du SDK Android, certaines références à des méthodes, champs ou classes internes de l'API Java Android peuvent manquer. De meilleurs résultats sont obtenus lorsque l'analyse démarre à partir d'un fichier "boot.oat" extrait directement d'un appareil réel exécutant la version Android attendue.
TODO : écrire du texte
TODO : écrire du texte
Comportements suivis
L'analyseur statique impliqué dans l'action "Exécuter smali (VM)" est capable de découvrir et d'accepter mais aussi de suivre les comportements suivants :
Actuellement, les gestionnaires/écouteurs pour une telle instruction invalide ne sont pas pris en charge, mais les événements sont suivis et rendus.
IR Dexcalibur
La VM produit une représentation intermédiaire (IR) personnalisée et simplifiée qui est affichée uniquement pour aider l'analyste à effectuer son analyse.
Selon la valeur de la profondeur de la pile d'appels et de la configuration, l'IR peut inclure ou non les instructions exécutées dans la fonction appelée. Si l'exécution entre dans un bloc try et continue jusqu'au retour, mais n'exécute jamais le catch, alors le bloc catch ne sera pas rendu. En fait, le but de l'IR Dexcalibur est de rendre uniquement "ce qui est exécuté" ou "ce qui pourrait être exécuté en fonction de la valeur d'un symbole" dans le contexte de la VM.
L'IR Dexcalibur aide à lire une version nettoyée du bytecode en supprimant les goto inutiles et les prédicats opaques. L'IR Dexcalibur peut être généré par la VM avec 2 niveaux de simplification :
1er niveau d'IR, pourrait être utilisé si vous ne faites pas confiance au 2e niveau d'IR :