B2R2 - это набор полезных алгоритмов, функций и инструментов для бинарного анализа , написанных исключительно в F# (в .net Lingo, это чисто управляемый код). B2R2 был назван в честь R2-D2, известного вымышленного робота, появившегося в «Звездных войнах». На самом деле, оригинальное имя B2R2 было B2-R2 , но вместо этого мы решили использовать имя B2R2 , потому что .net не позволяет символа Dash (-) в идентификаторах (или пространствах имен). Название по сути представляет собой «двоичный» или «два»: «бинарный» сам означает «два» государства. «B» и «2» означают «двоичный», а «r» указывает на изменение .
B2R2-это анализ : он написан в F#, который предоставляет все синтаксические вкусности для анализаторов программы написания, таких как сопоставление схем, типы алгебраических данных и т. Д.
B2R2 быстр : он имеет быстрый и эффективный фронтальный двигатель для бинарного анализа, который написан функционально первым способом. Следовательно, он, естественно, поддерживает чистый параллелизм для бинарного разборка, подъема и оптимизации ИК.
С B2R2 легко играть: для B2R2 абсолютно нет никакой зависимости, потому что это полностью управляемая библиотека. Все, что вам нужно сделать, это установить .NET SDK, и вы готовы к работе! Нативная поддержка Intellisense - это еще один плюс!
B2R2 зависит от OS : он работает на Linux, Mac, Windows и т. Д., По мере того, как ядро .NET поддерживает его.
B2R2 совместим : он не связан с определенным языком. Теоретически, вы можете использовать API B2R2 с любыми языками, поддерживаемыми CLI.
B2R2 поддерживает анализ инструкций, бинарную разборку, сборку, восстановление управления и многое другое. B2R2 также поставляется с несколькими инструментами командной строки на уровне пользователя, которые похожи на Readelf и Objdump, хотя наши инструменты являются агромическими. B2R2 в настоящее время поддерживает четыре двоичных формата файлов: ELF, PE, MACH-O и Webassembly.
Ниже приведен список функций, которые мы в настоящее время поддерживаем. Некоторые из них находятся в стадии разработки, но мы с нетерпением ждем вашего вклада! Не стесняйтесь писать PR (запрос на вытягивание), следя за тем, чтобы вы прочитали наше руководство по вкладу.
| Особенность | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | Эв | TMS320C600 | Авр | PPC | Запланированный | SH4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Инструкция | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Разборка | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Подъем | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| CFG восстановление | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Потоки данных | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Эмуляция инструкции | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Сборка | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Реплика | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Компиляция ROP | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2 полагается на крошечный набор внешних библиотек .NET, и наш принцип дизайна - использовать минимальное количество библиотек. Ниже приведен список библиотек, которые мы используем.
В настоящее время мы используем FSDOC для генерации нашей документации: https://b2r2.org/apidoc/.
Давайте попробуем использовать API B2R2.
Сначала мы создаем пустой каталог 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 Затем мы просто запускаем его, набрав: dotnet run . Вы сможете увидеть поднятые ИК -заявления из вашей консоли. Вот и все! Вы только что подняли инструкцию Intel только с несколькими строками кода F#!
Здание B2R2 весело и просто. Все, что вам нужно сделать, это установить .NET 8 SDK или выше. Да, вот и все!
Чтобы построить B2R2 в режиме выпуска, введите make release или dotnet build -c Release в исходном root.
Чтобы построить B2R2 в режиме отладки, введите make или dotnet build в корне Source.
Для получения информации, пожалуйста, посетите официальный веб -сайт F#, чтобы получить больше советов по установке среды разработки для F#: http://fsharp.org/.
Участники в Softsec Lab. @ KAIST разработал B2R2 в сотрудничестве с Центром исследований в области кибербезопасности (CSRC) в KAIST. Смотрите авторов для полного списка.
Если вы планируете использовать 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, если хотите добавить свой.