Geri qayıt
Mühəndis elektrik skuterini araşdırıb proqramını Rust-da yazdı
SiTech AI Team3 წთ. საკითხავი

Mühəndis elektrik skuterini araşdırıb proqramını Rust-da yazdı

Ben Simms Egret GT skuterinin CAN şinini və USB-C portunda gizlədilmiş əlaqəni araşdırıb, açıq sazlama portundan proqram təminatını çıxarıb və ekranın proqramını Rust-da yenidən yazıb.

Ben adı ilə yazan bir mühəndis Egret GT elektrik skuterinin tərs mühəndislik prosesini ətraflı təsvir edib: cihazla danışan Bluetooth tətbiqindən USB-C portunda gizlədilmiş CAN şininə, oradan da ekran bloku üçün Rust-da yazılmış yeni proqram təminatına qədər.

Keçən il alınan skuter 100 km məsafə vəd edir və sürəti, sürüş rejimini, batareya səviyyəsini və məsafəni göstərən 320x480 LCD ekranla təchiz olunub. Layihə kiçik bir narahatlıqla başlayıb: yanma zamanı klaviaturadakı “aşağı” düyməsini basılı saxlamaq skuteri proqram yeniləmə rejiminə keçirirdi və bu menyudan çıxmaq sürücünü PIN daxil etmədən normal sürüş rejiminə qaytarırdı. “Skuteri həmişə kifayət qədər yaxşı kilidlə bağlayıram, amma bu yenə də məni narahat edirdi” — deyə yazır.

Tətbiq, şin və standart olmayan USB-C

Mobil tətbiqin Bluetooth emalçılarının araşdırılması göstərdi ki, skuter proqram yeniləmələrini Bluetooth üzərindən alır və ekran, nəzarətçi və düymə paneli üçün ayrı hədəflər var. Cihaz həmçinin tətbiqdə və ekranda görünməyən məlumatları ötürür — hər sürüş rejimində keçirilən vaxt, mühərrik cərəyanı, batareya gərginliyi, şarj tarixçəsi — ümumi sürüş vaxtı, odometr və şarj tarixçəsini istehsalçıya göndərir və skuterin ID-si ilə bağlı saxlayır; tətbiq bunu aydın şəkildə bildirmir.

İstehsalçının telefon şarj portu kimi təqdim etdiyi USB-C çıxışında o, osiloskopla kontaktları yoxlayıb və ikisinin CAN şini daşıdığını görüb — onun təbirincə, “dəhşətli dərəcədə standart olmayan” həll. ESP32-C6, SN65HVD230 və MCP2515 ilə qeyd edici qurub trafiki xəritələdi: 0x300 mesajı sürüş rejimini və fara vəziyyətini, 0x306 qaz vəziyyətini, siqnal lampalarını və sürət limitini, 0x201 isə mühərrik sürətini və status bayraqlarını ötürür.

Söküb açma, proqramın çıxarılması və autentifikasiyanın olmaması

Ehtiyat nəzarətçi və ekran alan müəllif nəzarətçidəki komponentlərin işarələrinin silinmədiyini gördü, ehtimal olunan SWD portunu tapdı və proqramı OpenOCD ilə çıxardı; Ghidra-da analiz sabit ünvanlarda yükləyici, yeniləyici və əsas tətbiqi üzə çıxardı. Ekranı açmaq daha çətin idi; onun lövhəsində AT32F415 mikrodenetleyicisi, Bluetooth çipi, NFC oxuyucusu və yalnız interfeys şəkillərini saxlayan fləş yaddaşı var.

Yeniləmə prosesi də eyni dərəcədə açıq çıxdı: proqram CAN şini üzərindən heç bir kriptoqrafiya olmadan, doqquz kadra bölünmüş 64 baytlıq hissələrlə və CRC-16-CCITT yoxlaması ilə yazılır; ilk hissə yalnız fayl adını və proqramın uzunluğunu mətn şəklində daşıyır. O, yazıcı proqram yazdı, onu çıxardığı obrazla sınadı və ilk cəhddə işlədi. “Hər hansı skuterin proqramını autentifikasiya olmadan dəyişmək mümkündür” — deyə qeyd edir.

Rust-da aparat qatı

AT32F415 bir çipin klonu deyil, STM32 periferiyalarının qarışığı olduğu üçün o, Embassy çərçivəsi yerinə özü aparat abstraksiya qatını başqa bir tərtibatçının stm32-rs fork-u əsasında yazdı və saatları, taymerləri, ADC-ni, GPIO kəsilmələrini, UART, CAN və RTC-ni işə saldı. ST7796 ekranını mipidsi-nin paralel interfeysi idarə edir, xüsusi Bus tipi GPIOB-nin bütün 16 pinini bir əmrlə yazmağa imkan verir, deku tip təyinatları isə eyni strukturların CAN və Bluetooth kadrlarını deşifrə etməsinə şərait yaradır.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.