B2R2は、純粋にF#(.NET Lingoでは、純粋に管理されたコードです)で純粋に記述されたバイナリ分析のための有用なアルゴリズム、関数、およびツールのコレクションです。 B2R2は、スターウォーズに有名な架空のロボットであるR2-D2にちなんで命名されました。実際、B2R2の元の名前はB2-R2でしたが、.NETは識別子(または名前空間)のDASH( - )文字を許可しないため、代わりにB2R2という名前を使用することにしました。名前は本質的に「バイナリ」または「2」を表します。「バイナリ」自体は、とにかく「2つの」状態を意味します。 「B」と「2」は「バイナリ」を平均し、「R」は反転を示します。
B2R2は分析に適しています。F#で記述されています。これは、パターンマッチング、代数データ型など、プログラムアナライザーを作成するためのすべての構文グッズを提供します。
B2R2は高速です。バイナリ分析用の高速で効率的なフロントエンドエンジンがあり、機能的な方法で記述されています。したがって、それは当然、バイナリの分解、持ち上げ、IRの最適化のための純粋な並列性をサポートします。
B2R2は簡単に遊ぶことができます:完全に管理されたライブラリであるため、B2R2には依存関係は絶対にありません。あなたがする必要があるのは、.NET SDKをインストールすることだけです、そしてあなたは行く準備ができています!ネイティブのIntellisenseサポートは別のプラスです!
B2R2はOSに依存しません:.NET Coreがサポートする限り、Linux、Mac、Windowsなどで動作します。
B2R2は相互運用可能です。特定の言語に縛られていません。理論的には、CLIがサポートする言語でB2R2 APIを使用できます。
B2R2は、命令の解析、バイナリ分解、アセンブリ、コントロールフローの回復などをサポートします。 B2R2には、ReadelfとObjdumpに似たいくつかのユーザーレベルのコマンドラインツールも搭載されていますが、私たちのツールはプラットフォームに依存しています。 B2R2は現在、ELF、PE、MACH-O、およびWebAssemblyの4つのバイナリファイル形式をサポートしています。
以下は、現在サポートしている機能のリストです。それらのいくつかは進行中の作業ですが、私たちはあなたの貢献を楽しみにしています!私たちの貢献ガイドラインを読んでいることを確認しながら、PR(プル要求)を自由に書いてください。
| 特徴 | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPC | Sparc | SH4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 命令解析 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 分解 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 持ち上げる | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| CFG回復 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| データフロー | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 命令エミュレーション | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| 組み立て | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| REPL | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| ROPコンピレーション | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2は、外部.NETライブラリの小さなセットに依存しており、私たちの設計原則は最小数のライブラリを使用することです。以下は、私たちが活用するライブラリのリストです。
現在、FSDOCSを使用してドキュメントを生成します:https://b2r2.org/apidoc/。
B2R2 APIを使用してみましょう。
最初に、空のディレクトリDIRNAMEを作成します。
mkdir DIRNAME
cd DIRNAME
次に、 dotnetコマンドラインを使用して空のコンソールプロジェクトを作成します。
$ dotnet new console -lang F#
Nugetパッケージb2r2.frontendをプロジェクトに追加します。
$ 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次に、typing: dotnet runによって実行するだけです。コンソールから解除されたIRステートメントを見ることができます。それでおしまい! F#コードの数行しかないIntel命令を持ち上げました!
B2R2の構築は楽しくて簡単です。必要なのは、.NET 8 SDK以上をインストールすることだけです。ええ、それだけです!
リリースモードでB2R2を構築するには、ソースルートでmake releaseまたはdotnet build -c Release 。
デバッグモードでB2R2を構築するには、ソースmakeにdotnet build 。
お客様の情報については、F#の公式Webサイトにアクセスして、F#:http://fsharp.org/の開発環境のインストールに関するヒントを詳しく説明してください。
SoftSec Labのメンバー。 @ Kaistは、KaistのCyber Security Research Center(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を作成してください。