O B2R2 é uma coleção de algoritmos, funções e ferramentas úteis para análise binária , escrita puramente em F# (no .NET LINGO, é um código puramente gerenciado). O B2R2 recebeu o nome de R2-D2, um famoso robô fictício apareceu em Star Wars. De fato, o nome original do B2R2 era B2-R2 , mas decidimos usar o nome B2R2 , porque o .NET não permite o Dash (-) caracteres em identificadores (ou namespaces). O nome representa essencialmente "binário" ou "dois": "binário" em si significa "dois" estados de qualquer maneira. "B" e "2" significa "binário", e "r" indica reversão .
O B2R2 é amigável para a análise : está escrito em F#, que fornece todos os presentes sintáticos para analisadores de programas de redação, como correspondência de padrões, tipos de dados algébricos e etc.
O B2R2 é rápido : possui um motor front-end rápido e eficiente para análise binária, que é escrita de uma maneira funcional. Portanto, naturalmente suporta paralelismo puro para desmontagem binária, levantamento e otimização de IR.
O B2R2 é fácil de brincar: não há absolutamente nenhuma dependência para o B2R2 porque é uma biblioteca totalmente gerenciada. Tudo o que você precisa fazer é instalar .NET SDK, e você está pronto para ir! O apoio nativo do Intellisense é outra vantagem!
O B2R2 é independente do OS : funciona no Linux, Mac, Windows e etc. desde que o .NET Core o ofereça.
B2R2 é interoperável : não está vinculado a um idioma específico. Teoricamente, você pode usar APIs B2R2 com qualquer idioma suportado pela CLI.
B2R2 suporta a análise de instruções, desmontagem binária, montagem, recuperação de fluxo de controle e muito mais. O B2R2 também vem com várias ferramentas de linha de comando no nível do usuário que são semelhantes ao Readyl e Objdump, embora nossas ferramentas sejam agnósticas da plataforma. Atualmente, o B2R2 suporta quatro formatos de arquivo binário: ELF, PE, MACH-O e WebAssembly.
Abaixo está uma lista de recursos que atualmente apoiamos. Alguns deles estão em andamento, mas estamos ansiosos por suas contribuições! Sinta -se à vontade para escrever um PR (solicitação de puxar), certificando -se de ter lido nossa diretriz de contribuição.
| Recurso | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | Avr | PPC | SPARC | Sh4 | Risc-v |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Análise de instruções | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Desmontagem | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Elevação | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Recuperação de CFG | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Flow de dados | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Emulação de instrução | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Conjunto | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Repl | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Compilação ROP | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
O B2R2 depende de um pequeno conjunto de bibliotecas .NET externas, e nosso princípio de design é usar um número mínimo de bibliotecas. Abaixo está uma lista de bibliotecas que aproveitamos.
Atualmente, usamos o FSDOCS para gerar nossa documentação: https://b2r2.org/apidoc/.
Vamos tentar usar APIs B2R2.
Primeiro, criamos um DIRNAME de diretório vazio:
mkdir DIRNAME
cd DIRNAME
Em seguida, criamos um projeto de console vazio com a linha de comando dotnet :
$ dotnet new console -lang F#
Adicione nosso pacote NUGET B2R2.FRONTEND ao projeto:
$ dotnet add package B2R2.FrontEnd.BinInterface
Modifique o arquivo Program.fs com seu editor favorito da seguinte forma:
open B2R2
open B2R2. FrontEnd . BinInterface
[<EntryPoint>]
let main argv =
let isa = ISA.OfString " amd64 "
let bytes = [| 0x65 uy ; 0xff uy ; 0x15 uy ; 0x10 uy ; 0x00 uy ; 0x00 uy ; 0x00 uy |]
let hdl = BinHandle.Init ( isa , bytes )
let ins = BinHandle.ParseInstr ( hdl , 0 UL )
ins.Translate hdl.TranslationContext |> printfn " %A "
0 Em seguida, apenas o executamos digitando: dotnet run . Você poderá ver declarações de infravermelho levantadas do seu console. É isso! Você acabou de levantar uma instrução Intel com apenas algumas linhas de código F#!
O edifício B2R2 é divertido e fácil. Tudo o que você precisa fazer é instalar .NET 8 SDK ou acima. Sim, é isso!
Para construir B2R2 no modo de liberação, o tipo make release ou dotnet build -c Release na raiz de origem.
Para construir B2R2 no modo de depuração, digite make ou dotnet build na raiz de origem.
Para suas informações, visite o site oficial do F# para obter mais dicas sobre a instalação do ambiente de desenvolvimento para f#: http://fsharp.org/.
Membros no Laboratório Softsec. @ Kaist desenvolveu B2R2 em colaboração com o Cyber Security Research Center (CSRC) na Kaist. Consulte os autores para obter a lista completa.
Se você planeja usar o B2R2 em sua própria pesquisa. Por favor, considere citar nosso artigo:
@INPROCEEDINGS { jung:bar:2019 ,
author = { Minkyu Jung and Soomin Kim and HyungSeok Han and Jaeseung Choi and Sang Kil Cha } ,
title = { {B2R2}: Building an Efficient Front-End for Binary Analysis } ,
booktitle = { Proceedings of the NDSS Workshop on Binary Analysis Research } ,
year = 2019
}Aqui estão os documentos usando nosso trabalho. Crie um PR se você quiser adicionar o seu.