B2R2是一套针对二进制代码分析的实用算法、函数以及工具集,B2R2采用纯F#(.NET)开发,B2R2原名为B2-R2,其命名引用的是R2-D2,因为.NET不允许在标识符或命名空间中使用字符“-”,因此我们将该项目名米给B2R2。其中,B代表Binary,B2即二进制代码,R指的是逆向分析Reverse。
1、B2R2是一款采用F#开发的“分析友好型”工具,它可以为研究人员开发彻骨分析工具提供语法上的便利,例如模式匹配和代数数据类型等等。
2、B2R2运行速度非常快,它带有一个快速高效的前端引擎,可用于对二进制代码进行分析,该引擎纯粹以实现功能性为目的进行开发,因此它自然支持二进制代码反编译,提升和并行优化。
3、B2R2简单易用,并且没有绝对的依赖组件,因为它本身就是一个完全托管的库,我们只需要安装.NET核心SDK即可。
4、B2R2与操作系统无关,它只需要.NET核心的支持,即可在Linux、macOS和Windows等操作系统平台上运行。
5、B2R2可与其他组件协同工作,以为它没有与任何其他语言绑定,我们可以在任何支持命令行的其他语言环境下使用B2R2。
B2R2只依赖于一小部分的外部.NET库,这也符合我们设计的尽量实现最少依赖库的标准。下面给出的是B2R2所需的依赖库列表:
3、FParsec
我们当前使用了docfx来生成B2R2的API文档:【点我获取】。
研究人员可使用Git命令直接将项目代码从GitHub库克隆至本地:
git clone https://github.com/B2R2-org/B2R2.git
接下来,我们演示一下如何使用B2R2的API接口。
1、首先,我们需要生成一个名为“DIRNAME”的空目录:
mkdir DIRNAME
2、然后,使用dotnet命令在命令行工具中常见一个空的终端项目:
$ dotnet new console -lang F#
3、将B2R2.FrontEnd包添加进项目中:
$ dotnet add package B2R2.FrontEnd
4、使用我们熟悉的编辑器修改Program.fs文件:
open B2R2
open B2R2.FrontEnd
[<EntryPoint>]
let main argv =
let isa = ISA.OfString "amd64"
let bytes = [| 0x65uy; 0xffuy; 0x15uy; 0x10uy; 0x00uy; 0x00uy; 0x00uy |]
let handler = BinHandler.Init (isa, bytes)
let ins = BinHandler.ParseInstr handler 0UL
ins.Translate handler.TranslationContext |> printfn "%A"
0
5、最后,使用下列命令运行B2R2:
dotnet run
构建B2R2项目其实非常简单,我们只需要安装.NET核心SDK 3.0以及上述依赖组件即可。
1、以发布模式构建B2R2,可直接在项目根目录路径下运行下列命令:
make release
或
dotnet build -c Release
2、以调试模式构建B2R2,可直接在项目根目录路径下运行下列命令:
make
或
dotnet build
如果你想要在自己的研究项目中使用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
}
B2R2:【GitHub传送门】
3、https://github.com/B2R2-org/B2R2/blob/master/CONTRIBUTING.md
* 参考来源:tarnish,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM