
Front-end rápido de descompilador de APK Android que consulta diretamente artefatos DEX compilados, extraindo classes e referências cruzadas em milissegundos sem pré-processamento.
Ao descompilar APKs Android massivos, o procedimento padrão é esperar. Esperamos que as ferramentas consumam gigabytes de RAM, inflem completamente os artefatos e gastem dezenas de minutos construindo índices globais pesados e referências cruzadas... Tudo isso apenas para garantir buscas rápidas de código posteriormente, mas aqui está a contradição. Um artefato compilado já é altamente estruturado, os descompiladores modernos nunca utilizam isso, eles desperdiçam enormes quantidades de tempo e memória reconstruindo um banco de dados inflado de relacionamentos de código sobre dados já estruturados. Essa abordagem de engenharia desafia o bom senso. Quando posso extrair diretamente qualquer relacionamento de código do APK em milissegundos, esse pré-processamento ainda tem algum valor?
Em vez de forçar os descompiladores a um pré-processamento pesado, escolhemos consultar o artefato compilado diretamente como um banco de dados. Construímos um motor sem estado e sem sobrecarga que extrai e pesquisa código sob demanda em milissegundos. Neste briefing, exploraremos a engenharia subjacente necessária para contornar os gargalos tradicionais. Demonstraremos como abandonar a inflação completa sondando diretamente dentro do bitstream Deflate, construindo tabelas de consulta Huffman densas para extrair metadados principais sem tocar em blocos de dados irrelevantes. Além disso, explicaremos detalhes de otimização do compilador R8, especialmente como a realocação determinística de constantes e a deduplicação de instruções deixam para trás layouts físicos altamente concentrados, nós weaponizamos esse comportamento do compilador para executar buscas cruzadas de código entre DEX extremamente rápidas. Para mapear esses deslocamentos brutos de bytecode de volta para métodos, projetamos uma primitiva de localização de instruções O(1), alcançando resolução de métodos em tempo constante sem construir tabelas de mapeamento pesadas. Finalmente, ao atingir um alvo, o Droid ASC extrai apenas os bytecodes específicos e suas dependências, reconstruindo dinamicamente um DEX mínimo e autoconsistente inteiramente em memória para descompilação instantânea.
Demonstraremos essa arquitetura ao vivo contra um APK comercial de 352MB. O Droid ASC executa buscas globais de referências cruzadas em 1,79 segundos e descompila classes alvo em 177 milissegundos usando apenas 141MB de RAM. Ao tratar o artefato como um banco de dados somente leitura e operar com zero pré-processamento, devolvemos o descompilador à sua essência central. Ele não é mais uma ferramenta de indexação inflada, mas um motor de descompilação sob demanda extremamente rápido que redefine fundamentalmente como analisamos código compilado.

https://github.com/user-attachments/assets/4c4a6813-8561-490c-a573-ef113da861b6
# from PyPI
pip install droidasc
# or from source
pip install .
Após a instalação, o comando CLI droidasc fica disponível globalmente:
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 imprime descritores de classe Dalvik na ordem de definição do APK/DEX, um por
linha. Com -o, a saída é escrita no arquivo selecionado em vez de stdout.
--prefix com.poc filtra por Lcom/poc; um prefixo já normalizado como
Lcom/poc é mantido inalterado.
Você também pode usar python main.py como antes — ele delega para o mesmo ponto de entrada.
| Patrocinador | Valor |
|---|---|
| HTTChina | 5000¥ |
| c01ns | 11.9¥ |
| gguowang AND cococount | 2¥ |
| Ylarod | 50.11¥ |
Obrigado a todos os patrocinadores pelo seu apoio!
O ASC foi construído com a esperança de que possa genuinamente ajudar todos a melhorar seu fluxo de trabalho de engenharia reversa — desde acelerar as partes tediosas até tornar o impossível algo rotineiro.
Agradecimentos ao projeto Androguard por fornecer a base de engenharia reversa Android e análise DEX usada pelo Droid ASC.