
Виникла типова для Hackaday ситуація: є електросамокат Egret GT з дисплеєм, що показує стандартні дані. Однак, існувала проблема: можна було випадково увійти в режим оновлення прошивки, а з нього — в робочий режим без введення PIN-коду безпеки. Автор не міг цього залишити, тому провів реверс-інжиніринг протоколу та переписав прошивку на Rust. Як він зазначив: «…тому що я мушу зламати… все, що мені належить…». Ми розуміємо.
Мобільний додаток був корисним для отримання базової інформації, оскільки перехоплення Bluetooth є досить простим, а аналіз коду мобільних додатків — більш-менш прямолінійним. Аналіз виявив деякі дані, які не відображаються на дисплеї, і те, що декілька параметрів надсилаються назад до центрального сервера з унікальним ідентифікатором самоката — це стало ще однією причиною для повної заміни прошивки.
Внутрішньо самокат використовує CAN Bus, тому автор дістав осцилограф і саморобний декодер CAN. На подив, CAN bus доступний на пінах даних порту USB-C. Офіційно порт призначений лише для зарядки телефонів, тому варто задуматися, що думає ваш телефон про сторонні сигнали на пінах даних під час зарядки.
Оновлення прошивки фактично постачаються щонайменше у трьох варіантах: для дисплея, панелі введення та основного контролера. Реверс-інжиніринг процесу оновлення прошивки був ключовим для встановлення нової прошивки.
Якщо ви є власником подібного самоката, цей допис — справжній скарб. Якщо ні — це все одно дуже детальний розбір робочого процесу реверс-інжинірингу, і ви можете застосувати багато згаданих інструментів і технік до свого наступного проєкту.
