MASTG-TOOL-0030: Angr
Angr é um framework Python para análise de binários. Ele é útil tanto para análise simbólica estática quanto dinâmica ("concolic"). Em outras palavras: dado um binário e um estado solicitado, o Angr tentará chegar a esse estado, usando métodos formais (uma técnica usada para análise estática de código) para encontrar um caminho, além de usar força bruta. Usar o Angr para chegar ao estado solicitado geralmente é muito mais rápido do que seguir etapas manuais de depuração e busca do caminho para o estado desejado. O Angr opera na linguagem intermediária VEX e vem com um carregador para binários ELF/ARM, sendo perfeito para lidar com código nativo, como binários nativos do Android.
O Angr permite desmontagem, instrumentação de programas, execução simbólica, análise de fluxo de controle, análise de dependência de dados, descompilação e muito mais, graças a um grande conjunto de plugins.
A partir da versão 8, o Angr é baseado em Python 3 e pode ser instalado com pip em sistemas operacionais *nix, macOS e Windows:
pip install angr
Algumas dependências do Angr contêm versões modificadas dos módulos Python Z3 e PyVEX, que substituiriam as versões originais. Se você usa esses módulos para outras finalidades, deve criar um ambiente virtual dedicado com Virtualenv. Alternativamente, você pode sempre usar o container docker fornecido. Consulte o guia de instalação para mais detalhes.
Documentação abrangente, incluindo um guia de instalação, tutoriais e exemplos de uso, está disponível na página do Gitbooks do Angr. Uma referência completa da API também está disponível.
Você pode usar o Angr a partir de um REPL Python — como o IPython — ou scriptar suas abordagens. Embora o Angr tenha uma curva de aprendizado um pouco íngreme, recomendamos seu uso quando você quiser forçar a chegada a um determinado estado de um executável. Consulte Execução Simbólica como um ótimo exemplo de como isso pode funcionar.