B2R2 es una colección de algoritmos, funciones y herramientas útiles para el análisis binario , escrito exclusivamente en f# (en .NET Lingo, es un código puramente administrado). B2R2 lleva el nombre de R2-D2, un famoso robot ficticio apareció en Star Wars. De hecho, el nombre original de B2R2 era B2-R2 , pero decidimos usar el nombre B2R2 , porque .NET no permite que los caracteres Dash (-) en identificadores (o espacios de nombres). El nombre esencialmente representa "binario" o "dos": "binario" en sí significa "dos" estados de todos modos. "B" y "2" significan "binario", y "R" indica la inversión .
B2R2 es amigable para el análisis : está escrito en f#, que proporciona todas las golosinas sintácticas para escribir analizadores de programas, como la coincidencia de patrones, los tipos de datos algebraicos, etc.
B2R2 es rápido : tiene un motor frontal rápido y eficiente para el análisis binario, que se escribe de manera funcional de primera manera. Por lo tanto, naturalmente apoya el paralelismo puro para el desmontaje binario, el levantamiento y la optimización IR.
B2R2 es fácil de jugar: no hay absolutamente ningún infierno de dependencia para B2R2 porque es una biblioteca totalmente administrada. Todo lo que necesita hacer es instalar .NET SDK, ¡y está listo para comenzar! ¡El apoyo nativo de Intellisense es otra ventaja!
B2R2 es independiente del sistema operativo : funciona en Linux, Mac, Windows, etc., siempre que .NET Core lo admita.
B2R2 es interoperable : no está vinculado a un lenguaje específico. Teóricamente, puede usar API B2R2 con cualquier lenguaje compatible con CLI.
B2R2 admite análisis de instrucciones, desmontaje binario, ensamblaje, recuperación de flujo de control y muchos más. B2R2 también viene con varias herramientas de línea de comandos a nivel de usuario que son similares a Readelf y Objdump, aunque nuestras herramientas son de la plataforma. B2R2 actualmente admite cuatro formatos de archivo binario: ELF, PE, Mach-O y WebAssembly.
A continuación se muestra una lista de características que actualmente admitemos. Algunos de ellos son trabajo en progreso, ¡pero esperamos sus contribuciones! Siéntase libre de escribir un PR (solicitud de extracción) mientras se asegura de haber leído nuestra guía de contribución.
| Característica | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPC | SPARC | Sh4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Analizador de instrucciones | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Desmontaje | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Levantamiento | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Recuperación de CFG | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Flujo de datos | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Emulación de instrucciones | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Asamblea | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Replicar | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Compilación de ROP | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2 se basa en un pequeño conjunto de bibliotecas .NET externas, y nuestro principio de diseño es utilizar un número mínimo de bibliotecas. A continuación se muestra una lista de bibliotecas que aprovechamos.
Actualmente usamos FSDOC para generar nuestra documentación: https://b2r2.org/apidoc/.
Intentemos usar las API B2R2.
Primero creamos un directorio vacío DIRNAME :
mkdir DIRNAME
cd DIRNAME
Luego creamos un proyecto de consola vacío con la línea de comando dotnet :
$ dotnet new console -lang F#
Agregue nuestro paquete Nuget B2R2.Frontend al proyecto:
$ dotnet add package B2R2.FrontEnd.BinInterface
Modifique el archivo Program.fs con su editor favorito de la siguiente manera:
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 Luego lo ejecutamos escribiendo: dotnet run . Podrá ver declaraciones IR levantadas de su consola. ¡Eso es todo! ¡Acabas de levantar una instrucción Intel con solo unas pocas líneas de código F#!
El edificio B2R2 es divertido y fácil. Todo lo que necesita hacer es instalar .NET 8 SDK o superior. ¡Sí, eso es todo!
Para construir B2R2 en el modo de liberación, escriba make release o dotnet build -c Release en la raíz de origen.
Para construir B2R2 en modo de depuración, escriba make o dotnet build en la raíz de origen.
Para su información, visite el sitio web oficial de F# para obtener más consejos sobre la instalación del entorno de desarrollo para F#: http://fsharp.org/.
Miembros en Softsec Lab. @ Kaist desarrolló B2R2 en colaboración con Cyber Security Research Center (CSRC) en Kaist. Ver autores para la lista completa.
Si planea usar B2R2 en su propia investigación. Considere citar nuestro documento:
@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
}Aquí hay documentos que usan nuestro trabajo. Por favor cree un PR si desea agregar el suyo.