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。