
B2R2 — это полностью управляемый фреймворк для анализа бинарного кода, написанный на F#. Он предоставляет богатый набор алгоритмов, функций и инструментов для реверс-инжиниринга, анализа программ и инспекции на уровне бинарного кода.

B2R2 — это полностью управляемый фреймворк для бинарного анализа, написанный на F#. Он предоставляет богатый набор алгоритмов, функций и инструментов для реверс-инжиниринга, анализа программ и инспекции на бинарном уровне.
Название B2R2 вдохновлено R2-D2, культовым роботом из «Звёздных войн». Изначально проект назывался B2-R2, но позже принял форму без дефиса B2R2, поскольку идентификаторы и пространства имён .NET не допускают дефисов. Название отражает назначение проекта: «B» и «2» намекают на бинарность и двухсостоятельные вычисления, а «R» означает реверсинг. Короче говоря, B2R2 создан для бинарного реверс-инжиниринга.
B2R2 удобен для анализа: он написан на F# — языке, отлично подходящем для построения анализаторов программ благодаря таким возможностям, как сопоставление с образцом, алгебраические типы данных и выразительные функциональные абстракции.
B2R2 быстр: его ядро бинарного анализа спроектировано для эффективности и написано в стиле функциональность прежде всего. Это делает его естественным выбором для чистого параллелизма в типовых задачах анализа, таких как подъём инструкций и восстановление CFG.
B2R2 прост в использовании: будучи полностью управляемой библиотекой, он избавляет от сложной настройки нативных зависимостей. Установите .NET SDK — и всё готово. Встроенная поддержка IntelliSense также упрощает изучение API.
B2R2 независим от ОС: он работает на Linux, macOS и Windows, а также на любых других платформах, поддерживаемых .NET.
B2R2 интероперабелен: он не привязан к одному языку программирования. В принципе, API B2R2 можно использовать из любого языка, поддерживаемого CLI.
B2R2 поддерживает разбор инструкций, бинарную дизассембляцию, ассемблирование, восстановление потока управления и другие базовые строительные блоки для бинарного анализа. Он также включает несколько пользовательских инструментов командной строки, сравнимых с readelf и objdump, оставаясь при этом платформенно-независимым. В настоящее время B2R2 поддерживает четыре формата бинарных файлов: ELF, PE, Mach-O и WebAssembly.
В таблице ниже приведены возможности, поддерживаемые B2R2. Некоторые области всё ещё находятся в разработке, и вклад приветствуется. Перед открытием pull request обязательно прочитайте наше руководство по внесению вклада.
| ЦП | Документация | Разбор команд | Дисассемблер | Подъём | Восстановление CFG | Ассемблер |
|---|---|---|---|---|---|---|
| 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: |