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

B2R2 は、F# で書かれた完全マネージドのバイナリ解析フレームワークです。リバースエンジニアリング、プログラム解析、バイナリレベルの検査のための豊富なアルゴリズム、関数、ツールを提供します。
B2R2 という名前は、スター・ウォーズの象徴的なロボット R2-D2 から着想を得ています。元々は B2-R2 と名付けられましたが、.NET の識別子や名前空間ではハイフンが許可されないため、後にハイフンなしの B2R2 に改められました。この名前はプロジェクトの目的を反映しています。「B」と「2」はバイナリと二状態計算を示し、「R」はリバース(reversing)を意味します。要するに、B2R2 はバイナリリバースのために作られています。
B2R2 は 解析に適しています:F# で書かれており、この言語はパターンマッチング、代数的データ型、表現力豊かな関数型抽象化などの機能により、プログラムアナライザの構築に適しています。
B2R2 は 高速です:コアのバイナリ解析エンジンは効率性を重視して設計されており、関数型ファースト スタイルで書かれています。これにより、命令リフティングやCFG復元などの一般的な解析タスクにおいて、純粋な並列処理 に自然に適合します。
B2R2 は 使いやすい です:完全マネージドライブラリとして、複雑なネイティブ依存関係の設定が不要です。.NET SDK をインストールすればすぐに使用できます。ネイティブの IntelliSense サポートにより、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: |
| 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: |
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