Voltron é um kit de ferramentas de UI de depurador extensível escrito em Python. Seu objetivo é melhorar a experiência do usuário de vários depuradores (LLDB, GDB, VDB e WinDbg), permitindo a anexação de visualizações de utilitários que podem recuperar e exibir dados do host do depurador. Ao executar essas visualizações em outros TTYs, você pode construir uma interface com o usuário do depurador customizada para atender às suas necessidades.
A Voltron não pretende ser tudo para todos. Não é um substituto completo para a CLI do seu depurador. Em vez disso, seu objetivo é complementar sua configuração existente e permitir que você estenda seu depurador CLI tanto quanto desejar. Se você deseja apenas visualizar o conteúdo do registro em uma janela ao lado do seu depurador, você pode fazer isso. Se você quiser fazer tudo e ter algo que se pareça mais com o OllyDbg, você também pode fazer isso.
Visualizações integradas são fornecidas para:
A configuração do autor é mais ou menos assim:
Qualquer comando do depurador pode ser dividido em uma visualização e destacado com um lexer Pygments especificado:
Mais capturas de tela estão aqui.
Voltron suporta LLDB, GDB, VDB e WinDbg/CDB (via PyKD) e roda em macOS, Linux e Windows.
O suporte ao WinDbg ainda é relativamente novo. Abra um problema se tiver problemas.
As seguintes arquiteturas são suportadas:
lddb | gdb | vdb | windbg | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
braço | ✓ | ✓ | ✓ | ✗ |
braço64 | ✓ | ✗ | ✗ | ✗ |
power pc | ✗ | ✓ | ✗ | ✗ |
Nota: Somente derivados macOS e Debian são totalmente suportados pelo script de instalação. Esperamos que não falhe em outras distros Linux, mas não tentará instalar dependências de pacotes. Se você estiver usando outra distribuição, dê uma olhada em install.sh
para descobrir quais dependências você pode precisar instalar antes de executá-la.
Baixe o código-fonte e execute o script de instalação:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Por padrão, o script de instalação será instalado no diretório site-packages
do usuário. Se você deseja instalar no sistema site-packages
, use o sinalizador -s
:
$ ./install.sh -s
Você também pode instalar em um ambiente virtual (somente para LLDB) como este:
$ ./install.sh -v /path/to/venv -b lldb
Se você estiver no Windows sem shell, tiver problemas na instalação ou preferir instalar manualmente, consulte a documentação de instalação manual.
Se o seu depurador tiver um script de inicialização ( .lldbinit
para LLDB ou .gdbinit
para GDB), configure-o para carregar o Voltron quando ele iniciar, fornecendo o script de ponto de entrada entry.py
. O caminho completo estará dentro do pacote voltron
. Por exemplo, no macOS pode ser /Library/Python/2.7/site-packages/voltron/entry.py . O script install.sh
adicionará isso ao seu arquivo .gdbinit
ou .lldbinit
automaticamente se detectar GDB ou LLDB em seu caminho.
LDDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
Inicie seu depurador e inicialize o Voltron manualmente, se necessário.
Nas versões recentes do LLDB você não precisa inicializar o Voltron manualmente:
$ lldb target_binary
Em versões mais antigas do LLDB você precisa chamar voltron init
depois de carregar o inferior:
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB só é compatível com execução via Bash com um ambiente de usuário Linux. O autor testa com Git Bash e ConEmu. PyKD e Voltron podem ser carregados em um comando ao iniciar o depurador:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
Em outro terminal (eu uso painéis iTerm), inicie uma das visualizações da IU. No LLDB, WinDbg e GDB as visualizações serão atualizadas imediatamente. No VDB eles não serão atualizados até que o inferior pare (em um ponto de interrupção, após uma etapa, etc.):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Defina um ponto de interrupção e execute seu inferior.
(*db) b main
(*db) run
Quando o depurador atinge o ponto de interrupção, as visualizações serão atualizadas para refletir o estado atual dos registros, pilha, memória, etc. As visualizações são atualizadas após cada comando ser executado na CLI do depurador, usando o mecanismo "stop hook" do depurador. Portanto, cada vez que você avança ou continua e atinge um ponto de interrupção, as visualizações serão atualizadas.
Veja o wiki no github.
P. Por que estou recebendo um ImportError
ao carregar o Voltron?
R. Você pode ter várias versões do Python instaladas e ter instalado o Voltron usando a versão errada. Consulte as instruções de instalação mais detalhadas.
P. GEF? PEDA? PwnDbg? gdbinit do FG?
A. Todas as extensões excelentes para GDB. Essas ferramentas fornecem principalmente conjuntos de comandos adicionais para tarefas de exploração, mas cada uma também fornece uma exibição de "contexto" com uma visualização de registros, pilha, código, etc., como o Voltron. Essas ferramentas imprimem sua exibição de contexto no console do depurador sempre que o depurador é interrompido. Voltron adota uma abordagem diferente ao incorporar um implante de servidor RPC no depurador e permitir a anexação de visualizações de outros terminais (ou mesmo navegadores da web, ou agora sincronizando com Binary Ninja), o que permite ao usuário construir uma interface multi-janela mais limpa para seu depurador. Voltron funciona muito bem com todas essas ferramentas. Você pode simplesmente desativar a exibição de contexto na extensão GDB de sua escolha e conectar algumas visualizações Voltron, enquanto ainda obtém todos os benefícios dos comandos úteis adicionados por essas ferramentas.
Consulte o rastreador de problemas no github para obter mais informações ou para enviar problemas.
Se você estiver enfrentando um ImportError
ao carregar o Voltron, certifique-se de seguir as instruções de instalação para sua plataforma.
Em versões mais antigas do LLDB, o comando voltron init
deve ser executado manualmente após carregar o alvo de depuração, pois um alvo deve ser carregado antes que os ganchos do Voltron possam ser instalados. Voltron tentará registrar automaticamente seu manipulador de eventos e informará ao usuário se voltron init
for necessário.
Mais informações sobre o suporte WinDbg/CDB aqui.
Os autores usam Voltron principalmente com a versão mais recente do LLDB no macOS. Tentaremos testar tudo em tantas plataformas e arquiteturas quanto possível antes dos lançamentos, mas LLDB/macOS/x64 será de longe a combinação usada com mais frequência. Espero que Voltron não coloque fogo em seus animais de estimação, mas sim YMMV.
Veja o arquivo LICENÇA.
Se você usa isso e não odeia, compre uma cerveja para mim em uma conferência algum dia. Esta licença também se estende a outros contribuidores - richo definitivamente merece algumas cervejas por suas contribuições.
Agradeço aos meus ex-empregadores Assurance e Azimuth Security por me darem tempo para trabalhar nisso.
Parabéns a richo por todas as suas contribuições para Voltron.
O gdbinit do fG! foi a inspiração original para este projeto.
Obrigado ao Willi por implementar o suporte VDB.
Voltron agora usa Capstone para desmontagem, bem como o mecanismo de desmontagem interna dos hosts do depurador. Capstone é um desmontador poderoso, de código aberto e multiarquitetura sobre o qual a próxima geração de ferramentas de engenharia reversa e depuração está sendo construída. Confira.
Obrigado ao grazfather pelas contribuições contínuas.