
Реализуйте собственное USB-устройство на Python с поддержкой аппаратного периферийного устройства, такого как Cynthion или GreatFET
Этот репозиторий содержит следующее поколение программного обеспечения Facedancer. Происходя от оригинального Facedancer на базе GoodFET, этот репозиторий предоставляет модуль Python, обеспечивающий расширенную поддержку Facedancer — включая поддержку нескольких плат и некоторые весьма значительные новые возможности.
Документация Facedancer размещена на Read the Docs. Исходные тексты документации находятся в папке docs/.
Установите этот пакет следующей командой:
pip install facedancer
После этого вы можете импортировать пакет facedancer как обычно:
$ python
>>> import facedancer
Facedancer 3.0 — это полностью переписанное с нуля ядро эмуляции, и оно не поддерживает устаревшие скрипты.
Если вы используете скрипты или учебные материалы, которые зависят от возможностей
или API, устаревших в v3.0.x, вы можете установить последний выпуск v2.9.x
Facedancer с помощью:
pip install "facedancer<=3"
Устаревшие апплеты и примеры можно найти в ветке v2.9.x.
Платы Facedancer — это простые аппаратные устройства, которые действуют как USB-контроллеры с «удалённым управлением». С соответствующим программным обеспечением вы можете использовать эти платы для быстрой и лёгкой эмуляции USB-устройств — и для фаззинга USB-хост-контроллеров!
Этот конкретный репозиторий программного обеспечения в настоящее время позволяет легко создавать эмуляции USB-устройств на Python. Управление достаточно детализировано, чтобы вы могли вызывать всевозможные некорректные поведения USB. :)
Для получения дополнительной информации см.:
Основная новая возможность более новой кодовой базы Facedancer — это способность выполнять MITM (Meddler-In-The-Middle) для USB-соединений — заменяя один из оригинальных проектов авторов USBProxy. Это открывает целую новую область применений — включая анализ протоколов и манипуляцию USB-пакетами в реальном времени — и особенно полезно, когда вы не контролируете программное обеспечение, работающее на целевом устройстве (например, на встраиваемых системах или игровых консолях).
+-----------------------------------------------------------------------+
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| | | | | | | | | |
| PROXIED | | | HOST COMPUTER | | FACEDANCER DEVICE | | | TARGET USB |
| DEVICE <------> running Facedancer software <---> acts as USB-Controlled <------> HOST |
| | | | | | USB Controller | | | |
| | | | | | | | | |
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| |
| MITM Setup (HOST + FACEDANCER) |
+-----------------------------------------------------------------------+
Эта возможность завершена, но не помешало бы больше документации. Pull request'ы приветствуются. :)
Сначала вам, вероятно, захочется задать переменную окружения BACKEND, которая сообщает
программному обеспечению, какой тип платы Facedancer вы хотите использовать. Если эта переменная
не задана, программное обеспечение попытается угадать за вас на основе того, что подключено. Оно не
всегда делает наилучшие предположения, так что вам, вероятно, лучше задать её самостоятельно.
Далее вам, вероятно, захочется посмотреть один из примеров или один из готовых скриптов.
Примеры с новым синтаксисом находятся в examples. Основные скрипты Facedancer со
«старым» синтаксисом находятся в legacy-applets.
Например:
export BACKEND=greatfet
./examples/rubber-ducky.py
BACKEND=cynthion)BACKEND=greatfet)BACKEND=greatfet)BACKEND=greatfet)BACKEND=goodfet)BACKEND=raspdancer)BACKEND=hydradancer)Обратите внимание, что аппаратные ограничения не позволяют платам MAX3420/MAX3421 эмулировать более сложные устройства — существуют ограничения на количество/тип конечных точек, которые можно настроить. Платы LPC4330 — такие как GreatFET — имеют меньше ограничений.
По аналогичной причине платы MAX3420/MAX3421 (BACKEND=goodfet или BACKEND=raspdancer)
в настоящее время не могут использоваться в качестве MITM-устройств USBProxy-nv. Все современные платы (BACKEND=greatfet, BACKEND=hydradancer)
должны быть полностью функциональны.
Обратите внимание, что платы HydraDancer и HydraUSB3 (BACKEND=hydradancer) в настоящее время не поддерживают режим хоста.
Также учтите, что фактически FaceDancer 3.0 не работает на Windows (некоторые проблемы в pyusb...) и только на GNU/Linux
Дорожная карта находится в разработке, но в дополнение к поддержке нескольких плат этот репозиторий в конечном итоге станет домом для некоторых классных новых возможностей, включая:
Есть много людей, которых можно винить за великолепие этого репозитория, включая:
... всегда приветствуется. Присылайте нам PR!