
Front-end rapide de décompilation d'APK Android qui interroge directement les artefacts DEX compilés, extrayant les classes et les références croisées en quelques millisecondes sans prétraitement.
Lors de la décompilation d'APK Android massifs, la procédure standard consiste à attendre. Nous attendons que les outils consomment des gigaoctets de RAM, gonflent entièrement les artefacts et passent des dizaines de minutes à construire de lourds index globaux et des références croisées... Tout cela uniquement pour garantir des recherches de code rapides par la suite, mais voici la contradiction. Un artefact compilé est déjà hautement structuré, les décompilateurs modernes ne l'exploitent jamais, ils gaspillent d'énormes quantités de temps et de mémoire à reconstruire une base de données gonflée de relations de code sur des données déjà structurées. Cette approche d'ingénierie défie le bon sens. Quand je peux extraire directement n'importe quelle relation de code depuis l'APK en millisecondes, ce prétraitement a-t-il encore une quelconque valeur ?
Au lieu de forcer les décompilateurs à un lourd prétraitement, nous choisissons d'interroger directement l'artefact compilé comme une base de données. Nous avons construit un moteur sans état et sans surcoût qui extrait et recherche le code à la demande en millisecondes. Dans ce briefing, nous explorerons l'ingénierie sous-jacente nécessaire pour contourner les goulots d'étranglement traditionnels. Nous démontrerons comment abandonner le gonflement complet en sondant directement dans le flux binaire Deflate, en construisant des tables de correspondance Huffman denses pour extraire les métadonnées essentielles sans toucher aux blocs de données non pertinents. De plus, nous expliquerons les détails d'optimisation du compilateur R8, en particulier comment la relocalisation déterministe des constantes et la déduplication des instructions laissent derrière elles des dispositions physiques hautement concentrées ; nous exploitons ce comportement du compilateur pour exécuter des recherches de code croisées entre DEX à une vitesse fulgurante. Pour mapper ces décalages de bytecode bruts vers des méthodes, nous avons conçu une primitive de localisation d'instructions en O(1), atteignant une résolution de méthode en temps constant sans construire de lourdes tables de correspondance. Enfin, en atteignant une cible, Droid ASC extrait uniquement les bytecodes spécifiques et ses dépendances, reconstruisant dynamiquement un DEX minimal et cohérent entièrement en mémoire pour une décompilation instantanée.
Nous démontrerons cette architecture en direct contre un APK commercial de 352 Mo. Droid ASC exécute des recherches de références croisées globales en 1,79 seconde et décompile les classes cibles en 177 millisecondes en utilisant seulement 141 Mo de RAM. En traitant l'artefact comme une base de données en lecture seule et en opérant sans aucun prétraitement, nous ramenons le décompilateur à son essence première. Ce n'est plus un outil d'indexation gonflé, mais un moteur de décompilation à la demande, ultra-rapide, qui redéfinit fondamentalement notre façon d'analyser le code compilé.

https://github.com/user-attachments/assets/4c4a6813-8561-490c-a573-ef113da861b6
# from PyPI
pip install droidasc
# or from source
pip install .
Après l'installation, la commande CLI droidasc est disponible globalement :
usage: droidasc [-h] {getclass,listclass,getmanifest,findrefs} ...
ASC tooling entry.
positional arguments:
{getclass,listclass,getmanifest,findrefs}
getclass Locate the target class in APK, extract one DEX in memory, then decompile.
listclass List classes defined across all DEX entries in APK.
getmanifest Decode AndroidManifest.xml from APK and print it as XML.
findrefs Find code references for string/type/method/field across all DEX entries in APK.
options:
-h, --help show this help message and exit
examples:
droidasc app.apk --gui
droidasc getclass app.apk Lcom/poc/Main; -o Main.java
droidasc getclass app.apk com.poc.Main --threads 16
droidasc listclass app.apk -o classes.txt
droidasc listclass app.apk --prefix com.poc
droidasc getmanifest app.apk -o AndroidManifest.xml
droidasc findrefs app.apk string token -o string_refs.txt
droidasc findrefs app.apk type com.poc.Main
droidasc findrefs app.apk method onCreate --class com.poc.Main
droidasc findrefs app.apk method notify --class MainActivity --fuzzy-class -o method_refs.txt
droidasc findrefs app.apk field apiKey -o field_refs.txt
listclass affiche les descripteurs de classes Dalvik dans l'ordre de définition APK/DEX, un par
ligne. Avec -o, la sortie est écrite dans le fichier sélectionné au lieu de stdout.
--prefix com.poc filtre par Lcom/poc ; un préfixe déjà normalisé tel que
Lcom/poc est conservé inchangé.
Vous pouvez également utiliser python main.py comme avant — il délègue au même point d'entrée.
| Sponsor | Montant |
|---|---|
| HTTChina | 5000¥ |
| c01ns | 11.9¥ |
| gguowang AND cococount | 2¥ |
| Ylarod | 50.11¥ |
Merci à tous les sponsors pour votre soutien !
ASC est construit avec l'espoir qu'il puisse véritablement aider chacun à améliorer son flux de travail d'ingénierie inverse — de l'accélération des parties fastidieuses au fait de rendre l'impossible routinier.
Merci au projet Androguard pour avoir fourni la base d'ingénierie inverse Android et d'analyse DEX utilisée par Droid ASC.