
Schnelles Android-APK-Decompiler-Frontend, das kompilierte DEX-Artefakte direkt abfragt und Klassen sowie Querverweise in Millisekunden ohne Vorverarbeitung extrahiert.
Beim Dekompilieren massiver Android-APKs besteht das Standardverfahren darin, zu warten. Wir warten darauf, dass Tools Gigabytes an RAM verschlingen, die Artefakte vollständig aufblähen und Dutzende Minuten damit verbringen, schwere globale Indizes und Querverweise aufzubauen... All dies nur, um spätere schnelle Codesuchen zu garantieren, aber hier ist der Widerspruch. Ein kompiliertes Artefakt ist bereits hochgradig strukturiert, moderne Decompiler nutzen dies nie, sie verschwenden massive Mengen an Zeit und Speicher damit, eine aufgeblähte Datenbank von Codebeziehungen über bereits strukturierte Daten zu rekonstruieren. Dieser ingenieurtechnische Ansatz widerspricht dem gesunden Menschenverstand. Wenn ich jede Codebeziehung direkt aus der APK in Millisekunden extrahieren kann, hat diese Vorverarbeitung dann noch einen Wert?
Anstatt Decompiler in schwere Vorverarbeitung zu zwingen, entscheiden wir uns dafür, das kompilierte Artefakt direkt als Datenbank abzufragen. Wir haben eine zustandslose Engine ohne Overhead gebaut, die Code bei Bedarf in Millisekunden extrahiert und durchsucht. In diesem Briefing werden wir die zugrunde liegende Technik erkunden, die erforderlich ist, um traditionelle Engpässe zu umgehen. Wir werden demonstrieren, wie man das vollständige Aufblähen aufgibt, indem man direkt innerhalb des Deflate-Bitstreams sondiert und dichte Huffman-Lookup-Tabellen aufbaut, um Kernmetadaten zu extrahieren, ohne irrelevante Datenblöcke zu berühren. Darüber hinaus werden wir Optimierungsdetails des R8-Compilers erläutern, insbesondere wie deterministische Konstantenverschiebung und Instruktionsdeduplizierung hochkonzentrierte physische Layouts hinterlassen; wir bewaffnen dieses Compilerverhalten, um blitzschnelle DEX-übergreifende Codesuchen auszuführen. Um diese rohen Bytecode-Offsets auf Methoden abzubilden, haben wir eine O(1)-Instruktionslokalisierungs-Primitive entwickelt, die eine Methodenauflösung in konstanter Zeit erreicht, ohne schwere Mapping-Tabellen aufzubauen. Schließlich extrahiert Droid ASC beim Erreichen eines Ziels nur die spezifischen Bytecodes und ihre Abhängigkeiten und rekonstruiert dynamisch eine minimale und selbstkonsistente DEX vollständig im Speicher für sofortige Dekompilierung.
Wir werden diese Architektur live gegen eine 352MB kommerzielle APK demonstrieren. Droid ASC führt globale Querverweissuchen in 1,79 Sekunden aus und dekompiliert Zielklassen in 177 Millisekunden unter Verwendung von nur 141MB RAM. Indem wir das Artefakt als schreibgeschützte Datenbank behandeln und mit null Vorverarbeitung arbeiten, führen wir den Decompiler zu seinem Kern zurück. Er ist kein aufgeblähtes Indizierungswerkzeug mehr, sondern eine blitzschnelle On-Demand-Dekompilierungs-Engine, die grundlegend neu definiert, wie wir kompilierten Code analysieren.

https://github.com/user-attachments/assets/4c4a6813-8561-490c-a573-ef113da861b6
# from PyPI
pip install droidasc
# or from source
pip install .
Nach der Installation ist der droidasc CLI-Befehl global verfügbar:
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 gibt Dalvik-Klassenbeschreibungen in APK/DEX-Definitionsreihenfolge aus, eine pro
Zeile. Mit -o wird die Ausgabe in die ausgewählte Datei anstelle von stdout geschrieben.
--prefix com.poc filtert nach Lcom/poc; ein bereits normalisierter Präfix wie
Lcom/poc bleibt unverändert.
Sie können auch python main.py wie zuvor verwenden — es delegiert an denselben Einstiegspunkt.
| Sponsor | Betrag |
|---|---|
| HTTChina | 5000¥ |
| c01ns | 11.9¥ |
| gguowang UND cococount | 2¥ |
| Ylarod | 50.11¥ |
Vielen Dank an alle Sponsoren für Ihre Unterstützung!
ASC wurde mit der Hoffnung entwickelt, dass es jedem wirklich helfen kann, seinen Reverse-Engineering-Workflow zu verbessern — von der Beschleunigung der mühsamen Teile bis hin dazu, das Unmögliche zur Routine zu machen.
Dank an das Androguard-Projekt für die Bereitstellung der Android-Reverse-Engineering- und DEX-Analyse-Grundlage, die von Droid ASC verwendet wird.