უკან დაბრუნება
ინჟინერმა ელექტრო სკუტერის firmware Rust-ზე თავიდან დაწერა
SiTech AI Team2 წთ. საკითხავი

ინჟინერმა ელექტრო სკუტერის firmware Rust-ზე თავიდან დაწერა

ბენ სიმსმა Egret GT ელექტრო სკუტერის CAN-მაგისტრალი, USB-C პორტში დამალული კავშირი და ავტორიზაციის გარეშე მისაწვდომი firmware-ის განახლება აღწერა, შემდეგ კი ეკრანის 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 — ამჩქარებლის პოზიციას, მაჩვენებლებსა და სიჩქარის ლიმიტს, 0x201 კი ძრავის სიჩქარესა და სტატუსის ბიტებს.

დაშლა, 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 ტიპი საშუალებას იძლევა 16-ვე GPIOB პინი ერთ ინსტრუქციაში ჩაიწეროს, deku-ს ტიპები კი CAN-ისა და Bluetooth-ის ჩარჩოებს აშიფრავს.

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.