Վերադառնալ
Ինժեները ռևերս-ինժեներիայի է ենթարկել էլեկտրասկուտերը և firmware-ը գրել Rust-ով
SiTech AI Team3 წთ. საკითხავი

Ինժեները ռևերս-ինժեներիայի է ենթարկել էլեկտրասկուտերը և firmware-ը գրել Rust-ով

Բեն Սիմսը հետազոտել է իր Egret GT էլեկտրասկուտերի CAN-ավտոբուսը, բաց վրիպազերծման պորտով դուրս բերել firmware-ը և էկրանի ծրագրաշարը նորովի գրել Rust-ով. թարմացումները որևէ նույնականացում չեն պահանջում։

Բեն անունով ինժեները մանրամասն նկարագրել է, թե ինչպես ռևերս-ինժեներիայի է ենթարկել իր Egret GT էլեկտրասկուտերը. սկսել է Bluetooth հավելվածից, անցել USB-C պորտի մեջ թաքնված CAN-ավտոբուսին, ապա էկրանի բլոկի համար նոր firmware գրել Rust-ով։

Անցյալ տարի գնված սկուտերը հայտարարում է 100 կմ անցագնացություն և ունի 320x480 LCD էկրան, որը ցույց է տալիս արագությունը, շարժման ռեժիմը, մարտկոցի մակարդակը և անցագնացությունը։ Ծրագիրն սկսվել է փոքր անհարմարությունից. ստեղնաշարի «վար» կոճակը պահելով սկուտերը միացնելիս այն անցնում էր firmware-ի թարմացման ռեժիմի, իսկ այդ ընտրացանկից դուրս գալը վարորդին վերադարձնում էր սովորական ռեժիմ՝ առանց PIN-ի։ «Սկուտերը միշտ բավական լավ կողպեքով եմ ամրացնում, բայց դա ինձ միևնույն է անհանգստացնում էր», – գրում է նա։

Հավելվածը, ավտոբուսը և ոչ ստանդարտ USB-C-ն

Բջջային հավելվածի Bluetooth մշակիչների ուսումնասիրությունը ցույց տվեց, որ սկուտերը firmware-ի թարմացումներ ստանում է Bluetooth-ով՝ առանձին էկրանի, կառավարման բլոկի և կոճակների վահանակի համար։ Այն նաև փոխանցում է տվյալներ, որոնք չեն երևում ո՛չ հավելվածում, ո՛չ էկրանին՝ յուրաքանչյուր ռեժիմում անցկացրած ժամանակը, շարժիչի հոսանքը, մարտկոցի լարումը, լիցքավորման պատմությունը. ընդհանուր վարելու ժամանակը, օդոմետրը և լիցքավորման պատմությունը ուղարկվում են արտադրողին և պահվում սկուտերի ID-ին կապված, ինչի մասին հավելվածում հստակ չի նշվում։

Էկրանի USB-C պորտում, որը արտադրողը ներկայացնում է որպես հեռախոսների լիցքավորման պորտ, նա օսցիլոսկոպով ստուգեց կոնտակտները և պարզեց, որ դրանցից երկուսը CAN-ավտոբուս են փոխանցում՝ իր բնորոշմամբ «սարսափելի ոչ ստանդարտ» լուծում։ ESP32-C6-ի, SN65HVD230-ի և MCP2515-ի միջոցով նա հավաքեց լոգեր և քարտեզագրեց հաղորդագրությունները. 0x300-ը փոխանցում է շարժման ռեժիմն ու լուսարձակի վիճակը, 0x306-ը՝ արագացման բռնակի դիրքը, ցուցիչները և արագության սահմանը։

Ապամոնտաժում, firmware-ի արտահանում և նույնականացման բացակայություն

Գնելով պահեստային կառավարման բլոկ և էկրան՝ նա տեսավ, որ կառավարման բլոկի չիպերի մակնշումները ջնջված չեն, գտավ SWD պորտը և OpenOCD-ով դուրս բերեց firmware-ը. Ghidra-ում վերլուծությունը բացահայտեց բոտլոդեր, թարմացման մոդուլ և հիմնական հավելված՝ ֆիքսված հասցեներով։ Էկրանը բացելն ավելի դժվար էր. նրա տախտակի վրա AT32F415 միկրոկառավարիչ է, Bluetooth չիպ, NFC ընթերցիչ և ֆլեշ հիշողություն, որտեղ պահվում են միայն ինտերֆեյսի պատկերները։

Թարմացման գործընթացը նույնպես բաց էր. firmware-ը CAN-ավտոբուսով գրվում է առանց որևէ գաղտնագրության՝ 64 բայթանոց մասերով, ինը կադրերում, CRC-16-CCITT ստուգմամբ, ընդ որում առաջին մասը պարունակում է միայն ֆայլի անունը և firmware-ի երկարությունը՝ որպես տեքստ։ Նա գրեց գրանցիչ, ստուգեց այն դուրս բերված firmware-ով, և այն աշխատեց առաջին իսկ փորձից։ «Ցանկացած սկուտերի firmware կարելի է փոխել առանց նույնականացման», – նշում է նա։

Ապարատային շերտ Rust-ով

AT32F415-ը մեկ չիպի կլոն չէր, այլ STM32 պերիֆերիաների խառնուրդ, ուստի Embassy-ի փոխարեն նա ինքը գրեց ապարատային աբստրակցիայի շերտ՝ հիմնվելով մեկ այլ ծրագրավորողի stm32-rs պատառաքաղի վրա, և աշխատեցրեց ժամացույցները, թայմերները, ADC-ն, GPIO ընդհատումները, UART-ը, CAN-ը և RTC-ն։ ST7796 էկրանը կառավարվում է mipidsi-ի զուգահեռ ինտերֆեյսով, Bus տիպը թույլ է տալիս GPIOB-ի բոլոր 16 փիները մեկ հրահանգով գրել, իսկ deku-ի տիպերը նույն կառուցվածքներով վերծանում են CAN-ի և Bluetooth-ի կադրերը։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։