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

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

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

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

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

Категории

Все категории
Loading categories
pyFlipper — Python CLI-обёртка для Flipper Zero | Kitploit
Инструменты/GitHubGitHub/wh00hw/pyflipper
Безопасность BluetoothБезопасность IoTИнструменты RFID/NFCБезопасность беспроводных сетейАппаратный ХакингТестирование на ПроникновениеУтилиты и фреймворкиБезопасность оборудования и IoTRed Teaming
GitHubwh00hw/pyflipper

pyFlipper

Python CLI-обёртка для Flipper Zero

438491 месяц назадПроверено Kitploit

Популярное

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

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

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

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

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

PyFlipper

Flipper Zero — Python CLI-обёртка

Статьи

  • Как взломать ресторан

Функции и характеристики:

  • Обёртка для последовательного CLI Flipper
  • Интерфейс клиента WebSocket
  • Обычный TCP-интерфейс

Что нового (совместимость с прошивкой 1.x)

Этот релиз приводит обёртку в соответствие с текущим CLI Flipper Zero (проверено на реальном оборудовании, прошивка unlshd-089e):

  • Новый модуль info: flipper.info.device_info() / power_info() / power_debug_info() (современные команды info device / info power).
  • power info → info power: flipper.power.info() продолжает работать и теперь под капотом читает info power. Добавлены flipper.power.otg_on()/otg_off().
  • date: используйте flipper.date.datetime(); разбор был исправлен для текущего формата вывода.
  • Storage: размеры разбираются как в KB, так и в KiB, read() теперь возвращает полное многострочное содержимое файла, а карты exFAT / с пустой меткой разбираются корректно (исправляет #21).
  • Infrared: список протоколов читается в реальном времени из прошивки, поэтому NECext, Kaseikyo, RCA, Pioneer, … поддерживаются автоматически (исправляет #15). Новый flipper.ir.protocols().
  • debug → sysctl debug, subghz tx/rx получили обязательный аргумент device, bt hci_info без изменений.
  • NFC переписан для текущего интерактивного подшелла (scan, dump, emulate, field, apdu, raw, mfu) с утилитами кэша ключей Mifare Classic для каждого UID (import_nfc_keys, write_key_cache).
  • Унифицированный слой последовательной передачи (последовательный порт / websocket / TCP) с обработкой ANSI-escape для текущей оболочки, плюс тестовый набор без оборудования.
  • Удалено из стандартной прошивки (оставлено для пользовательских прошивок, которые всё ещё включают их): ps (→ top), music_player, nfc detect.

Инструкции по установке:

root@kitploit:~
$ pip install pyflipper

Протестировано на:

  • Python 3.8.10 на Linux 5.4.0 x86_64
  • Python 3.9.10 на Windows 10
  • Python 3.10.5 на Android 12 (Termux + OTGSerial2WebSocket НЕ ТРЕБУЕТСЯ ROOT)
  • Python 3.12 на Linux (прошивка unlshd-089e)

Использование/Примеры

Подключение

root@kitploit:~
from pyflipper import PyFlipper

# Локальный последовательный порт
flipper = PyFlipper(com="/dev/ttyACM0")

# ИЛИ

# Удалённый сервер serial2websocket
flipper = PyFlipper(ws="ws://192.168.1.5:1337")

# TCP
flipper = PyFlipper(tcp='192.168.89.222:22170')

Питание

root@kitploit:~
# Информация (на текущей прошивке под капотом читает `info power`)
info = flipper.power.info()

# Выключение
flipper.power.off()

# Перезагрузка
flipper.power.reboot()

# Перезагрузка в режиме DFU
flipper.power.reboot2dfu()

# Включение/выключение вывода 5V OTG на пине GPIO
flipper.power.otg_on()
flipper.power.otg_off()

Обновление/Резервное копирование

root@kitploit:~
# Установка обновления из файла .fuf
flipper.update.install(fuf_file="/ext/update.fuf")

# Резервное копирование Flipper в файл .tar
flipper.update.backup(dest_tar_file="/ext/backup.tar")

# Восстановление Flipper из резервного .tar файла
flipper.update.restore(bak_tar_file="/ext/backup.tar")

Загрузчик

root@kitploit:~
# Список установленных приложений
apps = flipper.loader.list()

# Открыть приложение
flipper.loader.open(app_name="Clock")

Информация о Flipper

root@kitploit:~
# Получить дату Flipper (объект datetime)
date = flipper.date.datetime()

# Получить метку времени Flipper
timestamp = flipper.date.timestamp()

# Получить словарь информации об устройстве (текущая прошивка `info device`, ключи через точку)
device_info = flipper.info.device_info()

# Получить словарь информации о питании (текущая прошивка `info power`)
power_info = flipper.info.power_info()

# Расширенная отладочная информация о питании/датчике
power_debug = flipper.info.power_debug_info()

# Устаревшая команда `device_info` (ключи с подчёркиваниями, всё ещё поддерживается)
legacy_info = flipper.device_info.info()

# Получить словарь информации о куче
heap = flipper.free.info()

# Получить строку free_blocks
free_blocks = flipper.free.blocks()

# Получить информацию Bluetooth
bt_info = flipper.bt.info()

Совместимость прошивок. Эта библиотека теперь нацелена на текущий CLI Flipper Zero (прошивка 1.x, проверено на Unleashed unlshd-089e). Некоторые устаревшие команды были удалены из официальной прошивки и поэтому больше не доступны: ps (заменён интерактивным top), music_player и nfc detect (NFC теперь интерактивный подшелл). power info перемещён в info power, debug перемещён в sysctl debug, а storage теперь сообщает размеры в KiB — всё обрабатывается прозрачно обёртками выше.

Хранилище

Информация о файловой системе

root@kitploit:~
# Получить информацию о файловой системе хранилища
ext_info = flipper.storage.info(fs="/ext")

Проводник

root@kitploit:~
# Получить словарь содержимого /ext
ext_list = flipper.storage.list(path="/ext")

# Получить дерево каталогов /ext
ext_tree = flipper.storage.tree(path="/ext")

# Получить информацию о файле
file_info = flipper.storage.stat(file="/ext/foo/bar.txt")

# Создать каталог
flipper.storage.mkdir(new_dir="/ext/foo")

Файлы

root@kitploit:~
# Прочитать файл
plain_text = flipper.storage.read(file="/ext/foo/bar.txt")

# Удалить файл
flipper.storage.remove(file="/ext/foo/bar.txt")

# Скопировать файл
flipper.storage.copy(src="/ext/foo/source.txt", dest="/ext/bar/destination.txt")

# Переименовать файл
flipper.storage.rename(file="/ext/foo/bar.txt", new_file="/ext/foo/rab.txt")

# MD5-хеш файла
md5_hash = flipper.storage.md5(file="/ext/foo/bar.txt")

# Записать файл одним блоком
file = "/ext/bar.txt"

text = """There are many variations of passages of Lorem Ipsum available, 
but the majority have suffered alteration in some form, by injected humour, 
or randomised words which don't look even slightly believable. 
If you are going to use a passage of Lorem Ipsum, 
you need to be sure there isn't anything embarrassing hidden in the middle of text. 
"""

flipper.storage.write.file(path=file, text=text)

# Записать файл с помощью слушателя
file = "/ext/foo.txt"

text_one = """There are many variations of passages of Lorem Ipsum available, 
but the majority have suffered alteration in some form, by injected humour, 
or randomised words which don't look even slightly believable. 
If you are going to use a passage of Lorem Ipsum, 
you need to be sure there isn't anything embarrassing hidden in the middle of text. 
"""

flipper.storage.write.start(file)

time.sleep(2)

flipper.storage.write.send(text_one)

text_two = """All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as 
necessary, making this the first true generator on the Internet.
 It uses a dictionary of over 200 Latin words, combined with a handful of 
 model sentence structures, to generate Lorem Ipsum which looks reasonable. 
The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
"""
flipper.storage.write.send(text_two)

time.sleep(3)

# Не забудьте остановить
flipper.storage.write.stop()

LED/Подсветка

root@kitploit:~
# Установить общий светодиод (r,b,g,bl)
flipper.led.set(led='r', value=255)

# Выключить синий светодиод
flipper.led.blue(value=0)

# Установить значение зелёного светодиода
flipper.led.green(value=175)

# Включить подсветку
flipper.led.backlight_on()

# Выключить подсветку
flipper.led.backlight_off()

# Выключить все светодиоды
flipper.led.off()

Вибро

root@kitploit:~
# Включить/выключить вибро (True или False)
flipper.vibro.set(True)

# Включить вибро
flipper.vibro.on()

# Выключить вибро
flipper.vibro.off()

GPIO

root@kitploit:~
# Установить режим GPIO: 0 - вход, 1 - выход
flipper.gpio.mode(pin_name=PIN_NAME, value=1)

# Установить значение пина GPIO: 0 - выкл, 1 - вкл
flipper.gpio.set(pin_name=PIN_NAME, value=1)

# Прочитать значение пина GPIO
flipper.gpio.read(pin_name=PIN_NAME)

MusicPlayer

⚠️ Удалено из официальной прошивки. Команда CLI music_player была удалена из стандартной прошивки (приложение теперь отдельный .fap). Эти вызовы всё ещё работают на пользовательских прошивках, которые сохраняют команду (например, сборки Unleashed / RogueMaster, включающие её); на стандартной прошивке они возвращают ответ "command not found".

root@kitploit:~
# Воспроизвести песню в формате RTTTL
rttl_song = "Littleroot Town - Pokemon:d=4,o=5,b=100:8c5,8f5,8g5,4a5,8p,8g5,8a5,8g5,8a5,8a#5,8p,4c6,8d6,8a5,8g5,8a5,8c#6,4d6,4e6,4d6,8a5,8g5,8f5,8e5,8f5,8a5,4d6,8d5,8e5,2f5,8c6,8a#5,8a#5,8a5,2f5,8d6,8a5,8a5,8g5,2f5,8p,8f5,8d5,8f5,8e5,4e5,8f5,8g5"

# Воспроизвести в цикле
flipper.music_player.play(rtttl_code=rttl_song)

# Остановить цикл
flipper.music_player.stop()

# Воспроизвести 20 секунд
flipper.music_player.play(rtttl_code=rttl_song, duration=20)

# Пикнуть
flipper.music_player.beep()

# Пикнуть 5 секунд
flipper.music_player.beep(duration=5)

NFC

На текущей прошивке NFC — это интерактивный подшелл (scanner, dump, emulate, field, apdu, raw, mfu). Эта обёртка входит в подшелл, выполняет одну команду и выходит, поэтому каждый метод является обычным блокирующим вызовом. detect() сохранён как псевдоним scan().

root@kitploit:~
# Определить тип метки -> {'protocols': ['Mifare Classic'], 'raw': '...'} или None
tag = flipper.nfc.scan(timeout=5)

# Включить поле NFC на несколько секунд
flipper.nfc.field(timeout=3)

# Отправить APDU (ISO14443-4 / ISO15693-3); протокол определяется автоматически, если опущен
resp = flipper.nfc.apdu(["00A4 04 00", "A0 00"], protocol="14_4a")

# Отправить сырые байты с добавлением CRC
flipper.nfc.raw("93 20", protocol="14a", crc=True)

# Утилиты для Mifare Ultralight
info = flipper.nfc.mfu_info()
block4 = flipper.nfc.mfu_read_block(4)
flipper.nfc.mfu_write_block(4, "00 01 02 03")

# Эмулировать сохранённый .nfc файл
flipper.nfc.emulate(file="/ext/nfc/mycard.nfc", timeout=10)

Дампинг Mifare Classic через CLI

Команда CLI dump не выполняет атаку по словарю: она читает ключи из кэша для каждого UID по пути /ext/nfc/.cache/<UID>.keys (файл, который GUI записывает после успешного чтения). Если кэш отсутствует, dump возвращает "failed to read". Вы можете (пере)создать его из существующего дампа Flipper .nfc — ключи берутся из каждого секторного трейлера:

root@kitploit:~
# Загрузить ключи из родного .nfc дампа в кэш ключей для данного UID
uid, cache_path = flipper.nfc.import_nfc_keys("/path/to/card.nfc")

# Теперь CLI dump может прочитать карту (токены протоколов: mfc, mfu, 14_4a, ...)
flipper.nfc.dump(protocol="mfc", file="/ext/nfc/card_dump.nfc")

RFID

root@kitploit:~
# Синхронно, таймаут по умолчанию 5 секунд

# Чтение RFID
rfid = flipper.rfid.read()

# Эмуляция RFID
emulated = flipper.rfid.emulate(key_type="EM4100", key_data="5500824806")

# Запись RFID
written = flipper.rfid.write(key_type="EM4100", key_data="5500824806")

SubGhz

root@kitploit:~
# Передать hex_key N раз (по умолчанию count=10, device=0 -> CC1101_INT, 1 -> CC1101_EXT)
flipper.subghz.tx(hex_key="DEADBEEF", frequency=433920000, count=5, device=0)

# Приём (по умолчанию frequency=433920000 device=0 raw=False timeout=5 секунд)
received = flipper.subghz.rx(frequency=433920000, device=0, raw=True, timeout=10)

# Повтор записанной передачи
flipper.subghz.tx_from_file("/ext/subghz/foo.sub")

# Декодировать сырой .sub файл
decoded = flipper.subghz.decode_raw(sub_file="/ext/subghz/foo.sub")

Инфракрасный

root@kitploit:~
# Список протоколов, поддерживаемых подключённой прошивкой (читается в реальном времени из `ir help`)
protocols = flipper.ir.protocols()

# Передать hex_address и hex_command с выбором протокола
flipper.ir.tx(protocol="Samsung32", hex_address="C000FFEE", hex_command="DEADBEEF")

# NECext теперь поддерживается (список протоколов читается из прошивки, не захардкожен)
flipper.ir.tx(protocol="NECext", hex_address="EF00", hex_command="FD02")

# Примеры сырой передачи
flipper.ir.tx_raw(frequency=38000, duty_cycle=0.33, samples=[1337, 8888, 3000, 5555])

# Синхронно, таймаут по умолчанию 5 секунд
# Приём сигнала
r = flipper.ir.rx(timeout=10)

IKEY

root@kitploit:~
# Чтение (таймаут по умолчанию 5 секунд)
ikey = flipper.ikey.read()

# Запись (таймаут по умолчанию 5 секунд)
flipper.ikey.write(key_type="Dallas", key_data="DEADBEEFCOOOFFEE")

# Эмуляция (таймаут по умолчанию 5 секунд)
flipper.ikey.emulate(key_type="Dallas", key_data="DEADBEEFCOOOFFEE")

Журнал

root@kitploit:~
# Подключить регистратор событий (таймаут по умолчанию 10 секунд)
logs = flipper.log.attach()

Отладка

root@kitploit:~
# Включить режим отладки (выполняет `sysctl debug 1` на текущей прошивке)
flipper.debug.on()

# Выключить режим отладки
flipper.debug.off()

Onewire

root@kitploit:~
# Поиск
response = flipper.onewire.search()

I2C

root@kitploit:~
# Получить
response = flipper.i2c.get()

Ввод

root@kitploit:~
# Дампинг ввода
dump = flipper.input.dump()

# Отправить ввод
flipper.input.send("up", "press")

Тесты

Набор разделён на две части:

  • Тесты без оборудования (test_serial_wrapper.py, test_commands.py) работают везде — они тестируют библиотеку с помощью симулированного последовательного порта (tests/fake_serial.py), который воспроизводит фрейминг CLI Flipper, поэтому устройство не требуется. Эти тесты выполняются в CI.
  • Интеграционные тесты с оборудованием (test_hardware.py) общаются с реальным Flipper и пропускаются автоматически, когда устройство не подключено. Установите FLIPPER_COM=/dev/ttyACM0, чтобы закрепить конкретный порт.
root@kitploit:~
# Всё (тесты с оборудованием пропускаются сами, если Flipper не подключён)
python -m unittest discover -s tests -p "test_*.py" -v

# Только тесты без оборудования
python -m unittest tests.test_serial_wrapper tests.test_commands -v

Оптимизации

Не стесняйтесь вносить вклад любым способом

  • Оркестратор потоков очереди
  • Реализовать все функции CLI
  • Асинхронный SubGhz Chat

Лицензия

MIT

Купить мне пиво

ZEC: zs13zdde4mu5rj5yjm2kt6al5yxz2qjjjgxau9zaxs6np9ldxj65cepfyw55qvfp9v8cvd725f7tz7

ETH: 0xef3cF1Eb85382EdEEE10A2df2b348866a35C6A54

BTC: 15umRZXBzgUacwLVgpLPoa2gv7MyoTrKat

Контакты

  • Discord: white_rabbit#4124
  • Twitter: @nic_whr
  • GPG: 0x94EDEADC
Скачать инструмент