B2R2是有用的算法,功能和工具的集合,用于二进制分析,纯粹写在f#中(在.net lingo中,它纯粹是管理的代码)。 B2R2以R2-D2的名字命名,一个著名的虚构机器人出现在《星球大战》中。实际上,B2R2的原始名称是B2-R2 ,但我们决定使用名称B2R2 ,因为.NET不允许标识符(或名称空间)中的dash( - )字符。该名称本质上表示“二进制”或“两个”:“二进制”本身的意思是“两个”状态。 “ B”和“ 2”平均值“二进制”和“ R”表示逆转。
B2R2对分析友好:它以F#编写,它提供了所有用于编写计划分析仪的句法好处,例如模式匹配,代数数据类型等。
B2R2快速:它具有快速有效的前端引擎,用于二进制分析,这是以功能优先的方式编写的。因此,它自然支持纯平行性,用于二进制拆卸,举重和IR优化。
B2R2很容易玩:B2R2绝对没有依赖地狱,因为它是一个完全管理的库。您需要做的就是安装.NET SDK,您就可以使用了!本机IntelliSense支持是另一个优点!
B2R2是独立于OS的:它在Linux,Mac,Windows等上工作。只要.NET Core支持它。
B2R2是可互操作的:它与特定语言无绑定。从理论上讲,您可以将B2R2 API与任何CLI支持的语言一起使用。
B2R2支持解析,二进制拆卸,组装,控制流恢复等等。 B2R2还配备了几种用户级命令行工具,这些工具类似于Readelf和objdump,尽管我们的工具是平台 - 敏捷的。 B2R2当前支持四种二进制文件格式:Elf,PE,Mach-O和WebAssembly。
以下是我们当前支持的功能列表。其中一些正在进行中,但我们期待您的贡献!请随时编写PR(拉请请求),同时确保您阅读了我们的贡献指南。
| 特征 | x86 | X86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | avr | ppc | Sparc | SH4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 说明解析 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 拆卸 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 举起 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| CFG恢复 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 数据流 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 教学仿真 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 集会 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 替补 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| ROP汇编 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2依赖一组外部.NET库,我们的设计原理是使用最少数量的库。以下是我们利用的库列表。
我们目前使用FSDOC生成我们的文档:https://b2r2.org/apidoc/。
让我们尝试使用B2R2 API。
首先,我们创建一个空目录DIRNAME :
mkdir DIRNAME
cd DIRNAME
然后,我们使用dotnet命令行创建一个空控制台项目:
$ dotnet new console -lang F#
将我们的Nuget软件包B2R2添加到项目中:
$ dotnet add package B2R2.FrontEnd.BinInterface
用您喜欢的编辑器修改Program.fs文件如下:
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然后,我们只通过输入来运行它: dotnet run 。您将可以从控制台中看到升起的IR语句。就是这样!您只是使用只有几行F#代码来抬起英特尔指令!
建筑B2R2很有趣而且容易。您需要做的就是安装.NET 8 SDK或更高版本。是的,就是这样!
要在发行模式下构建B2R2,请在源根中键入make release或dotnet build -c Release 。
要在调试模式下构建B2R2,请在源根中make或dotnet build 。
有关您的信息,请访问F#的官方网站,以获取有关F#安装开发环境的更多提示:http://fsharp.org/。
SoftSec实验室的成员。 @ Kaist与KAIST的网络安全研究中心(CSRC)合作开发了B2R2。有关完整列表,请参见作者。
如果您打算在自己的研究中使用B2R2。请考虑引用我们的论文:
@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
}这是使用我们的作品的论文。如果您想添加您的公关,请创建PR。