
B2R2 é um framework de análise binária totalmente gerenciado escrito em F#. Ele fornece um conjunto rico de algoritmos, funções e ferramentas para engenharia reversa, análise de programas e inspeção em nível binário.

B2R2 é um framework de análise binária totalmente gerenciado escrito em F#. Ele fornece um rico conjunto de algoritmos, funções e ferramentas para engenharia reversa, análise de programas e inspeção em nível binário.
O nome B2R2 se inspira em R2-D2, o icônico robô de Star Wars. Originalmente chamado de B2-R2, o projeto posteriormente adotou a forma sem hífen B2R2 porque identificadores e namespaces .NET não permitem hífens. O nome reflete o propósito do projeto: "B" e "2" sugerem computação binária e de dois estados, enquanto "R" significa reversing. Em suma, B2R2 foi construído para reversing binário.
B2R2 é analisável: é escrito em F#, uma linguagem bem adequada para construir analisadores de programas graças a recursos como pattern matching, tipos de dados algébricos e abstrações funcionais expressivas.
B2R2 é rápido: seu mecanismo principal de análise binária é projetado para eficiência e escrito em um estilo funcional-first. Isso o torna uma escolha natural para paralelismo puro em tarefas comuns de análise, como elevação de instruções e recuperação de CFG.
B2R2 é fácil de usar: como uma biblioteca totalmente gerenciada, evita configurações complicadas de dependências nativas. Instale o .NET SDK e você estará pronto para começar. O suporte nativo ao IntelliSense também facilita a exploração das APIs.
B2R2 é independente de SO: funciona em Linux, macOS e Windows, bem como em qualquer outra plataforma suportada pelo .NET.
B2R2 é interoperável: não está vinculado a uma única linguagem de programação. Em princípio, as APIs do B2R2 podem ser usadas a partir de qualquer linguagem suportada pelo CLI.
O B2R2 suporta parsing de instruções, desmontagem binária, montagem, recuperação de fluxo de controle e outros blocos fundamentais para análise binária. Ele também inclui várias ferramentas de linha de comando voltadas ao usuário, comparáveis a readelf e objdump, permanecendo independente de plataforma. Atualmente, o B2R2 suporta quatro formatos de arquivos binários: ELF, PE, Mach-O e WebAssembly.
A tabela abaixo resume os recursos atualmente suportados pelo B2R2. Algumas áreas ainda estão em desenvolvimento, e contribuições são bem-vindas. Antes de abrir um pull request, leia nossa diretriz de contribuição.
| CPU | Docs | Ins Parsing | Disasm | Lifting | CFG Recovery | Assembly |
|---|---|---|---|---|---|---|
| x86 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| x86-64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| ARMv7 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| ARMv8 (AArch64) | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| EVM | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :new_moon: |
| TMS320C6000 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| AVR | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| PA-RISC | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| PPC32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SPARC | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SH4 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| RISC-V | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| S390 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |