Почти все, кому надо и кому интересно, уже знакомы с 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