11 KiB
Décompilateurs APK
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
JD-Gui
Le premier décompilateur Java gui célèbre, vous pouvez l'utiliser pour examiner le code Java de l'APK une fois que vous l'avez obtenu.
Jadx
Décompilateur Java (multi-plateforme) intégré et en ce moment je pense que c'est celui recommandé.
Il suffit de télécharger la dernière version et de l'exécuter à partir du dossier bin:
jadx-gui
En utilisant l'interface graphique, vous pouvez effectuer une recherche de texte, accéder aux définitions de fonctions (CTRL + clic gauche sur la fonction) et aux références croisées (clic droit --> Rechercher l'utilisation).
Si vous voulez seulement le code Java mais sans utiliser une interface graphique, une méthode très simple est d'utiliser l'outil de ligne de commande jadx :
jadx app.apk
Quelques options intéressantes de jadx (versions GUI et CLI) sont :
-d <path to output dir>
--no-res #No resources
--no-src #No source code
--no-imports #Always write entire package name (very useful to know where is the function that you might want to hook)
Outil de rétro-ingénierie GDA-android
GDA est également une plateforme d'analyse inverse puissante et rapide. Elle ne prend pas en charge uniquement les opérations de décompilation de base, mais également de nombreuses fonctions excellentes telles que la détection de comportements malveillants, la détection de fuites de confidentialité, la détection de vulnérabilités, la résolution de chemin, l'identification de packer, l'analyse de suivi de variable, la désobfuscation, les scripts Python et Java, l'extraction de la mémoire de l'appareil, le chiffrement et le déchiffrement de données, etc.
Uniquement pour Windows.
Visionneuse de bytecode
Un autre outil intéressant pour effectuer une analyse statique est : bytecode-viewer. Il vous permet de décompiler l'APK en utilisant plusieurs décompilateurs en même temps. Ensuite, vous pouvez voir par exemple, 2 décompilateurs Java différents et un décompilateur Smali. Il vous permet également de modifier le code :
Si vous modifiez le code, vous pouvez alors l'exporter.
Un mauvais point de bytecode-viewer est qu'il n'a pas de références ou de références croisées.
Enjarify
Enjarify est un outil de traduction du bytecode Dalvik en bytecode Java équivalent. Cela permet aux outils d'analyse Java d'analyser les applications Android.
Dex2jar est un outil plus ancien qui tente également de traduire Dalvik en bytecode Java. Il fonctionne raisonnablement bien la plupart du temps, mais de nombreuses fonctionnalités obscures ou des cas limites le feront échouer ou même produire des résultats incorrects en silence. En revanche, Enjarify est conçu pour fonctionner dans le plus grand nombre de cas possible, même pour le code où Dex2jar échouerait. Entre autres choses, Enjarify gère correctement les noms de classe Unicode, les constantes utilisées comme plusieurs types, les conversions implicites, les gestionnaires d'exceptions sautant dans le flux de contrôle normal, les classes qui font référence à trop de constantes, les méthodes très longues, les gestionnaires d'exceptions après un gestionnaire catchall et les valeurs initiales statiques du mauvais type.
CFR
CFR décompilera les fonctionnalités Java modernes - y compris une grande partie de Java 9, 12 & 14, mais est entièrement écrit en Java 6, donc fonctionnera partout ! (FAQ) - Il fera même un bon travail en transformant les fichiers de classe d'autres langages JVM en Java !
Ce fichier JAR peut être utilisé comme suit :
java -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
Pour les fichiers JAR plus volumineux, j'ai constaté que la mémoire était insuffisante. Vous pouvez simplement adapter la taille du pool d'allocation de mémoire du JVM si cela vous arrive également.
java -Xmx4G -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
Cet exemple permettra d'allouer un maximum de 4 Go.
Dans le répertoire de sortie, vous trouverez les fichiers .java
décompilés, ainsi qu'un résumé de la décompilation.
Fernflower
Ensuite, il y a Fernflower, qui fait partie de IntelliJ IDEA. Tout le monde mentionne que c'est un décompilateur analytique (comme indiqué dans leur description de projet), mais personne ne précise ce que cela signifie réellement. J'ai seulement trouvé cette question Stackoverflow, qui malheureusement reste sans réponse à ce jour.
Quoi qu'il en soit, comme il n'y a pas de versions autonomes, vous devez le construire vous-même. En tant que projet basé sur Gradle, vous pouvez le cloner et exécuter la commande suivante, à condition que Gradle soit installé sur votre machine.
cd ./plugins/java-decompiler/engine && gradle jar
Ici, nous commençons par changer notre répertoire de travail vers le répertoire racine de Fernflower. Ensuite, nous demandons à Gradle de construire le fichier ./build/libs/fernflower.jar
.
L'invocation de Fernflower est similaire à celle de CFR.
java -jar ./fernflower.jar "$JARFILE" "$OUTDIR"
Parmi les décompileurs décrits ici, c'est le seul qui génère les fichiers .java
dans un fichier JAR. Vous pouvez facilement extraire les fichiers sources en utilisant unzip
.
Krakatau
Vous vous souvenez d'Enjarify ci-dessus ? Le même auteur est également le développeur d'un décompileur nommé Krakatau.
Contrairement aux autres projets, celui-ci est écrit en Python. Et je pense que c'est la raison pour laquelle il est un peu différent des autres.
Permettez-moi de citer le README du projet.
Ensuite, assurez-vous d'avoir des fichiers JAR contenant les définitions (sic!) de toutes les classes externes (c'est-à-dire les bibliothèques) qui pourraient être référencées par le JAR que vous essayez de décompiler. Cela inclut les classes de la bibliothèque standard (c'est-à-dire JRT).
Et selon la description, ces classes de bibliothèque standard sont fournies jusqu'à la version 8 de Java sous la forme du fichier rt.jar
. Pour les versions ultérieures, l'auteur fournit jrt-extractor, qui peut générer ce fichier pour nous.
Nous téléchargeons donc cet outil et exécutons les commandes suivantes.
cd ./jrt-extractor
javac JRTExtractor.java
java -ea JRTExtractor
Cela devrait avoir écrit un fichier rt.jar
à l'intérieur du répertoire.
Avec ce fichier, nous pouvons exécuter Krakatau comme suit.
./Krakatau/decompile.py -out "$OUTDIR" -skip -nauto -path ./jrt-extractor/rt.jar "$JARFILE"
Je vais me référer au GitHub du projet pour une explication des paramètres. Notez simplement que pour toutes les bibliothèques utilisées par votre fichier JAR, Krakatau vous demandera de l'ajouter en tant que fichier JAR au drapeau -path
.
procyon
Une fois installé, l'utilisation est simple.
procyon -jar "$JARFILE" -o "$OUTDIR"
Références
{% embed url="https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.