Droid ASC
github.com/mg1937/asc- Category
- Cybersecurity
- Rank
- No. 955Tools index
- Type
- TOOL
- Use case
- Security & Identity
- GitHub
- 2.7k stars
- Latest release
- dev-0.1.2-post4
- Date
About
Droid ASC is an on-demand Android APK decompiler built to replace JADX MCP for large-scale reverse engineering, claiming 41 to 269 times faster cross-reference index searches (400ms vs. JADX on a 50MB APK, 1.79s on a 300MB APK) and the ability to analyze many APKs in parallel without exhausting memory. The author used it with GPT-5.6 in an automated pipeline that scanned nearly 100 system APK/JAR/APEX files on a device over two days and reported finding several vulnerabilities, including a remote code execution bug and multiple privilege-escalation issues.
What it does
A Python command-line tool, with an optional desktop window, for reading the code inside Android app packages. Rather than unpacking a whole app and building a database first, it treats the compiled package as something to query directly: it reads the zip directory, unpacks only the code files it needs, finds the one holding a requested class, and assembles a tiny standalone code file around that class before turning it back into Java-like source. It can also list classes, print the app's manifest, and search for where a string, type, method or field is used.
Why it's ranked here
The design idea is the draw: skip the up-front indexing that most Android reverse-engineering tools insist on and answer each question from the compiled bytes. The README backs this with a Black Hat Europe Arsenal talk and its own measurement on a 352MB commercial app, a 177 millisecond class decompile in 141MB of RAM. The repository also carries a serious performance regression harness with paired, statistically gated timing comparisons in CI. Apache 2.0 and installable from PyPI. The speed figures are the author's own, measured on the author's samples.
What's good
Single-class lookups stop as soon as a match is found: parallel workers inflate code files and a shared stop signal cancels the rest. The class check is a binary search over the sorted type table, not a full parse. Output from every subcommand can go to stdout or a file, which suits scripted and agent pipelines. Testing notes describe coverage for multi-file apps, both stored and compressed entries, malformed indices and a startup budget of 100 milliseconds internal time, with CI on Python 3.11 and 3.12. The decompiled source keeps method annotations that the underlying engine would otherwise drop.
Tradeoffs
The actual Java reconstruction comes from Androguard's decompiler, which this tool imports and patches at runtime, replacing class constructors and visitor methods. That makes it sensitive to Androguard upgrades, and the declared dependency has only a lower bound. It also replaces many standard-library modules with placeholder stubs at import time to speed startup, a trick its own comments describe as fragile and partly LLM-generated. Output quality is whatever Androguard's decompiler produces, not a JADX-grade engine. There is no MCP server or library API documented in the README; the interface is the command line and a GUI.
How to use it well
Fits a reverse engineer or an automated agent that needs fast, repeated answers from large apps: list classes under a package prefix, pull one class as source, then chase string or method references across every code file. Raise the worker thread count on big multi-file apps. Keep it pinned to a known Androguard version in its own virtual environment, since the runtime patching assumes specific internals. Reach for a full decompiler when you need whole-project export, resource decoding beyond the manifest, or a polished browsing experience.
Technical notes+
droidasc/cli.py defines four argparse subcommands (getclass, listclass, getmanifest, findrefs) plus a --gui path that re-launches itself detached via subprocess.Popen. droidasc/asc_client/apk_handler.py mmaps the APK, locates the EOCD record, scans the central directory for classesN.dex entries, inflates them with raw zlib (wbits -15) in a ThreadPoolExecutor with a threading.Event for early exit, and checks membership with a binary search over type_ids then a 32-byte-aligned scan of class_defs. droidasc/asc_core/core/dex/dex_manager.py runs a Dalvik interpreter pass to collect indices, then DexHollower, DexIndexMapper and DexBuilder emit a minimal DEX. droidasc/asc_core/utils/decompiler.py stubs modules in sys.modules, monkey-patches Androguard DvClass, DvMethod and Writer, swaps in a FakeAnalysis, and suppresses Adler32 header errors. pyproject.toml declares androguard>=4.1.3 and mutf8, Python >=3.10.
Observed
- License
- Apache-2.0 (LICENSE, pyproject.toml)
- Language
- Python, requires 3.10 or later per pyproject.toml
- Install
- pip install droidasc, or pip install . from source
- Interfaces
- CLI with getclass, listclass, getmanifest, findrefs subcommands, plus a --gui desktop mode
- Core dependency
- Androguard, imported and monkey-patched at runtime in droidasc/asc_core/utils/decompiler.py
- Tests
- Regression runner, startup and reference benchmarks, and a paired base-versus-candidate comparison described in tests/TESTING.md
- Startup budget
- Median 100 ms internal and 250 ms wall time for getclass --debug on Linux CI (tests/TESTING.md)
- Platform notes
- Fork-based worker pool on POSIX; Windows falls back to the default context (droidasc/asc_client/apk_handler.py)
Read from README.md, pyproject.toml, droidasc/cli.py, droidasc/asc_core/utils/dex_parser.py, droidasc/asc_core/utils/decompiler.py, droidasc/asc_client/apk_handler.py, droidasc/asc_core/core/dex/dex_manager.py, tests/TESTING.md, LICENSE.
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.