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

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

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

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

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

Категории

Все категории
Loading categories
polytracker — Инструмент инструментирования на основе LLVM для универсального отслеживания помеченных данных, анализа потоков данных и трассировки. | Kitploit
Инструменты/GitHubGitHub/trailofbits/polytracker
Анализ уязвимостейДинамический анализ кода (DAST)Обратная инженерияФаззингАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubtrailofbits/polytracker

polytracker

Инструмент инструментирования на основе LLVM для универсального отслеживания помеченных данных, анализа потоков данных и трассировки.

Репозиторий
59953833 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

PolyTracker


PyPI version Tests Slack Status

PolyTracker — это инструмент, изначально созданный для Автоматической лексической аннотации и навигации парсеров (Automated Lexical Annotation and Navigation of Parsers), обратного акронима, придуманного исключительно для того, чтобы называть его The ALAN Parsers Project. Однако со временем он превратился в универсальный инструмент для эффективного выполнения анализа потоков данных и потока управления программ. PolyTracker — это LLVM-проход, который инструментирует программы для отслеживания того, над какими байтами входного файла работают те или иные функции. Он выдаёт базу данных с информацией о потоках данных, а также трассу выполнения. PolyTracker также предоставляет библиотеку Python для взаимодействия со своими выходными данными и их анализа, а также интерактивную REPL-среду Python.

PolyTracker можно использовать вместе с PolyFile для автоматического определения семантического назначения функций в парсере. Также у него есть экспериментальная функция, способная генерировать контекстно-свободную грамматику, описывающую язык, принимаемый парсером.

В отличие от инструментов динамической инструментации, таких как Taintgrind, PolyTracker почти для всех входных данных вносит незначительные накладные расходы на производительность и способен отслеживать каждый байт входа одновременно. PolyTracker начинался как форк LLVM DataFlowSanitizer и черпает много вдохновения из Angora Fuzzer. Однако, в отличие от системы Angora, PolyTracker способен отслеживать полное происхождение taint-метки. В феврале 2021 года LLVM DataFlowSanitizer добавил новую функцию для отслеживания происхождения taint-меток, названную origin tracking. Однако он способен отслеживать не более 16 taint-меток одновременно, тогда как PolyTracker может отслеживать до 231-1.

Этот README служит общим руководством по установке PolyTracker и компиляции/инструментированию двоичных файлов. Для программного взаимодействия с PolyTracker, его расширения через Python API, а также для работы с трассами выполнения, созданными инструментированным кодом, обратитесь к документации Python.

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

PolyTracker управляется через Python-скрипт polytracker. Вы можете установить его, выполнив

pip3 install polytracker

PolyTracker требует очень специфического системного окружения для работы, поэтому почти всем пользователям, скорее всего, придётся запускать его в контейнерной среде. К счастью, polytracker упрощает эту задачу. Вам достаточно установить docker, а затем выполнить:

polytracker docker pull

и

polytracker docker run

Последняя команда смонтирует текущую рабочую директорию в Docker-контейнер PolyTracker и позволит вам собирать и запускать инструментированные программы.

Управляющий скрипт polytracker — который можно запускать как на хост-системе, так и внутри Docker-контейнера — имеет множество команд как для инструментирования программ, так и для анализа полученных артефактов. Например, вы можете исследовать потоки данных в ходе выполнения, восстановить граф потока управления инструментированной программы и даже извлечь контекстно-свободную грамматику, соответствующую входным данным, принимаемым программой. Вы можете изучить эти команды, выполнив

polytracker --help

Скрипт polytracker также является REPL-средой, если запускать его без аргументов командной строки:

$ polytracker
PolyTracker (4.0.0)
https://github.com/trailofbits/polytracker
Type "help" or "commands"
>>> commands

Инструментирование простой программы на C/C++

PolyTracker также поставляется с командой build. Эта команда позволяет пользователю выполнять любую команду сборки в инструментированной среде Blight. При этом будет создан файл blight_journal.jsonl, в котором записываются все команды, выполненные во время сборки. Если у вас есть цель на C/C++, вы можете инструментировать её, вызвав polytracker build и передав команду сборки:

polytracker build gcc -g -o my_binary my_source.c

Чтобы инструментировать целевой артефакт сборки, используйте команду instrument-targets. По умолчанию команда использует файл blight_journal.jsonl в вашей текущей рабочей директории для создания инструментированной версии целевого артефакта. Инструментированная цель будет собрана с теми же флагами, что и исходная.

polytracker instrument-targets my_binary

build также поддерживает более сложные программы, использующие систему сборки, например autotools или CMake:

polytracker build cmake .. -DCMAKE_BUILD_TYPE=Release
polytracker build ninja
# or
polytracker build ./configure
polytracker build make

Затем запустите instrument-targets для любых целей сборки:

polytracker instrument-targets a.bin b.so

Тогда a.instrumented.bin и b.instrumented.so будут инструментированными версиями. Примеры инструментирования реальных программ см. в Dockerfile в каталоге examples.

Запуск и анализ инструментированной программы

Инструментированное ПО будет записывать свои выходные данные в путь, указанный в POLYDB, или в polytracker.tdag, если он не указан. Это двоичный файл, с которым можно работать, выполнив:

from polytracker import PolyTrackerTrace, taint_dag

trace = PolyTrackerTrace.load("polytracker.tdag")
tdfile = trace.tdfile

first_node = list(tdfile.nodes)[0]
print(f"First node affects control flow: {first_node.affects_control_flow}")

# Operate on all Range nodes
for index, node in enumerate(tdfile.nodes):
  if isinstance(node, taint_dag.TDRangeNode):
    print(f"Node {index}: first {node.first}, last {node.last}")

# Access taint forest
tdforest = trace.taint_forest
n1 = tdforest.get_node(1)
print(
  f"Forest node {n1.label}. Parent labels: {n1.parent_labels}, "
  f"source: {n1.source.path if n1.source is not None else None}, "
  f"affects control flow: {n1.affected_control_flow}"
)

Вы также можете запустить инструментированный двоичный файл непосредственно из REPL:

$ polytracker
PolyTracker (4.0.0)
https://github.com/trailofbits/polytracker
Type "help" or "commands"
>>> trace = run_trace("path_to_binary", "path_to_input_file")

При необходимости это автоматически запустит инструментированный двоичный файл в Docker-контейнере.

⚠️ Если вы запускаете PolyTracker в Docker или виртуальной машине: PolyTracker может работать очень медленно в виртуализированной среде, если входной файл или, особенно, выходная база данных находятся в каталоге, смонтированном с хост-ОС. Это особенно актуально при запуске PolyTracker в Docker на хост-системе macOS. Решение — записывать базу данных в путь внутри контейнера/ВМ и копировать её на хост-систему в самом конце.

Документация Python API доступна здесь.

Параметры времени выполнения и настройка инструментирования

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