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

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

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

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

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

Категории

Все категории
Loading categories
dragon-tales — Библиотека бинарного анализа, построенная на LLVM, для дизассемблирования, подъёма и символьного исполнения машинного кода на архитектурах x86, ARM и RISC-V, с восстановлением CFG и решением через Z3. | Kitploit
Инструменты/GitHubGitHub/fare9/dragon-tales
Статический анализАнализ уязвимостейАнализ КодаОбратная инженерияАнализ вредоносных программУтилиты и фреймворкиАнализ Бинарных ФайловЭксплуатация Бинарных Файлов
GitHubfare9/dragon-tales

dragon-tales

Библиотека бинарного анализа, построенная на LLVM, для дизассемблирования, подъёма и символьного исполнения машинного кода на архитектурах x86, ARM и RISC-V, с восстановлением CFG и решением через Z3.

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

Популярное

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

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

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

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

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

dragon-tales

Библиотека бинарного анализа для дизассемблирования, ассемблирования и анализа машинного кода для нескольких архитектур. Построена на LLVM 21.

Возможности:

  • Дизассемблирование (линейный проход и рекурсивный обход) и ассемблирование для шести архитектур
  • Восстановление CFG и функций
  • IGNIL — лёгкий промежуточный язык для архитектурно-независимого анализа
  • Упроститель IGNIL peephole — блочно-локальное свёртывание констант, алгебраические тождества, устранение мёртвых Temp
  • Обратный слайсер — распространяет значения через CFG IGNIL, не пересекая узлы слияния
  • LLVMLifter — поднимает восстановленную Function или отдельный уплощённый блок IGNIL (CFG не требуется) в LLVM IR с последующим конвейером оптимизаций (mem2reg/instcombine/GVN/DCE)
  • Интеграция с Z3 — понижение слайснутого выражения до формулы битвекторов Z3, перечисление конкретных значений, которые оно может принимать, или решение для единственного значения
  • Символическое исполнение — выполнение блока IGNIL над битвекторами Z3 с регистрами и памятью, инициализированными конкретно или символически: решение для входных данных, при которых проверка проходит, доказательство того, что на самом деле вычисляет обфусцированное выражение, и разрешение вычисляемого перехода (таблица переходов, диспетчеризация VM) до конкретных адресов, которых он может достичь
  • SwitchDetector — распознавание шаблона косвенного перехода через таблицу переходов по слайснутой цели перехода и чтение его конкретных целей case
  • Сопоставление сигнатур, совместимое с FLIRT — идентификация известных функций по базам сигнатур .pat
  • Подъём трасс — подъём произвольной линейной последовательности инструкций (например, записанной трассы исполнения) напрямую в IGNIL, полностью минуя анализ CFG/функций/валидности блоков
  • Загрузчик бинарников — разбор файла ELF или PE/COFF (или байтов в памяти) напрямую в LoadedImage: секции и сегменты ELF PT_LOAD по их виртуальным адресам с правами R/W/X, точка входа, база образа, символы с флагами импорта/экспорта и архитектура, автоматически определённая по заголовку (указывать её не нужно). loader::disassembleImage переходит от файла к заполненному Graph за один вызов. Построено на llvm::object из LLVM, поэтому дополнительных зависимостей нет
  • CLI disassembler — инструмент командной строки, который загружает бинарник ELF или PE и выводит дизассемблирование; полезен для быстрого просмотра и написания скриптов
  • C-шим (dragon_c.h) и Python API (cffi), покрывающие большую часть перечисленных выше возможностей (несколько углов, доступных только из C++ — шаблоны DSL для сопоставления с образцом, архитектурно-специфичные вспомогательные функции классификации инструкций и подобное — задокументированы как таковые в docs/cpp_api.md)

Требования

  • LLVM 21 (должен быть установлен в системе)
  • CMake 3.20 или новее
  • Компилятор C++20
  • Python 3 с cffi (опционально, для Python API)

Поддерживаемые архитектуры

  • x86 (32-бит и 64-бит)
  • ARM (32-бит и 64-бит)
  • RISC-V (32-бит и 64-бит)

Готовые релизы

Помеченные тегами релизы поставляются как самодостаточный архив SDK для каждой платформы (dragon-<version>-{linux-x64,macos-arm64,windows-x64}.{tar.gz,zip}) на странице GitHub Releases. LLVM статически слинкован в библиотеки, поэтому для их использования установка системного LLVM не требуется; Z3 поставляется в комплекте. Каждый архив содержит:

lib/      libdragon + libdragon_c (shared) and the bundled Z3 runtime
bin/      the `disassembler` CLI (plus the DLLs on Windows)
include/  the C++ headers (dragon/...) and the C-shim header (dragon/dragon_c.h)
share/dragon/python/dragon.py   the Python API

