Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
barf-project — BARF : кросс-платформенный фреймворк с открытым исходным кодом для анализа и реверс-инжиниринга бинарного кода | Kitploit
Инструменты/GitHubGitHub/programa-stic/barf-project
Статический анализДинамический анализ (песочница)Фреймворки для эксплойтовОбратная инженерияФаззингАнализ Бинарных ФайловОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubprograma-stic/barf-project

barf-project

BARF : кросс-платформенный фреймворк с открытым исходным кодом для анализа и реверс-инжиниринга бинарного кода

Репозиторий
1.5k171206 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

BARF : Фреймворк для бинарного анализа и обратной разработки

Build Status

Анализ бинарного кода является ключевой деятельностью во многих областях компьютерных наук и дисциплин программной инженерии, начиная от безопасности программного обеспечения и анализа программ и заканчивая обратной разработкой. Ручной бинарный анализ — сложная и трудоёмкая задача, и существуют программные инструменты, которые стремятся автоматизировать или помочь аналитикам-людям. Однако большинство таких инструментов имеют ряд технических и коммерческих ограничений, которые ограничивают доступ и использование значительной частью академического и практикующего сообществ. BARF — это фреймворк с открытым исходным кодом для бинарного анализа, который стремится поддерживать широкий спектр задач анализа бинарного кода, распространённых в дисциплине информационной безопасности. Это платформа с возможностью написания скриптов, поддерживающая подъём инструкций из нескольких архитектур, трансляцию бинарного кода в промежуточное представление, расширяемый фреймворк для плагинов анализа кода и взаимодействие с внешними инструментами, такими как отладчики, SMT-решатели и инструменты инструментирования. Фреймворк в первую очередь предназначен для анализа с участием человека, но может быть полностью автоматизирован.

Проект BARF включает BARF и связанные инструменты и пакеты. На данный момент проект состоит из следующих компонентов:

  • BARF : Кроссплатформенный фреймворк для бинарного анализа и обратной разработки с открытым исходным кодом
  • PyAsmJIT : JIT для архитектур Intel x86_64 и ARM.
  • Инструменты, построенные на BARF:
    • BARFgadgets : Позволяет искать, классифицировать и проверять ROP-гаджеты внутри бинарной программы.
    • BARFcfg : Позволяет восстанавливать граф потока управления функций бинарной программы.
    • BARFcg : Позволяет восстанавливать граф вызовов функций бинарной программы.

Для получения дополнительной информации см.:

  • BARF: Кроссплатформенный фреймворк для бинарного анализа и обратной разработки с открытым исходным кодом (Whitepaper) [en]
  • BARFing Gadgets (презентация ekoparty2014) [es]

Текущее состояние:

Последний релизv0.6.0
URLhttps://github.com/programa-stic/barf-project/releases/tag/v0.6.0
Журнал измененийhttps://github.com/programa-stic/barf-project/blob/v0.6.0/CHANGELOG.md

Все пакеты протестированы на Ubuntu 16.04 (x86_64).

BARF

BARF — это пакет Python для бинарного анализа и обратной разработки. Он может:

  • Загружать бинарные программы в различных форматах (ELF, PE и т.д.),
  • Поддерживает архитектуру Intel x86 для 32 и 64 бит,
  • Поддерживает архитектуру ARM для 32 бит,
  • Работает на промежуточном языке ([REIL]), поэтому все алгоритмы анализа не зависят от архитектуры,
  • Имеет интеграцию с SMT-решателями [Z3] и [CVC4], что позволяет выражать фрагменты кода в виде формул и проверять на них ограничения.

В настоящее время находится в разработке.

Установка

BARF зависит от следующих SMT-решателей:

  • [Z3] : Высокопроизводительный доказатель теорем, разрабатываемый в Microsoft Research.
  • [CVC4] : Эффективный автоматический доказатель теорем с открытым исходным кодом для задач выполнимости по модулю теорий (SMT).

Следующая команда устанавливает BARF в вашу систему:

$ sudo python setup.py install

Вы также можете установить его локально:

$ sudo python setup.py install --user

