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

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

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

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

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

Категории

Все категории
Loading categories
qsynthesis — Синтезатор Greybox, ориентированный на деобфускацию инструкций ассемблера. | Kitploit
Инструменты/GitHubGitHub/quarkslab/qsynthesis
Статический анализДинамический анализ (песочница)Анализ уязвимостейАнализ КодаОбратная инженерияУтилиты и фреймворкиАнализ Бинарных ФайловСтатьи и Исследования
GitHubquarkslab/qsynthesis

qsynthesis

Синтезатор Greybox, ориентированный на деобфускацию инструкций ассемблера.

Репозиторий
1781711 год назадПроверено Kitploit
Сайт

Популярное

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

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

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

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

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

Qsynthesis

QSynthesis — это API для Python3, предназначенный для синтеза битвекторных выражений на основе ввода-вывода. Его цель — облегчить деобфускацию кода. Алгоритм представляет собой greybox-подход, сочетающий как blackbox-синтез на основе ввода-вывода, так и whitebox-поиск по AST для синтеза подвыражений (если корневой узел не может быть синтезирован).

Этот алгоритм был изначально описан на академическом воркшопе BAR:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (использованные бенчмарки доступны: здесь)

Код был выпущен в рамках следующего доклада на Black Hat:

  • Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation

Отказ от ответственности: Этот фреймворк является экспериментальным и должен использоваться только в целях экспериментирования. Он в первую очередь направлен на стимулирование исследований в этой области.

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

Установка, примеры и документация по API доступны в специальном разделе документации: Documentation

Функциональные возможности

Ядро синтеза основано на символьном движке Triton, на котором построен весь фреймворк. Он предоставляет следующие возможности:

  • синтез битвекторных выражений
  • возможность проверки через SMT семантической эквивалентности синтезированных выражений
  • возможность синтеза констант (если выражение кодирует константу)
  • возможность улучшения оракулов (предвычисленных таблиц) со временем через механизм обучения
  • возможность обратной сборки синтезированного выражения в ассемблер
  • возможность предоставления оракулов через REST API для облегчения использования синтеза
  • плагин для IDA, обеспечивающий интеграцию синтеза

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

Установка

Для работы сначала необходимо установить Triton: документация по установке. Triton не устанавливается автоматически в virtualenv, скопируйте его в ваш venv или используйте --system-site-packages при настройке venv.

Затем:

$ git clone https://github.com/quarkslab/qsynthesis.git
$ cd qsynthesis
$ pip3 install '.[all]'

Опция [all] установит все зависимости (см. документацию для облегчённой установки).

Генерация таблиц

Алгоритм синтеза требует генерации таблиц оракулов, производных от грамматики (набора переменных и операторов). Установка Qsynthesis предоставляет утилиту qsynthesis-table-manager, позволяющую манипулировать таблицами. Следующая команда генерирует таблицу с 3 переменными по 64 бита, 5 операторами, используя вектор из 16 входов. Мы ограничиваем генерацию 5 миллионами записей.

$ qsynthesis-table-manager generate -bs 64 --var-num 3 --input-num 16 --random-level 5 --ops AND,NEG,MUL,XOR,NOT --watchdog 80 --limit 5000000 my_oracle_table
Generate Table
Watchdog value: 80.0
Depth 2 (size:3) (Time:0m0.23120s)
Depth 3 (size:21) (Time:0m0.23198s)
Depth 4 (size:574) (Time:0m0.26068s)
Depth 5 (size:400858) (Time:0m21.23231s)
Threshold reached, generation interrupted
Stop required
Depth 5 (size:5000002) (Time:4m52.56009s) [RAM:9.52Gb]

Примечание: Процесс генерации потребляет много RAM, параметр --watchdog позволяет задать процент RAM, при превышении которого генерация прерывается.

Синтез битвекторного выражения

Затем мы можем попробовать упростить кажущееся обфусцированным выражение с помощью:

from qsynthesis import SimpleSymExec, TopDownSynthesizer, InputOutputOracleLevelDB

blob = b'UH\x89\xe5H\x89}\xf8H\x89u\xf0H\x89U\xe8H\x89M\xe0L\x89E\xd8H\x8bE' \
       b'\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0H\x8dH\x01H\x8b' \
       b'E\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2H)\xd0H\x83\xe8' \
       b'\x02H!\xc1H\x8bE\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0' \
       b'H\x8dp\x01H\x8bE\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2' \
       b'H)\xd0H\x83\xe8\x02H\t\xf0H)\xc1H\x89\xc8H\x83\xe8\x01]\xc3'

# Perform symbolic execution of the instructions
symexec = SimpleSymExec("x86_64")
symexec.initialize_register('rip', 0x40B160)  # arbitrary address
symexec.initialize_register('rsp', 0x800000)  # arbitrary stack
symexec.execute_blob(blob, 0x40B160)
rax = symexec.get_register_ast("rax")  # retrieve rax register expressions

# Load lookup tables
ltm = InputOutputOracleLevelDB.load("my_oracle_table")

# Perform Synthesis of the expression
synthesizer = TopDownSynthesizer(ltm)
synt_rax, simp = synthesizer.synthesize(rax)

print(f"expression: {rax.pp_str}")
print(f"synthesized expression: {synt_rax.pp_str} [{simp}]")

Ограничения

  • точность синтеза ограничена полнотой предвычисленных таблиц
  • генерация таблиц ограничена потреблением RAM
  • обратная сборка не может включать переменные памяти, назначением обязательно является регистр, а архитектура зависит от llvmlite (таким образом, в основном x86_64)
  • код ссылается на синтез на основе трассировки, который отключён (поскольку лежащий в основе фреймворк ещё не имеет открытого исходного кода)

Авторы

  • Robin David (@RobinDavid), Quarkslab

Участники

Огромная благодарность участникам этого исследования:

  • Luigi Coniglio
  • Jonathan Salwan
Скачать инструмент