B2R2 adalah kumpulan algoritma, fungsi, dan alat yang berguna untuk analisis biner , ditulis murni dalam f# (dalam .net lingo, itu adalah kode murni dikelola). B2R2 dinamai R2-D2, robot fiksi terkenal muncul di Star Wars. Faktanya, nama asli B2R2 adalah B2-R2 , tetapi kami memutuskan untuk menggunakan nama B2R2 sebagai gantinya, karena .NET tidak mengizinkan karakter dasbor (-) dalam pengidentifikasi (atau namespaces). Nama pada dasarnya mewakili "biner" atau "dua": "biner" itu sendiri berarti "dua" negara. "B" dan "2" berarti "biner", dan "r" menunjukkan pembalikan .
B2R2 ramah analisis : ditulis dalam f#, yang menyediakan semua barang sintaksis untuk penulisan analisis program, seperti pencocokan pola, tipe data aljabar, dan dll.
B2R2 cepat : ia memiliki mesin front-end yang cepat dan efisien untuk analisis biner, yang ditulis dengan cara fungsional-pertama. Oleh karena itu, secara alami mendukung paralelisme murni untuk membongkar biner, pengangkatan, dan optimasi IR.
B2R2 mudah dimainkan: sama sekali tidak ada neraka ketergantungan untuk B2R2 karena ini adalah perpustakaan yang dikelola sepenuhnya. Yang perlu Anda lakukan adalah menginstal .NET SDK, dan Anda siap untuk pergi! Dukungan Intellisense asli adalah nilai tambah lainnya!
B2R2 adalah OS-independen : ia bekerja pada Linux, Mac, Windows, dan dll. Selama .NET Core mendukungnya.
B2R2 dapat dioperasikan : tidak terikat pada bahasa tertentu. Secara teoritis, Anda dapat menggunakan B2R2 API dengan bahasa yang didukung CLI.
B2R2 mendukung penguraian instruksi, pembongkaran biner, perakitan, pemulihan aliran kontrol, dan banyak lagi. B2R2 juga dilengkapi dengan beberapa alat baris perintah tingkat pengguna yang mirip dengan Readelf dan Objdump, meskipun alat kami adalah platform-agnostik. B2R2 saat ini mendukung empat format file biner: ELF, PE, Mach-O, dan WebAssembly.
Di bawah ini adalah daftar fitur yang saat ini kami dukung. Beberapa dari mereka sedang dalam proses, tetapi kami menantikan kontribusi Anda! Jangan ragu untuk menulis PR (permintaan tarik) sambil memastikan bahwa Anda telah membaca pedoman kontribusi kami.
| Fitur | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | Evm | TMS320C600 | AVR | PPC | Sparc | Sh4 | Risc-v |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Parsing instruksi | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Pembongkaran | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Pengangkatan | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Pemulihan CFG | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Aliran data | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Emulasi Instruksi | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Perakitan | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Repl | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Kompilasi ROP | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2 bergantung pada serangkaian kecil perpustakaan .NET eksternal, dan prinsip desain kami adalah menggunakan jumlah minimum perpustakaan. Di bawah ini adalah daftar perpustakaan yang kami manfaatkan.
Kami saat ini menggunakan FSDOCS untuk menghasilkan dokumentasi kami: https://b2r2.org/apidoc/.
Mari kita coba menggunakan API B2R2.
Pertama, kami membuat DIRNAME Direktori Kosong:
mkdir DIRNAME
cd DIRNAME
Kami kemudian membuat proyek konsol kosong dengan baris perintah dotnet :
$ dotnet new console -lang F#
Tambahkan paket nuget kami B2R2.Frontend ke proyek:
$ dotnet add package B2R2.FrontEnd.BinInterface
Ubah file Program.fs dengan editor favorit Anda sebagai berikut:
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 Kami kemudian menjalankannya dengan mengetik: dotnet run . Anda akan dapat melihat pernyataan IR yang diangkat dari konsol Anda. Itu saja! Anda baru saja mengangkat instruksi Intel dengan hanya beberapa baris kode F#!
Membangun B2R2 itu menyenangkan dan mudah. Yang perlu Anda lakukan adalah menginstal .NET 8 SDK atau di atas. Ya, itu dia!
Untuk membangun B2R2 dalam mode rilis, ketik make release atau dotnet build -c Release di Root Sumber.
Untuk membangun B2R2 dalam mode debug, ketik make , atau dotnet build di root sumber.
Untuk informasi Anda, silakan kunjungi situs web resmi F# untuk mendapatkan lebih banyak tips tentang menginstal lingkungan pengembangan untuk F#: http://fsharp.org/.
Anggota di SoftSec Lab. @ Kaist mengembangkan B2R2 bekerja sama dengan Cyber Security Research Center (CSRC) di KAIST. Lihat penulis untuk daftar lengkapnya.
Jika Anda berencana menggunakan B2R2 dalam penelitian Anda sendiri. Harap pertimbangkan mengutip makalah kami:
@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
}Berikut adalah makalah yang menggunakan pekerjaan kami. Harap buat PR jika Anda ingin menambahkan milik Anda.