
B2R2はF#で書かれたフルマネージドなバイナリ解析フレームワークです。リバースエンジニアリング、プログラム解析、バイナリレベルの検査のための豊富なアルゴリズム、関数、ツールを提供します。

B2R2 は、F# で書かれた完全マネージドのバイナリ解析フレームワークです。リバースエンジニアリング、プログラム解析、バイナリレベルの検査のための豊富なアルゴリズム、関数、ツールを提供します。
B2R2 という名前は、スター・ウォーズの象徴的なロボット R2-D2 から着想を得ています。元々は B2-R2 と名付けられましたが、.NET の識別子や名前空間ではハイフンが許可されないため、後にハイフンなしの B2R2 に改められました。この名前はプロジェクトの目的を反映しています。「B」と「2」はバイナリと二状態計算を示し、「R」はリバース(reversing)を意味します。要するに、B2R2 はバイナリリバースのために作られています。
B2R2 は 解析に適しています:F# で書かれており、この言語はパターンマッチング、代数的データ型、表現力豊かな関数型抽象化などの機能により、プログラムアナライザの構築に適しています。
B2R2 は 高速です:コアのバイナリ解析エンジンは効率性を重視して設計されており、関数型ファースト スタイルで書かれています。これにより、命令リフティングやCFG復元などの一般的な解析タスクにおいて、純粋な並列処理 に自然に適合します。
B2R2 は 使いやすい です:完全マネージドライブラリとして、複雑なネイティブ依存関係の設定が不要です。.NET SDK をインストールすればすぐに使用できます。ネイティブの サポートにより、API の探索も容易です。
B2R2 は OSに依存しません:Linux、macOS、Windows に加え、.NET がサポートするその他すべてのプラットフォームで動作します。
B2R2 は 相互運用可能 です:単一のプログラミング言語に縛られません。原理的には、B2R2 API はあらゆる CLI対応言語 から使用できます。
B2R2 は、命令解析、バイナリ逆アセンブル、アセンブル、制御フロー復元、その他バイナリ解析のためのコア構成要素をサポートしています。また、readelf や objdump に匹敵する、プラットフォームに依存しないコマンドラインツールもいくつか含まれています。B2R2 は現在、4つのバイナリファイル形式(ELF、PE、Mach-O、WebAssembly)をサポートしています。
以下の表は、B2R2 が現在サポートしている機能をまとめたものです。一部の分野はまだ開発中であり、貢献を歓迎します。プルリクエストを送る前に、コントリビューションガイドライン をお読みください。
| CPU | Docs | Ins Parsing | Disasm | Lifting | CFG Recovery | Assembly |
|---|---|---|---|---|---|---|
| x86 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| x86-64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| ARMv7 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| ARMv8 (AArch64) | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| EVM | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :new_moon: |
| TMS320C6000 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
B2R2 は、ビルドをシンプルにし、バイナリ解析のための効率的なアルゴリズムとデータ構造にコアを集中させるために、依存関係のフットプリントを意図的に小さく保っています。コアライブラリには外部依存関係がなく、ほとんどの外部ライブラリはオプションであり、特定のコンポーネントやツールでのみ使用されます。以下は、プロジェクトで使用されている外部ライブラリのリストです。
ドキュメントは fsdocs で生成され、https://b2r2.org/B2R2/ で公開されています。
B2R2 API を実際に使ってみましょう。
まず、DIRNAME という名前の空のディレクトリを作成します。
mkdir DIRNAME
cd DIRNAME
次に、dotnet コマンドラインツールを使用して空のコンソールプロジェクトを作成します。
$ dotnet new console -lang F#
NuGet パッケージ B2R2.FrontEnd.API をプロジェクトに追加します。
$ dotnet add package B2R2.FrontEnd.API
お好みのエディタで Program.fs ファイルを以下のように変更します。
open B2R2
open B2R2.FrontEnd
[<EntryPoint>]
let main argv =
let isa = ISA "amd64"
let bytes = [| 0x65uy; 0xffuy; 0x15uy; 0x10uy; 0x00uy; 0x00uy; 0x00uy |]
let hdl = BinHandle(bytes, isa)
let lifter = hdl.NewLiftingUnit()
let ins = lifter.ParseInstruction 0UL // parse the instruction at offset 0
lifter.LiftInstruction ins |> printfn "%A"
0
dotnet run と入力して実行します。リフティングされた IR 文がコンソールに表示されるはずです。これで完了です!わずか数行の F# コードで Intel 命令をリフティングできました。
B2R2 のビルドは簡単です。.NET 10 SDK 以降をインストールすれば、ソースルートからビルドする準備は完了です。
dotnet build -c Releasedotnet buildF# 開発環境のセットアップについては、公式 F# ウェブサイト(http://fsharp.org/)を参照してください。
B2R2 は、KAIST の SoftSec Lab のメンバーと、KAIST の サイバーセキュリティ研究センター(CSRC) の協力により開発されました。貢献者の完全なリストは AUTHORS.md を参照してください。
研究で 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 のオンラインチュートリアルが利用可能で、B2R2 の基本的な使い方と実践的な例を網羅しています。以下のリンクからご覧いただけます:https://b2r2.org/tutorial-icst2026/。
以下は、B2R2 を使用または基にした論文です。あなたの研究を含めたい場合は、プルリクエストを送ってください。
| AVR | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| PA-RISC | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| PPC32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SPARC | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SH4 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| RISC-V | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| S390 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |