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

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

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

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

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

Категории

Все категории
Loading categories
polypyus — Историограф прошивок, работающий только с бинарными файлами, который учится находить функции в сырых бинарных файлах, извлекая известные функции из похожих бинарных файлов, что обеспечивает быстрое сопоставление функций без дизассемблирования для анализа встроенных прошивок. | Kitploit
Инструменты/GitHubGitHub/seemoo-lab/polypyus
Безопасность встроенных системОбратная инженерияАнализ Бинарных ФайловАнализ Прошивок
GitHubseemoo-lab/polypyus

polypyus

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

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

Популярное

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

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

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

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

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

PyTest

Polypyus

Polypyus — историк прошивок

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

Polypyus интегрируется в рабочий процесс существующих инструментов, таких как Ghidra, IDA, BinDiff и Diaphora. Например, он может импортировать ранее аннотированные функции и учиться на них, а также экспортировать найденные функции для импорта в IDA. Поскольку Polypyus использует довольно строгие пороги, в наших экспериментах он находил только правильные совпадения. Хотя это приводит к меньшему количеству результатов по сравнению с существующими инструментами, это хорошая отправная точка для загрузки этих совпадений в IDA для улучшения результатов автоанализа, а затем запуска BinDiff поверх.

Что решает Polypyus

Работая с сырыми бинарными файлами прошивок, а именно с различными версиями Bluetooth-прошивок Broadcom и Cypress, мы обнаружили, что автоанализ IDA часто неправильно определяет начала функций. В IDA Pro 6.8 автоанализ был немного агрессивнее, что давало больше результатов, но также и больше ложных срабатываний. В целом, IDA Pro 7.2 был более пессимистичным, но пропускал множество функций. Это привело к тому, что между нашими прошивками в IDA Pro 6.8 было всего несколько совпадений BinDiff, а в IDA Pro 7.2 не было полезных совпадений вовсе.

Интересно, что BinDiff часто не мог идентифицировать функции, которые, за исключением ветвлений, были побайтно идентичны. Обратите внимание, что Polypyus ищет именно такие побайтно идентичные функции. Мы предполагаем, что BinDiff не справляется с этими функциями из-за другого графа вызовов, порождённого пропущенными функциями и ложными срабатываниями. Иногда эти функции уже были распознаны IDA, но часто IDA либо не распознавала их как код, либо не помечала как функции. Заметим, что у Diaphora схожие проблемы, так как она экспортирует функции, идентифицированные IDA, перед дальнейшей обработкой. Ниже показан бенчмарк на бинарном файле Bluetooth-прошивки CYW20735B1, сравнивающий различные дизассемблеры и показывающий, как ошибки дизассемблера приводят к последующим проблемам при сравнении.

Benchmark comparing IDA Pro, Ghidra, Binary Ninja, radare2, BinDiff and Diaphora

Более того, хотя мы обнаружили, что Amnesia находит много функций, он также находит много ложных срабатываний. Однако многие функции имеют похожую настройку стекового кадра в начале. Таким образом, Polypyus имеет опцию изучения общих начал функций из аннотированных входных бинарников и применения этого к другим бинарникам для идентификации функций без сопоставления их имён. Этот опциональный шаг применяется только к областям, в которых ранее не были найдены функции, таким образом метод общих начал функций и основной поиск функций не конфликтуют.

Поскольку эти сопоставители работают с сырым бинарным файлом, они не зависят от дизассемблера. Это также имеет один важный недостаток: если были разные параметры компилятора или другая целевая архитектура, Polypyus не обнаружит похожие функции. Кроме того, хотя найденные совпадения очень надёжны, идентификация начал функций немного менее надёжна, поэтому используйте последнюю с осторожностью. Ниже вы можете видеть, что оценочные наборы Cypress очень похожи друг на друга, но прошивка MacBook сильно отличается.

Benchmark on four different firmwares

Как это работает

Polypyus создаёт нечёткие бинарные сопоставители, сравнивая общие функции в наборе аннотированных бинарных файлов прошивок.

В настоящее время поддерживаются следующие аннотации:

  • Файл patch.elf от WICED Studio, который является специальным ELF-файлом, содержащим только определения символов.
  • Файл .symdefs, создаваемый большинством ARM-компиляторов.
  • Файл .csv с форматом, описанным в папке firmware.

Эти аннотации содержат адрес, размер и имя известных функций. Чем больше общих черт имеют входные бинарники в коллекции истории, тем лучше для производительности и результатов Polypyus. Имея несколько слегка отличающихся функций, Polypyus создаёт очень хорошие сопоставители.

Как установить

Polypyus требует Python 3 >= 3.6. Мы советуем использовать виртуальное окружение для следующей установки. Клонируйте этот репозиторий и в этой папке выполните:

pip install .

Как запустить

После установки доступны следующие команды:

  • polypyus-gui
  • polypyus-cli

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

Polypyus доступен через графический и командный интерфейс. Оба — GUI polypyus-gui и CLI polypyus-cli — принимают следующие аргументы при вызове:

  --verbose уровень подробности. По умолчанию показывает предупреждения -v показывает информацию -vv показывает отладочную информацию.
  --project задаёт расположение файла проекта. Это либо путь к файлу, либо ":memory:".
  --help    Показать справку.

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

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

Общий рабочий процесс GUI идёт слева направо в окне. Сначала в историю добавляются бинарники. Затем следуют аннотации символов к записям в истории. После этого можно добавить целевые бинарники. Для сопоставления нажмите Create matchers from history. После создания сопоставителей можно выбрать отдельные цели или сопоставить все цели, выбрав batch match. Наконец, результаты можно экспортировать в файл .csv.

Ниже вы можете увидеть демонстрационное видео, где Polypyus тратит всего несколько секунд на обучение по двум входным бинарникам, их аннотирование, создание сопоставителей и применение совпадений к новому бинарнику.

GUI Video

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

Преимущество использования CLI — возможность автоматизации. На данный момент формат вывода CLI может измениться. Тем не менее, вот пример его вызова:

polypyus-cli --history firmware/history/20819-A1.bin --annotation firmware/history/20819-A1_patch.elf --history firmware/history/20735B1.bin --annotation firmware/history/20735B1_patch.elf --project test.sqlite
polypyus-cli --target firmware/history/20739B1.bin --project test.sqlite

Первая команда создаёт test.sqlite как новый файл проекта и импортирует 20819-A1.bin и 20735B1.bin с соответствующими файлами patch.elf. Второй вызов использует тот же файл проекта и выполняет сопоставление с бинарником 20739B1.bin. Для каждой команды количество --history и --annotation должно совпадать. Эти две команды можно объединить в одну, добавив аргумент --target в первую команду.

Как это работает внутри?

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