
[Oficial] Ferramenta de engenharia reversa para Android focada em automação de instrumentação dinâmica utilizando Frida. Ela desmonta dex, analisa estaticamente, gera hooks, descobre métodos refletidos, armazena dados interceptados e faz novas coisas a partir disso. Seu objetivo é ser uma plataforma completa de engenharia reversa para Android.

Dexcalibur é uma plataforma de engenharia reversa para Android focada em automação de instrumentação. Sua particularidade é usar análise dinâmica para melhorar heurísticas de análise estática. Tem como objetivo automatizar tarefas tediosas relacionadas à instrumentação dinâmica, tais como:
Quer compartilhar algo ou precisa de ajuda? Junte-se aos nossos chats oficiais:
Telegram - a forma mais rápida de obter uma resposta
Documentação oficial disponível aqui (site - trabalho em andamento).
Veja as últimas notícias aqui : http://docs.dexcalibur.org/News.html
Mostrar vídeos de demonstração do Dexcalibur : Demo: Menos de 1 minuto para hookear 61 métodos? Sem problemas. (youtube)
Contribua!
Não hesite! Existem várias formas de contribuir:
Vá para Documento de instalação
Alternativa: usar Docker
adb (and an Android emulator if appropriate)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashPara Linux e MacOS
Instalação via NPM: Se o Dexcalibur foi instalado globalmente usando NPM (opção -g), então o Dexcalibur pode ser iniciado a partir do terminal executando $ dexcalibur, caso contrário, pode ser iniciado executando $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js.
Instalação a partir do código-fonte: a partir da pasta dexcalibur, execute $ dexcalibur ou $ node dexcalibur.js.
Para Windows
Instalação via NPM: Mesmo que o Dexcalibur esteja instalado globalmente usando NPM (opção -g), o Dexcalibur deve ser iniciado a partir do terminal executando o seguinte comando: node <NPM_ROOT>/dexcalibur/dexcalibur.js.
Instalação a partir do código-fonte: a partir da pasta dexcalibur, no terminal, execute o comando node dexcalibur.js.
Você está usando uma versão anterior do Dexcalibur?
Siga os mesmos passos de uma nova instalação e, quando for necessário inserir o caminho do workspace, insira a localização do seu workspace atual.
Apenas executando:
$ npm install -g dexcalibur
A configuração e o workspace existentes serão detectados automaticamente.
As seguintes capturas de tela ilustram a atualização automática de xrefs em tempo de execução.


Atualmente, a maior limitação é que o Dexcalibur não é capaz de gerar código fonte de hook direcionado a funções nativas (em bibliotecas JNI). No entanto, você pode declarar manualmente um Interceptor do Frida editando um hook.
Considerando que o Dexcalibur não oferece (por enquanto) funcionalidades para analisar a parte nativa, como bibliotecas JNI ou JNA, apenas as funcionalidades e limitações relacionadas à parte Java foram detalhadas.
A precisão da análise depende da completude da imagem da API Android usada durante os primeiros passos da análise. Isso significa que, se você usar um arquivo DEX gerado a partir do arquivo Android.jar do Android SDK, algumas referências a métodos, campos ou classes internas da API Java do Android podem estar faltando. Resultados melhores são obtidos quando a análise começa a partir de um arquivo "boot.oat" extraído diretamente de um dispositivo real executando a versão esperada do Android.
TODO : write text
TODO : write text
Comportamentos rastreados
O analisador estático envolvido na ação "Executar smali (VM)" é capaz de descobrir e aceitar, mas rastrear os seguintes comportamentos:
Atualmente, handlers/listeners para tais instruções inválidas não são suportados, mas os eventos são rastreados e renderizados.
IR do Dexcalibur
A VM produz uma Representação Intermediária (IR) customizada e simplificada que é exibida apenas para ajudar o analista a realizar sua análise.
Dependendo do valor da profundidade da callstack e da configuração, o IR pode incluir ou não instruções executadas dentro de funções chamadas. Se a execução entra em um bloco try e continua até o retorno, mas nunca executa o catch, então o bloco catch não será renderizado. Na verdade, o propósito do IR do Dexcalibur é renderizar apenas "o que é executado" ou "o que poderia ser executado dependendo do valor de algum símbolo" no contexto da VM.
O IR do Dexcalibur ajuda a ler uma versão limpa do bytecode removendo goto desnecessários e predicados opacos. O IR do Dexcalibur pode ser gerado pela VM com 2 níveis de simplificação:
1º nível de IR, pode ser usado se você não confia no 2º nível de IR:
2º nível: