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

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

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

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

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

Категории

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

polypyus

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

Репозиторий
232255 лет назадПроверено 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. Мы советуем использовать виртуальное окружение для следующей установки. Клонируйте этот репозиторий и в этой папке выполните:

root@kitploit:~
pip install .

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

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

  • polypyus-gui
  • polypyus-cli

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

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

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

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

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

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

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

GUI Video

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

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

root@kitploit:~
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 в первую команду.

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

Статья, объясняющая внутреннее устройство, была опубликована на семинаре Workshop on Binary Analysis Research (BAR) 2021 под названием Polypyus - The Firmware Historian. Некоторые дополнительные детали также содержатся в презентации магистерской диссертации Яна, которая охватывает проблемы, возникающие при работе с традиционными подходами бинарного сравнения в режиме ARM Thumb2, и объясняет, как работает альтернативный подход, основанный только на бинарниках.

Дополнительный экспорт и импорт информации о типах PDOM

Утекшие символы в формате patch.elf или .symdefs содержат только имена функций и глобальных переменных. Однако существуют также файлы проекта Eclipse .pdom в WICED Studio 6.2 и 6.4. Они содержат дополнительную информацию о типах. Eclipse использует их внутренне для автодополнения, поиска функций и т.д., и мы можем использовать их в обратном направлении для добавления информации о типах. Поскольку файлы .pdom содержат только частичную, кэшированную информацию, может быть полезно объединить несколько из них.

На первом шаге мы экспортируем информацию о типах из .pdom в базу данных SQLite. Экспорт занимает некоторое время, но его можно даже прервать и продолжить позже. Экспорт работает следующим образом:

root@kitploit:~
java -jar pdom/export/export.jar -P BCM20739-B0.1462220149391.pdom

Импорт PDOM ищет имена функций в базе данных IDA, находит их в PDOM для поиска информации о типах, а затем применяет эту информацию о типах в базе данных IDA. Таким образом, база данных IDA должна заранее содержать правильные имена функций. В принципе, их можно создать с помощью скриптов import_export из Polypyus. Однако несколько более продвинутые скрипты, поддерживающие импорт PDOM, также могут обрабатывать секции patch.elf. Запустите импорт следующим образом:

  • Откройте бинарный файл прошивки в IDA.
  • Установите режим Thumb в T=0x1 (Alt-g).
  • Установите параметры компилятора (Options -> Compiler...) в GNU C++.
  • Запустите файл скрипта pdom/import/main.py (File -> Script file).
  • Выберите файл patch.elf (Select file).
  • Импортируйте его (Import ELF). Через несколько секунд у вас будут секции и имена функций.
  • Выберите справочную базу данных, которая должна быть PDOM, соответствующим вашей прошивке.
  • Выберите несколько дополнительных баз данных, и импортёр выберет наилучшие комбинированные совпадения.
  • Импортируйте их (Import PDOM). Это займёт некоторое время.
  • Вы также можете импортировать файл аппаратных регистров 20739mapb0.h для именования аппаратных регистров (Import map.h).

Этот скрипт тестировался на IDA Pro 7.4 и 7.5.

Рекомендуемый рабочий процесс в IDA Pro

После некоторого внутреннего тестирования мы можем рекомендовать следующий рабочий процесс при работе с IDA Pro и Polypyus:

  • Создайте свежую базу данных. ARM v7 little endian, ARM Cortex M для Bluetooth-прошивки.
  • Отметьте позицию 0x0 как Thumb (Alt-g, T=0x1).
  • Создайте сегменты ROM и RAM. ROM с адреса 0x0 с правами rx, RAM с адреса 0x200000 с правами rwx (по крайней мере для Bluetooth-прошивки).
  • Создайте смещения таблицы векторов в ROM, хотя бы для вектора сброса, который представляет собой 4-байтовое смещение по адресу 0x4 (o). В прошивке CYW20735 он указывает на 0x3bc+1. Вернитесь на один байт назад и создайте функцию (p).
  • Дождитесь завершения автоанализа.
  • Импортируйте результаты Polypyus.
  • Запустите скрипты Thumbs Up.
  • Запустите как BinDiff, так и Diaphora. Последний желательно в версии IDA с декомпилятором. Используйте оба, так как они используют разные эвристики.

...теперь ваша база IDA может стать немного полезной :) В ARM Thumb2 дизассемблер всё ещё много где ошибается, но это намного лучше, чем то, что IDA делает сама по себе.

История Bluetooth-прошивок Broadcom

Папка firmware содержит различные прошивки с символами и без них. Всё в папке history содержит символы, всё в папке targets — без символов.

История
Цели

Для серии Samsung S8 также включает Note 8 и S8+ и т.д., а S10/S20 также включает всё от S10e до Note 20 5G.

Качество дампов может различаться, некоторые содержат RAM, а некоторые — только ROM. У нас есть доступ к большинству устройств из этого списка. Если вам нужен дамп с последними уровнями исправлений и включая RAM, обращайтесь к нам.

Несколько устройств, упомянутых в статье, не включены сюда, так как они могут не быть устройствами только для исследований и т.д. Также отсутствуют несколько iPhone и MacBook, поскольку у они есть как устройства только для исследований, но исходный дамп таковым не был. Эти устройства будут добавлены в ближайшее время :)

Участие в разработке

В этом репозитории есть файл .editorconfig. Он настраивает стиль отступов, кодировку и разделители строк. Следуйте этой конфигурации при участии, что можно упростить, используя плагин IDE для .editorconfig.

Как установить зависимости для тестирования и разработки

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

root@kitploit:~
pip install '.[test]'

это установит пакеты, которые нужны только для выполнения тестов.

Зависимости для разработки предоставляют, например, заглушки для типов пакетов. Для их установки выполните

root@kitploit:~
pip install '.[development]'

Тестирование

pytest запустит все тесты.

Локальное тестирование с разными версиями Python

Проект использует tox для локального запуска тестов с разными версиями Python. Tox настроен на тестирование с версиями 3.6, 3.7, 3.8 и 3.9. Для запуска tox установите зависимости для тестирования и установите эти 4 упомянутые версии Python. Наш рекомендуемый способ установки и управления несколькими версиями Python — pyenv.

Шаги:

  1. Установите Pyenv
  2. Установите Pyenv virtualenv
  3. Выполните
    root@kitploit:~
    pyenv install 3.9.1
    pyenv install 3.8.6
    pyenv install 3.7.9
    pyenv install 3.6.12
    pyenv virtualenv 3.9.1 polypyus
    penv local polypyus 3.8.6 3.7.9 3.6.12
    pip install '.[test]'
    pip install '.[development]'
    
  4. Выполните tox

Локальная автоматизация

Polypyus использует GitHub Actions для автоматического запуска тестов и некоторого линтинга. Если хотите, вы можете запускать шаги линтинга локально с помощью pre-commit git-хуков.

Каждый раз перед созданием нового коммита это вызовет линтинг и покажет проблемы, которые помешали бы этому коду пройти шаг линтинга в GitHub Actions. Также это форматирует изменённые файлы с помощью black.

root@kitploit:~
pip install '.[development]'
pre-commit install

Лицензия и благодарности

Мы благодарим Анну Штихлинг за создание логотипа Polypyus. Также благодарим Кристиана Блихмана и Джоксеана Корета за их отзывы.

Polypyus является открытым исходным кодом и распространяется под лицензией GPLv3.

Скачать инструмент
ЧипУстройствоДата сборкиСимволы
BCM20703A2MacBook/iMac 2016-2017Oct 22 2015✔
CYW20719B1Оценочная платаJan 17 2017✔
CYW20735B1Оценочная платаJan 18 2018✔
CYW20819A1Оценочная платаMay 22 2018✔
ЧипУстройствоДата сборкиСимволы
BCM2046A2iMac Late 20092007?-
BCM2070B0MacBook 2011, Thinkpad T420Jul 9 2008-
BCM20702A1USB-донгл AsusFeb (?) 2010-
BCM4345B0iPhone 6Jul 15 2013-
BCM4335C0Google Nexus 5Dec 11 2012-
BCM4345B0Google Nexus 6P / Galaxy S6Oct 23 2014-
BCM43430A1Raspberry Pi 3 and Zero WJun 2 2014-
BCM4345C0Raspberry Pi 3+ and 4Aug 19 2014-
BCM4347B0Samsung Galaxy S8 seriesJun 3 2016-
BCM4375B1Samsung Galaxy S10/20 seriesApr 13 2018-
BCM4378B1iPhone 11/SE2Oct 25 2018Строки