Укажите Python API на встроенную библиотеку с помощью DRAGON_C_LIB=/path/to/lib/libdragon_c.so (.dylib/.dll в зависимости от платформы).

Чтобы собрать из исходников вместо этого:

Сборка

mkdir build && cd build
cmake ..
cmake --build .

Для запуска тестов:

ctest --output-on-failure

Несколько семантических round-trip тестов для x86 дорогие: они JIT-компилируют поднятый IR и эмулируют сырые байты под Unicorn на большом перекрёстном произведении граничных входных данных (тысячи round-trip'ов каждый). Они помечены тегом [.][expensive], что скрывает их от стандартного запуска ctest, чтобы он оставался быстрым. Запускайте их явно — обычно на более мощной машине или в CI — с помощью:

./build/bin/dragon_tests "[expensive]"

Сборка в Windows (Visual Studio + vcpkg)

В Windows для обнаружения зависимостей в CMakeLists.txt требуется несколько подсказок, поскольку он написан для структуры пакетов Linux: Z3 находится через встроенный модуль LLVM FindZ3.cmake, а Unicorn — через pkg-config. Ни один из этих механизмов не знает, куда vcpkg устанавливает пакеты, а LLVM находится через LLVM_DIR, а не через системный путь. Указание трёх подсказок решает всё это.

Предварительные требования

  • Visual Studio 2022 (или её Build Tools) с рабочей нагрузкой Desktop development with C++
  • CMake 3.20+
  • LLVM 21, распакованный в произвольное место, например C:\llvm-21 (подойдёт готовый релиз clang+llvm-*-x86_64-pc-windows-msvc)
  • vcpkg

1. Установите библиотеки с помощью vcpkg (триплет x64-windows; pkgconf предоставляет исполняемый файл pkg-config, необходимый для обнаружения Unicorn):

vcpkg install z3:x64-windows unicorn:x64-windows pkgconf:x64-windows

2. Три подсказки, которые нужны CMake

ПодсказкаНазначениеПример значения
LLVM_DIRнайти LLVM 21C:/llvm-21/lib/cmake/llvm
CMAKE_PREFIX_PATHпозволить FindZ3 увидеть дерево vcpkgC:/vcpkg/installed/x64-windows
PKG_CONFIG_EXECUTABLE + PKG_CONFIG_PATHпозволить найти Unicorn через pkg-config.../tools/pkgconf/pkgconf.exe и .../installed/x64-windows/lib/pkgconfig

3a. Настройка и сборка (одна команда)

$env:PKG_CONFIG_PATH = "C:/vcpkg/installed/x64-windows/lib/pkgconfig"
cmake -S . -B build `
  -DLLVM_DIR=C:/llvm-21/lib/cmake/llvm `
  -DCMAKE_PREFIX_PATH=C:/vcpkg/installed/x64-windows `
  -DPKG_CONFIG_EXECUTABLE=C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe `
  -DDRAGON_USE_Z3=ON -DDRAGON_USE_UNICORN=ON
cmake --build build --config Release

Успешный запуск configure выводит:

-- Found LLVM 21.1.8 at C:/llvm-21/lib/cmake/llvm
-- Found Z3 5.0.0 at C:/vcpkg/installed/x64-windows/lib/libz3.lib
-- Found Unicorn 2.1.4

3b. Или используйте пресет (рекомендуется)

Сохраните настройки один раз в CMakeUserPresets.json рядом с CMakeLists.txt, затем выполните конфигурацию с помощью одного флага. Этот файл содержит пути, специфичные для конкретной машины, поэтому не добавляйте его в систему контроля версий (он игнорируется git).

{
  "version": 3,
  "configurePresets": [
    {
      "name": "win-vcpkg",
      "generator": "Visual Studio 17 2022",
      "architecture": "x64",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "LLVM_DIR": "C:/llvm-21/lib/cmake/llvm",
        "CMAKE_PREFIX_PATH": "C:/vcpkg/installed/x64-windows",
        "PKG_CONFIG_EXECUTABLE": "C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe",
        "DRAGON_USE_Z3": "ON",
        "DRAGON_USE_UNICORN": "ON"
      },
      "environment": {
        "PKG_CONFIG_PATH": "C:/vcpkg/installed/x64-windows/lib/pkgconfig"
      }
    }
  ],
  "buildPresets": [
    { "name": "win-vcpkg", "configurePreset": "win-vcpkg", "configuration": "Release" }
  ]
}
cmake --preset win-vcpkg
cmake --build build --config Release

Примечания

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