Энтузиаст под ником Ben разобрался во внутреннем устройстве электросамоката Egret GT и полностью заменил его заводскую прошивку собственной, написанной на языке Rust. Поводом стала уязвимость: защиту ПИН-кодом можно было обойти, а по ходу исследования выяснилось, что самокат ещё и отправляет данные на серверы производителя.
У Egret GT есть экран, на котором отображаются привычные показатели вроде скорости и заряда. Проблема обнаружилась именно в нём: можно было случайно перевести самокат в режим обновления прошивки, а оттуда перейти в рабочий режим, так и не введя защитный ПИН-код. Мириться с этим Ben не стал — он изучил протоколы обмена данными и переписал ПО с нуля. Свою мотивацию он объяснил с самоиронией: по его словам, ему просто необходимо сломать всё, что у него есть.
Что показал анализ приложения
Первым источником информации стало мобильное приложение самоката. Перехватить обмен данными по Bluetooth сравнительно несложно, а код мобильных приложений, как правило, поддаётся анализу без особых препятствий. Это позволило увидеть, какие команды и данные приложение отправляет самокату и получает от него.
Анализ дал два важных результата. Во-первых, самокат передаёт данные, которые вообще не выводятся на экран. Во-вторых, часть сведений уходит на серверы производителя с пометкой уникального идентификатора самоката. Иными словами, конкретное устройство можно отследить, а это ещё один весомый аргумент в пользу того, чтобы полностью заменить заводскую прошивку.
Шина CAN в разъёме USB-C
Внутри самоката модули общаются по шине CAN. Этот промышленный стандарт изначально создавали для автомобилей: он позволяет множеству блоков управления обмениваться короткими сообщениями по одной паре проводов и хорошо переносит электрические помехи. Чтобы расшифровать трафик, в ход пошли осциллограф и самодельный декодер CAN.
Неожиданной находкой стало то, что шина CAN выведена на контакты передачи данных порта USB-C. Официально этот разъём предназначен только для зарядки телефона, поэтому остаётся лишь гадать, как смартфон реагирует на посторонние сигналы на линиях данных, пока заряжается от самоката.
Три прошивки и переход на Rust
Выяснилось также, что обновления прошивки бывают как минимум трёх видов: отдельно для экрана, для панели управления и для главного контроллера. Разобраться в процессе обновления было принципиально важно: именно этот механизм в итоге позволил установить на самокат новую прошивку.
Выбор Rust для такого проекта выглядит логично. Этот язык компилируется в машинный код и подходит для встраиваемых систем, но при этом строго контролирует работу с памятью и на этапе компиляции отсекает целый класс ошибок, которые в прошивках на C нередко становятся источником сбоев и уязвимостей.
Для владельцев похожих самокатов подробное описание проекта — настоящая находка. Но и остальным оно будет полезно как детальный разбор всего процесса обратной разработки: многие инструменты и приёмы — от перехвата Bluetooth до анализа шины CAN осциллографом — применимы и в других проектах. Если же переписывать прошивку не хочется, есть и более радикальный путь: оставить сам самокат, но полностью заменить его электронику управления.



















