Как стать автором
Обновить
SM Lab
Рассказываем про ИТ в «Спортмастере»

Пишем UART-терминал для Flipper Zero

Время на прочтение3 мин
Количество просмотров7.1K

Почти все, кому надо и кому интересно, уже знакомы с Flipper Zero и знают, что это такое.

Для тех же, кто ещё не в курсе, приведу небольшое определение: Flipper Zero — это компактный цифровой мультитул для пентестеров и гиков. А ещё это тамагочи, в котором живет вполне себе дружелюбный кибер-дельфин.

Знакомство с дельфином

В августе прошлого года в одной из малиновых тусовок (канал в telegram по RaspberryPi) я как обычно пролистывал на большой скорости длинную «простыню» обсуждений. И тут мой глаз удивительным образов заметил хорошо знакомые слова — «Flipper Zero». Прочитав сообщение, я узнал, что сей девайс не просто уже существует, но и его можно, наконец, купить в России. 

В общем, и завертелось 😊

Какое-то время я провел с новой игрушкой, изучая ее возможности, но потом у меня всё же зачесались руки — я стал думать, чего бы ещё полезного можно добавить в такой мультитул для пентестера и гика. Гордо зваться пентестером я пока не могу, а вот к гикам себя вполне заслуженно отношу. И как гику мне во Флиппере очень не хватало UART-терминала.

Да, в стоковой прошивке flipper'а есть замечательный fap (гусары, молчать, это Flipper Application Package) «UART Echo». Он на скорости 115200 baud читает и принимает по uart и выводит на экран.

Но есть печаль — он не умеет слать пользовательские команды в uart и скроллить вывод. 

Судя по исходникам прошивки и плагинов, под Flipper принято писать на голом C, без плюсов, хотя разработчики сообщают, что давно уже можно писать и на С++. Сразу же скажу, что ранее вообще ничего не писал и не «ковырял» на C, поэтому прошу не судить строго.

Пишем UART-терминал

Все грандиозные дела у меня принято планировать на новогодние каникулы, так что терминал для Flipper постигла та же участь. Как уже писал выше, опыта в написании кода на C у меня не было и уж тем более под Flipper Zero. В интернетах документации по разработке под Flipper совсем немного, практически всю мудрость приходится черпать из исходников прошивки и плагинов. 

Но мир не без добрых людей, для старта есть замечательная статья «Сборка Hello World под Flipper Zero» от Павла Яковлева, за что ему огромное спасибо.

Меня как эникейщика и сисадмина в прошлом иногда преследуют старые фантомные боли привычки — поиск быстрого решения. Поэтому я решил для себя, что написать с нуля — это не мой путь. Ну, как минимум, прямо сейчас.

За основу своего UART_Terminal я взял код проекта WiFi Marauder companion, порядка 60% того, что мне было нужно, уже было реализовано в коде проекта, поэтому выражаю огромную благодарность разработчикам. 

Итак, имея основу, мне оставалось сделать вот что:

  • Выпилить все лишнее.

  • Добавить возможность выбора BaudRate (2400, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600).

  • Доработать инициализацию uart.

  • Сделать свою клавиатуру на основе стоковой.

  • Добавить быстрые команды (Fast cmd). 

Теперь конкретно по UART-терминалу:

UART_Terminal  — это приложение Flipper Zero для управления различными устройствами через интерфейс UART.

Возможности:

  • чтение лога и вывода команд по uart

  • отправка команд по uart

  • установка скорости uart

  • быстрые команды

Подключение:

По умолчанию uart инициализируется на скорости 115200 baud, сразу после запуска.

Быстрые команды. Так как набор текста на flipper'е — занятие не из самых приятных, предусмотрен набор быстрых команд (help, uptime, date, df -h, ps, dmesg, reboot, poweroff).

Клавиатура. В проекте, который был взят мною за основу, для ввода команд вызывалась встроенная в прошивку flipper'а клавиатура. Родная клавиатура содержит только буквы, цифры, пробел и подчеркивание. 

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

В общем, так как родная клавиатура не рассчитана на работу в терминале, мне пришлось скопировать ее код себе в проект, доработать, и вызывать уже свою клавиатуру для ввода команд.

Чтобы разместить больше символов на таком маленьком дисплее, некоторые символы вызываются удерживанием.

Изначально делал только для себя. Как только у меня получилась плюс-минус рабочая версия, я снял на видео процесс работы и выложил в групповой чат telegram сообщества Flipper Zero. Некоторым участникам сообщества идея и ее реализация показались интересными, они попросили поделиться исходным кодом проекта. Так что это моя первая публикация на Хабр и GitHub 😊

Резюмируя

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

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

Ссылка на проект

Я в github и telegram @cool4uma

Теги:
Хабы:
Всего голосов 40: ↑40 и ↓0+38
Комментарии7

Публикации

Информация

Сайт
xn----8sbd2bd3a.xn--p1ai
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
Алина Айсина