
Uma interface PyQt5 para o plugin binjatron do Binary Ninja que inclui recursos de destaque com o objetivo de facilitar o aprendizado de engenharia reversa para iniciantes.
A capacidade de fazer engenharia reversa de binários x86 é uma habilidade importante mesmo fora da indústria de segurança da informação. No entanto, mesmo com a abundância de materiais de treinamento disponíveis, continua sendo uma habilidade difícil de aprender. Muitos estudantes expressaram frustração com a quantidade de conhecimento prévio necessária para progredir, ainda que modestamente, em binários simples.
O Binary Ninja é frequentemente comercializado para estudantes devido ao seu custo relativamente baixo, interface limpa e facilidade de uso. As linguagens intermediárias de baixo e médio nível também fornecem uma maneira fácil de entender o que as instruções fazem. Este projeto visa tornar o Binary Ninja uma ferramenta ainda melhor para iniciantes, facilitando a visualização da execução de um binário.
Este projeto é um produto do programa de estágio de verão de 2017 do NCC Group. Os componentes de depuração visual podem ser considerados um sucessor espiritual do Microcorruption, um CTF de segurança embarcada produzido pela Matasano Security. Atualizações futuras serão acompanhadas em https://github.com/ehennenfent/binja_dynamics. O NCC Group não é responsável por quaisquer alterações adicionais feitas no repositório após 18 de agosto de 2017.
Dentro da sua pasta de plugins do Binary Ninja, execute:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
Após carregar um binário, clique no item Enable Dynamic Analysis Tools no menu de ferramentas. Uma janela do depurador será aberta, que você pode controlar pelos botões da barra de ferramentas. Conforme você avança pela execução, a interface será atualizada em tempo real para refletir o estado do programa. Graças ao Binjatron, a instrução atual e quaisquer breakpoints são destacados na visualização do binário. Para cada endereço de memória e para os registradores, o valor é destacado em laranja sempre que tiver mudado como resultado da instrução anterior. Da mesma forma, o topo e a base do quadro de pilha atual (bem como a localização prevista do endereço de retorno) são destacados para facilitar aos iniciantes a identificação de quais porções da memória são importantes para examinar. O visualizador de traceback exibe um backtrace dos quadros de pilha atuais e fornece um botão que salta automaticamente a visualização do binário para o local indicado pelo endereço de memória onde o plugin espera encontrar o endereço de retorno. Em algumas funções, o quadro de pilha não é desmontado da maneira que o plugin espera, portanto, esse endereço de retorno previsto pode nem sempre estar correto.

(No screenshot acima, o ponteiro base é mostrado em verde-oliva)
Em algumas ocasiões, pode ser necessário consultar o código-fonte para entender o comportamento exato das interfaces. Prevendo isso, muitas das decisões de design e detalhes de implementação são explicados em comentários inline.
A wiki ainda é relativamente esparsa, mas conteúdo como a lista de obstáculos e o registro de desenvolvimento pode ser útil na solução de problemas.
Considere consultar o repositório binja_sensei para exemplos que possam ajudar você a começar.
Excluindo o Binary Ninja, o install.sh cuidará dessas dependências para você.