Demonstração atualizada em breve!
O assistente de engenharia reversa (ReVA) é um projeto para construir um assistente de IA agnóstico de desmontador para tarefas de engenharia reversa. Isso inclui inferência offline e online e uma arquitetura simples.
ReVa é diferente de outros esforços na construção de assistentes de IA para tarefas de ER porque usa uma abordagem orientada por ferramentas . ReVa visa fornecer uma variedade de pequenas ferramentas para o LLM, assim como seu ambiente RE fornece um conjunto de pequenas ferramentas para você. ReVa combina essa abordagem com técnicas de cadeia de raciocínio para capacitar o LLM a concluir tarefas complexas.
Cada uma das ferramentas fornecidas ao LLM é construída para ser fácil de usar pelo LLM e para tolerar uma variedade de entradas e para reduzir a alucinação pelo LLM. Fazemos isso fornecendo um esquema ao LLM, mas tolerando outras entradas, incluindo descrições que orientam o LLM, e redirecionando erros corrigíveis de volta ao LLM, e incluindo resultados extras para orientar a próxima decisão do LLM.
Por exemplo, quando o LLM solicitar a descompilação da sua ferramenta RE, aceitaremos um endereço bruto em hexadecimal, um endereço bruto na base 10, um nome de símbolo com um namespace ou um símbolo. Se o LLM nos fornecer informações incorretas, relataremos isso ao LLM junto com instruções para corrigir a entrada (talvez encorajando-o a usar a lista de funções, por exemplo). Para incentivar a exploração como um humano faria, relatamos contexto adicional, como o namespace e referências cruzadas junto com a descompilação. Este é um pequeno empurrão para fazer o LLM explorar o binário da mesma forma que um humano faria.
Usando esta técnica você pode fazer perguntas gerais e obter respostas relevantes. O modelo prioriza informações das ferramentas, mas quando não há informações ainda consegue responder a questões genéricas do seu treinamento.
Você pode fazer perguntas como:
__mod_init
.mmap
retorna?Uma parte importante da engenharia reversa é o processo. Muitas outras ferramentas simplesmente fazem uma única pergunta ao LLM, o que significa que é difícil determinar por que algo aconteceu. No ReVa, dividimos todas as ações em pequenas partes e incluímos os pensamentos do LLMs na saída. Isso permite que o analista monitore as ações e o raciocínio do LLM, abortando e alterando o prompt, se necessário.
RevA é baseado em langchain, que suporta vários modelos.
O suporte integrado é fornecido para:
Consulte Configuração para obter mais informações sobre configurações dos provedores.
Adicionar servidores de inferência adicionais é fácil se for compatível com langchain.
A configuração do ReVa está nas opções da ferramenta CodeBrowser. Abra um programa e vá em Editar -> Opções de ferramentas -> ReVa.
Existem opções para:
Existem seções para os provedores.
Por padrão, a chave OpenAI é carregada da variável de ambiente OPENAI_API_KEY
. Você também pode definir sua chave dentro do Ghidra. Definir a chave de volta para o valor OPENAI_API_KEY
limpará a chave da configuração do Ghidra e a carregará do ambiente.
Você também pode selecionar o modelo. Por padrão, gpt-4o
está selecionado. Este modelo funciona melhor com as ferramentas e prompts fornecidos pela ReVa.
gpt-4
também funciona bem, mas é lento e precisa de mais solicitações do usuário para explorar um binário.
Ollama é um servidor de inferência local. O servidor padrão é definido como localhost, com a porta Ollama padrão. Você pode alterar isso para um servidor remoto se quiser realizar inferência em uma máquina remota. Isso é útil para organizações que se auto-hospedam.
Você também pode selecionar um modelo. O modelo já deve estar carregado no servidor. Bom desempenho foi observado com:
mixtral
llama3
phi
RevA tem um fluxo de trabalho em duas etapas.
ReVa usa uma extensão para sua ferramenta RE para realizar análises. Consulte Suporte Ghidra abaixo.
Para fazer perguntas e executar a inferência, é fornecida uma ferramenta de linha de comando. Execute reva-chat
para iniciar a sessão de chat. Este comando encontrará seu Ghidra aberto e se conectará a ele. Para abrir um novo chat, execute o comando novamente em outro terminal.
Se você tiver mais de um Ghidra aberto, você pode selecionar o correto com reva-chat --project ${project-name}
, se não estiver definido, reva-chat
perguntará a qual projeto você deseja se conectar.
Para comunicação entre reva-server
e a extensão, é usado gRPC. Você pode ler mais sobre isso (aqui)[./DEVELOPER.md]. A construção dos arquivos de origem a partir dessas definições de protocolo é conduzida pelo Makefile. Para construir os arquivos de código-fonte do protocolo, execute este comando na raiz do projeto:
make protocol
Primeiro instale o componente python, gosto de usar pipx
. Instale-o com algo como:
pip install pipx
Na pasta reverse-engineering-assistant
, execute:
pipx install .
Depois de instalar o projeto python, o pipx pode avisar que você precisa adicionar uma pasta à sua variável de ambiente PATH. Certifique-se de que a pasta (agora contendo reva-server
e reva-chat
) esteja em sua variável PATH. pipx pode fazer isso por você com este comando:
pipx ensurepath
A extensão precisará iniciar reva-server
e você precisará executar reva-chat
. Caso você não queira adicioná-los ao seu PATH, consulte a seção Configuração para saber como definir o caminho para os executáveis.
Assim que o reva-server
for iniciado pela extensão, o chat pode ser iniciado com:
reva-chat
O pacote Python deve estar instalado para que a extensão Ghidra funcione!
Siga as instruções no plugin ghidra-assistant.
Após a instalação, habilite a extensão ReVa Plugin
na ferramenta CodeBrowser (Abra um arquivo e clique em: Arquivo -> Configurar -> Diversos).
Se você deseja que o ReVa seja ativado por padrão, clique em Arquivo -> Salvar ferramenta para salvar a configuração.
Se tudo estiver funcionando corretamente, você verá um menu ReVa na barra de menus.
Você pode modificar a configuração do plugin em Edit -> Tool Options -> ReVa
.
Sempre que o ReVa realizar uma ação, ele criará um ponto de desfazer para cada ação. Se ReVa renomear 5 variáveis, isso será desfeito.
ReVa adiciona uma opção ao menu Janela da ferramenta CodeBrowser. Selecione Janela -> Log de ações do ReVa para abrir a janela Log de ações do ReVa.
Esta janela mostra as ações que o ReVa realizou e gostaria de realizar. Você pode aceitar ou rejeitar uma alteração clicando duas vezes no ícone ✅ ou . Você também pode ir até o local onde a ação será realizada clicando duas vezes no endereço.
Se você rejeitar uma ação, ReVa será informada e seguirá em frente.
Você também pode ativar "Permitir automaticamente" nas opções do ReVa. Isso aceitará automaticamente todas as ações que o ReVa deseja realizar.
ReVa também adiciona alguns elementos à UI do Ghidra. Você pode pedir ao ReVa para fazer algo na janela de bate-papo, "Examinar detalhadamente o uso da variável main
, renomear as variáveis com nomes mais descritivos.", ou usar o sistema de menu.
Por exemplo, você pode clicar com o botão direito em uma variável na descompilação, selecionar Reva -> Renomear variável e ReVa executará a ação.
Você gosta do meu trabalho? Quer apoiar este projeto e outros? Interessado em saber como este projeto foi projetado e construído? Este projeto e muitos outros são construídos ao vivo na minha stream em https://twitch.tv/cyberkaida!