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

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

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

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

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

Категории

Все категории
Loading categories
grap — Определяйте и сопоставляйте пользовательские графовые шаблоны с бинарными графами потока управления, используя дизассемблер на основе Capstone, с поддержкой CLI, привязок Python и плагина IDA. | Kitploit
Инструменты/GitHubGitHub/quosecgmbh/grap
Статический анализОбратная инженерияОтладчикиАнализ вредоносных программАнализ Бинарных Файлов
GitHubquosecgmbh/grap

grap

Определяйте и сопоставляйте пользовательские графовые шаблоны с бинарными графами потока управления, используя дизассемблер на основе Capstone, с поддержкой CLI, привязок Python и плагина IDA.

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

Популярное

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

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

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

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

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

grap: определение и сопоставление графовых шаблонов в бинарных файлах

https://github.com/QuoSecGmbH/grap

grap принимает шаблоны и бинарные файлы, использует дизассемблер на основе Casptone для получения графов потока управления из бинарных файлов, а затем сопоставляет шаблоны с ними.

Шаблоны — это определённые пользователем графы с условиями на инструкции («opcode is xor and arg1 is eax») и условиями повторения (3 одинаковые инструкции, базовые блоки...).

grap доступен как автономный инструмент с дизассемблером и привязками к Python, а также как плагин для IDA, использующий преимущества дизассемблирования, выполненного IDA и реверс-инженером.

Поддержка:

  • Файлы: дизассемблирование PE, ELF и сырых бинарных файлов; другие файлы должны работать в IDA
  • Архитектура: x86 и x86_64

Быстрое сопоставление шаблона:

Быстрое сопоставление шаблона

Полное сопоставление шаблона:

Полное сопоставление шаблона

Сопоставление на нескольких файлах:

Сопоставление на нескольких файлах

Создание и сопоставление шаблонов прямо из IDA:

Создание и сопоставление шаблонов прямо из IDA

Установка

Этот документ описывает, как собрать и установить grap на дистрибутиве Linux.

Также вы можете прочитать:

  • WINDOWS.md: установка grap на Windows
  • IDA.md: инструкция по установке и использованию плагина IDA

Требования

Помимо компиляторов (build-essential), должны быть установлены следующие зависимости:

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig (version 3 or newer is mandatory)

Таким образом, на Ubuntu / Debian должно сработать следующее:

root@kitploit:~
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig

Обратите внимание, что это было протестировано на последней Ubuntu LTS (18.04.3). Пакеты могут отличаться в зависимости от вашего дистрибутива.

Сборка и установка

Следующие команды соберут и установят проект:

  • mkdir build; cd build/ — мы рекомендуем собирать проект в отдельном каталоге
  • cmake ../src/; make — сборка с помощью cmake и make
  • sudo make install — установит grap в /usr/local/bin/

SWIG может не найти python3, если ваша версия по умолчанию — python2; это можно исправить, переключившись на python3 по умолчанию. Например, на Ubuntu:

root@kitploit:~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Использование

Инструмент можно запустить с помощью следующей команды:

$ grap [options] pattern test_paths

Ниже приведены несколько примеров поддерживаемых опций:

  • grap -h: описывает поддерживаемые опции

Можно позволить grap вывести шаблон из строки. Поддерживается лишь несколько опций, но это полезно для прототипирования:

  • grap "opcode is xor and arg1 contains '['" (test.exe): поиск xor с записью в память
  • grap -v "sub->xor->sub" (test.exe): -v выведет путь выведенного шаблона

Выбор способа дизассемблирования бинарных файлов:

  • grap -od (pattern.grapp) samples/*: дизассемблировать файлы в папке samples/ без попытки сопоставления
  • grap -f (pattern.grapp) (test.exe): принудительное повторное дизассемблирование бинарного файла, затем сопоставление с pattern.grapp
  • grap --raw (pattern.grapp) (test.bin): дизассемблирование сырого файла (используйте --raw-64 для 64-битных бинарных файлов)

Управление подробностью вывода:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): сопоставить дизассемблированные файлы, показать совпадающие и несовпадающие файлы, по одному на строку
  • grap -m (pattern.grapp) (test.grapcfg): показать все сопоставленные узлы

Выбор места записи дизассемблированных файлов (.grapcfg); сопоставление нескольких файлов с несколькими шаблонами:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: дизассемблировать ls в ls.grapp и искать циклы базовых блоков
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): сопоставление с несколькими файлами шаблонов
  • grap -r -q patterns/ /bin/ -o /tmp/ : дизассемблировать все файлы из /bin/ в /tmp/ и сопоставить их со всеми шаблонами .grapp из patterns/ (рекурсивная опция -r применяется к /bin/, а не к patterns/)

Примеры шаблонов

Следующий шаблон обнаруживает цикл дешифрования, состоящий из xor, за которым следует sub, найденный в образце Backspace:

root@kitploit:~
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]

A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}

Обратите внимание, что файлы шаблонов могут содержать несколько графов шаблонов.

Дополнительные примеры шаблонов можно найти в двух каталогах:

  • patterns/ содержит несколько шаблонов, которые могут быть полезны для любого бинарного файла, например, шаблон для обнаружения коротких циклов или цикла на базовых блоках,
  • examples/ содержит шаблоны, использованные против вредоносного ПО Backspace (см. examples/backspace_samples.md для получения образцов бинарных файлов).

Учебные пособия и дополнительные примеры

О образцах вредоносного ПО:

  • Навигация по образцам вредоносного ПО с помощью grap (CLI, IDA): https://yaps8.github.io/blog/grap_qakbot_navigation
  • Автоматизация разбора функций и дешифрования (привязки Python): https://yaps8.github.io/blog/grap_qakbot_strings

Использование привязок Python:

  • Python-файл, демонстрирующий использование привязок для анализа образцов Backspace: examples/analyze_backspace.py
  • Примеры скриптов IDApython интегрированы в плагин IDA, их можно посмотреть здесь: https://yaps8.github.io/grap/html/scripting_css.html

Документация

Дополнительную документацию вы найдёте в папке doc/:

  • doc/COMPILE_OPTIONS.md
  • doc/DEBUG.md
  • doc/TESTS.md
  • doc/syntax_highlighting.md

Синтаксис шаблонов и тестовых графов подробно описан в файле grap_graphs.pdf в разделе релизов.

Лицензия

grap распространяется под лицензией MIT. Полный текст лицензии можно найти в LICENSE.

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