Гостевая статья B2R2 - Сборник алгоритмов, функций и инструментов для двоичного анализа

  • Автор темы Автор темы Vlad
  • Дата начала Дата начала
B2R2-Collection-Of-Useful-Algorithms-Functions-And-Tools-For.png

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

B2R2 был назван в честь , известного вымышленного робота, появившегося в «Звездных войнах». На самом деле исходное имя B2R2 было B2-R2, но мы решили использовать вместо него имя B2R2, потому что. NET не допускает тире (-) в идентификаторах (или пространствах имен).

Название по существу представляет «двоичный» или «два»: сам «двоичный» в любом случае означает «два» состояния. «B» и «2» означают «бинарный», а «R» обозначает реверс.

B2R2
  1. B2R2 удобен для анализа: он написан на языке F #, который предоставляет все синтаксические возможности для написания программных анализаторов, такие как сопоставление с образцом, алгебраические типы данных и т. Д.
  2. B2R2 быстр: у него есть быстрый и эффективный интерфейсный движок для бинарного анализа, который написан исключительно функционально. Поэтому он, естественно, поддерживает чистый параллелизм для двоичной разборки, подъема и оптимизации ИК.
  3. С B2R2 легко играть: для B2R2 абсолютно нет ада зависимостей, потому что это полностью управляемая библиотека. Все, что вам нужно сделать, это установить , и вы готовы к работе! Встроенная поддержка - еще один плюс!
  4. B2R2 не зависит от операционной системы: он работает на Linux, Mac, Windows и т. Д., Пока ядро .NET поддерживает его.
  5. B2R2 совместим: он не привязан к конкретному языку. Теоретически вы можете использовать API B2R2 с любыми .
Характеристики
В настоящее время мы фокусируемся на интерфейсе бинарного анализа, который включает в себя двоичный анализатор, анализатор и оптимизатор. B2R2 изначально поддерживает параллельный подъем, что является новой техникой, введенной нами в NDSS Bar 2019 года. Пожалуйста, обратитесь к нашей статье для более подробной информации о технике, а также о наших дизайнерских решениях. У нас также есть свои собственные инструменты, такие как символический исполнитель, но мы пока не планируем открывать их. Тем не менее, B2R2 включает в себя несколько полезных функций среднего и внутреннего уровня, таких как компиляция цепочки ROP, построение CFG, автоматическое рисование графиков и т. Д. B2R2 также поставляется с простой утилитой командной строки, мы вызываем BinExplorer, которая может помочь исследовать такие функции с использованием простогоинтерфейса .

Зависимости
B2R2 опирается на небольшой набор внешних библиотек .NET, и наш принцип разработки заключается в использовании минимального количества библиотек. Ниже приведен список библиотек, которые мы используем.
Документация по API
В настоящее время мы используем docfx для создания нашей документации:

Пример
Давайте попробуем использовать API B2R2.

  1. Сначала мы создаем пустой каталог DIRNAME:
    Код:
    mkdir DIRNAME
  2. Затем мы создаем пустой консольный проект с dotnetкомандной строкой:
    Код:
    $ dotnet new console -lang F#
  3. Добавьте в проект наш самородный пакет B2R2.FrontEnd:
    Код:
    $ dotnet add package B2R2.FrontEnd
  4. Измените файл Program.fs в любимом редакторе следующим образом:
    Код:
    open B2R2
    open B2R2.FrontEnd
    Код:
    [<EntryPoint>]
    let main argv =
    let isa = ISA.OfString "amd64"
    let bytes = [| 0x65uy; 0xffuy; 0x15uy; 0x10uy; 0x00uy; 0x00uy; 0x00uy |]
    let handler = BinHandler.Init (isa, bytes)
    let ins = BinHandler.ParseInstr handler 0UL
    ins.Translate handler.TranslationContext |> printfn "%A"
    0
  5. Затем мы просто запустим его, набрав: dotnet run. Вы сможете увидеть снятые IR-выражения с вашей консоли. Вот так! Вы только что сняли инструкцию Intel с помощью всего нескольких строк F# кода!
Сборка
B2R2 - это весело и легко. Все, что вам нужно сделать, это установить .NET Core SDK 3.0 или выше. Да, вот и все!

  • Чтобы собрать B2R2 в режиме выпуска, введите make release или dotnet build -c Release в корне источника.
  • Чтобы построить B2R2 в режиме отладки, введите make или dotnet build в корне источника.
Для вашей информации, пожалуйста, посетите официальный веб-сайт F #, чтобы получить дополнительные советы по установке среды разработки для F #: .

Зачем изобретать колесо ?
Существует много других замечательных инструментов, но мы хотели создать функционально - первую платформу двоичного которую можно безболезненно устанавливать и которая может работать на любой платформе без каких-либо хлопот. B2R2 находится в зачаточном этапе, но мы считаем что обеспечивает богатый набор библиотечных функций для бинарного анализа. У этого также есть сильный фронт, который легко приспосабливаем и расширяем! В настоящее время он надежно поддерживает x86 и x86-64, что означает, что мы тщательно их протестировали; и он частично поддерживает ARMv7 (и Thumb), ARMv8, MIPS32 и MIPS64, что означает, что они работают, но мы еще не проверили их тщательно.

Возможности, которые будут добавлены ?
Ниже приведен список функций, которые мы планируем добавить в будущем: список полностью неполон. Некоторые из них находятся в стадии разработки, но мы с нетерпением ждем вашего вклада! Не стесняйтесь написать PR (Pull Requst), убедившись, что вы прочитали наше руководство по вкладу.

  • Внедрить алгоритмы восстановления CFG.
  • Реализуйте для поддерживаемых в настоящее время ISA, используя комбинатор синтаксического анализа.
  • Поддержка операций с плавающей запятой.
  • Поддержка большего количества архитектур, таких как PPC.
--------------------
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!