Примечания

  • Для работы требуется только один SMT-решатель. Вы можете выбрать между Z3 и CVC4 или установить оба.
  • Чтобы запустить некоторые тесты, необходимо сначала установить [PyAsmJIT]: sudo pip install pyasmjit
  • Возможно, потребуется установить [Graphviz]: sudo apt-get install graphviz

Быстрый старт

Это очень простой пример, показывающий, как открыть бинарный файл и вывести каждую инструкцию с её переводом на промежуточный язык (REIL).

from barf import BARF

# Открываем бинарный файл.
barf = BARF("examples/misc/samples/bin/branch4.x86")

# Выводим ассемблерные инструкции.
for addr, asm_instr, reil_instrs in barf.translate():
    print("{:#x} {}".format(addr, asm_instr))

    # Выводим перевод в REIL.
    for reil_instr in reil_instrs:
        print("\t{}".format(reil_instr))

Мы также можем восстановить CFG и сохранить его в файл .dot.

# Восстанавливаем CFG.
cfg = barf.recover_cfg()

# Сохраняем CFG в файл .dot.
cfg.save("branch4.x86_cfg")

Мы можем проверять ограничения на код с помощью SMT-решателя. Например, предположим, у вас есть следующий код:

 80483ed:       55                      push   ebp
 80483ee:       89 e5                   mov    ebp,esp
 80483f0:       83 ec 10                sub    esp,0x10
 80483f3:       8b 45 f8                mov    eax,DWORD PTR [ebp-0x8]
 80483f6:       8b 55 f4                mov    edx,DWORD PTR [ebp-0xc]
 80483f9:       01 d0                   add    eax,edx
 80483fb:       83 c0 05                add    eax,0x5
 80483fe:       89 45 fc                mov    DWORD PTR [ebp-0x4],eax
 8048401:       8b 45 fc                mov    eax,DWORD PTR [ebp-0x4]
 8048404:       c9                      leave
 8048405:       c3                      ret

И вы хотите узнать, какие значения нужно присвоить ячейкам памяти ebp-0x4, ebp-0x8 и ebp-0xc, чтобы получить определённое значение в регистре eax после выполнения кода.

Сначала добавляем инструкции в компонент анализатора.

from barf import BARF

# Открываем ELF-файл
barf = BARF("examples/misc/samples/bin/constraint1.x86")

# Добавляем инструкции для анализа.
for addr, asm_instr, reil_instrs in barf.translate(0x80483ed, 0x8048401):
    for reil_instr in reil_instrs:
        barf.code_analyzer.add_instruction(reil_instr)

Затем генерируем выражения для каждой интересующей переменной и добавляем нужные ограничения на них.

ebp = barf.code_analyzer.get_register_expr("ebp", mode="post")

# Предусловия: задаём диапазон для переменных a и b
a = barf.code_analyzer.get_memory_expr(ebp-0x8, 4, mode="pre")
b = barf.code_analyzer.get_memory_expr(ebp-0xc, 4, mode="pre")

for constr in [a >= 2, a <= 100, b >= 2, b <= 100]:
    barf.code_analyzer.add_constraint(constr)

# Постусловия: задаём желаемое значение для результата
c = barf.code_analyzer.get_memory_expr(ebp-0x4, 4, mode="post")

for constr in [c >= 26, c <= 28]:
    barf.code_analyzer.add_constraint(constr)

Наконец, проверяем, могут ли установленные ограничения быть выполнены.

if barf.code_analyzer.check() == 'sat':
    print("[+] Выполнимо! Возможные присваивания:")

    # Получаем конкретные значения для выражений
    a_val = barf.code_analyzer.get_expr_value(a)
    b_val = barf.code_analyzer.get_expr_value(b)
    c_val = barf.code_analyzer.get_expr_value(c)

    # Выводим значения
    print("- a: {0:#010x} ({0})".format(a_val))
    print("- b: {0:#010x} ({0})".format(b_val))
    print("- c: {0:#010x} ({0})".format(c_val))

    assert a_val + b_val + 5 == c_val
else:
    print("[-] Невыполнимо!")

Эти и другие примеры можно посмотреть в каталоге examples.

Обзор

Фреймворк разделён на три основных компонента: core, arch и analysis.

Core

Этот компонент содержит основные модули:

Скачать инструмент