
[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:
Mock da API Android
TODO
Detalhes
A VM Smali segue os passos:
Como a VM lida com instruções invoke-*?
Análise do Manifesto (LIMITADA)
Antes da primeira execução, o manifesto Android do aplicativo é analisado. Atualmente, anomalias no manifesto, como configuração insegura, são realmente detectadas neste nível.
O único propósito da análise do manifesto Android é alimentar outros tipos de analisadores.
Análise de permissões
Todas as permissões extraídas do Manifesto são listadas, identificadas e comparadas com a especificação Android da versão da API Android alvo.
O Dexcalibur fornece - apenas em alguns casos - uma descrição do propósito da permissão, a versão mínima da API Android, ...
Análise de atividades
Análise de provedores
Análise de serviços
Análise de receptores
Monitoramento de rede
Monitoramento de intenções
Monitoramento de acesso a arquivos
Não encontra o menu multi-usuário? Sem problemas, não há um menu, mas é possível realizar trabalho colaborativo minimalista.
O Dexcalibur executa um servidor web. Assim, se várias pessoas estiverem na mesma rede deste servidor web e se o firewall do host estiver bem configurado, podem ser várias pessoas trabalhando na mesma instância do Dexcalibur.
Limitações atuais são:
Um agradecimento especial aos contribuidores:
Antes de se aprofundar:
dexcalibur --reinstall? Se não, tente.Primeiro, verifique se as configurações globais foram salvas em <user_directory>/.dexcalibur/
$ ls -la ~/.dexcalibur
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x+ 87 test_user staff 2784 29 avr 11:47 ..
-rw-r--r-- 1 test_user staff 204 29 avr 11:41 config.json
$ cat ~/.dexcalibur/config.json
{
"workspace":"/Users/test_user/dexcaliburWS3",
"registry":"https://github.com/FrenchYeti/dexcalibur-registry/raw/master/",
"registryAPI":"https://api.github.com/repos/FrenchYeti/dexcalibur-registry/contents/"
}
Em seguida, verifique se a estrutura do workspace do Dexcalibur é a seguinte (o conteúdo da pasta /api pode diferir).
$ ls -la ~/dexcaliburWS/.dxc/*
/Users/test_user/dexcaliburWS/.dxc/api:
total 0
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
drwxr-xr-x 8 test_user staff 256 29 avr 11:41 sdk_androidapi_29_google
/Users/test_user/dexcaliburWS/.dxc/bin:
total 34824
drwxr-xr-x 4 test_user staff 128 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rwxr-xr-x 1 test_user staff 17661172 29 avr 11:41 apktool.jar
drwxr-xr-x 18 test_user staff 576 29 avr 11:41 platform-tools
/Users/test_user/dexcaliburWS/.dxc/cfg:
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rw-r--r-- 1 test_user staff 314 29 avr 11:41 config.json
/Users/test_user/dexcaliburWS/.dxc/dev:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
/Users/test_user/dexcaliburWS/.dxc/tmp:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
Se você usa um dispositivo físico conectado via USB, certifique-se de que o modo desenvolvedor e a depuração USB estão ativados.
Se você usa um dispositivo virtual, vá para /splash.html, selecione Device Manager, clique em Connect over TCP ... e siga as instruções. Se você não souber o endereço IP do seu dispositivo, deixe o Dexcalibur detectá-lo marcando a caixa automatic configuration.
Você precisa registrar o dispositivo alvo antes de poder usá-lo. Durante o registro, o Dexcalibur coleta metadados do dispositivo e envia uma versão compatível do servidor Frida.
Esses metadados são usados para selecionar os alvos corretos do frida-server e frida-gadget.
Se uma exclamação vermelha ! aparecer em uma linha na lista de dispositivos, então seu desktop não está autorizado pelo dispositivo. Você provavelmente precisa confirmar
Se seu dispositivo estiver listado no Gerenciador de Dispositivos e a coluna online estiver marcada, clique em enroll
Se seu dispositivo estiver listado no Gerenciador de Dispositivos e a coluna online estiver marcada, clique em enroll
Versões do Dexcalibur anteriores à v0.7 não eram capazes de detectar automaticamente um dispositivo emulado e usá-lo devido a uma análise incompleta da saída do ADB.
Desde a versão >= v0.7, uma vez que seu dispositivo virtual esteja em execução, vá para /splash.html ou clique em DEXCALIBUR na barra de navegação.
Clique no botão Device Manager no menu esquerdo e clique no botão Refresh no topo da tabela.
Você deve ter uma linha começando pelo ID ADB do seu dispositivo virtual.
Primeiro, como qualquer dispositivo alvo, você deve registrá-lo.
Clique em Connect over TCP ... para adicionar um novo dispositivo via TCP ou conectar um dispositivo já registrado via TCP.
Se o dispositivo nunca foi registrado, o registro será realizado via TCP. Em alguns casos, a conexão via TCP é mais lenta do que via USB. Portanto, o registro pode levar mais tempo.
Se o dispositivo foi registrado via USB, o novo tipo de transporte preferido para este dispositivo se torna TCP.
Crie um pull request neste repositório ou crie uma issue.
Crie um pull request no repositório dexcalibur-doc.
A documentação está disponível aqui (site da documentação) e aqui (wiki)
![]() |
|---|
| Eles ofereceram uma licença para Todos os Produtos <3 |
Na verdade, existem poucos recursos de documentação e treinamento sobre o Dexcalibur. Se você usou o Dexcalibur com sucesso para vencer um desafio CTF ou encontrar uma vulnerabilidade, encorajo fortemente você a compartilhar sua experiência.