العودة
مهندس يعكس هندسة سكوتر كهربائي ويكتب برنامجه الداخلي بلغة Rust
SiTech AI Team3 წთ. საკითხავი

مهندس يعكس هندسة سكوتر كهربائي ويكتب برنامجه الداخلي بلغة Rust

درس بن سيمز ناقل CAN في سكوتره Egret GT، واستخرج البرنامج الداخلي عبر منفذ تصحيح مفتوح، ثم كتب برنامجاً جديداً لشاشة السكوتر بلغة Rust بعد اكتشاف أن التحديثات بلا أي مصادقة.

نشر مهندس يُعرف باسم بن وصفاً مفصلاً لعملية عكس هندسة سكوتره الكهربائي Egret GT: بدءاً من تطبيق Bluetooth الذي يتحدث معه، مروراً بناقل CAN المخبأ داخل منفذ USB-C، وانتهاءً ببرنامج داخلي جديد لوحدة الشاشة مكتوب بلغة Rust.

السكوتر، الذي اشتراه العام الماضي، يعلن مدى 100 كيلومتر ويملك شاشة LCD بدقة 320x480 تعمل كشاشة عرض أمامية للسرعة ووضع القيادة ومستوى البطارية والمدى. بدأ المشروع من إزعاج صغير: الضغط المطوّل على زر «الأسفل» في لوحة المفاتيح أثناء تشغيل السكوتر يدخله في وضع تحديث البرنامج الداخلي، والخروج من هذه القائمة يعيد الراكب إلى وضع القيادة العادي دون طلب رمز PIN. ويكتب: «أربط السكوتر دائماً بقفل جيد إلى حد معقول، لكن هذا أزعجني رغم ذلك».

التطبيق والناقل ومنفذ USB-C غير المطابق للمعيار

أظهر فحص معالجات Bluetooth في تطبيق الهاتف أن السكوتر يستقبل تحديثات البرنامج الداخلي عبر Bluetooth، بأهداف منفصلة للشاشة ووحدة التحكم ولوحة الأزرار. كما يرسل بيانات لا تظهر في التطبيق ولا على الشاشة — الوقت في كل وضع قيادة، ودرجة حرارة الجهاز، وتيار المحرك، وجهد البطارية، وسجل الشحن — ويرسل إجمالي زمن القيادة وعدّاد المسافة وسجل الشحن إلى الشركة المصنّعة حيث تُخزَّن مرتبطة بمعرّف السكوتر، وهو ما لا يوضحه التطبيق صراحة. ولا يعرف السكوتر رقم تعريفه إلا بعد أن يضبطه التطبيق؛ ولم تؤدِّ محاولة انتحال رقم VIN للطراز الأسرع (45 كم/س) إلى إلغاء حدّ السرعة.

وفي منفذ USB-C الخاص بالشاشة، الذي تصفه الشركة بمنفذ شحن للهواتف، فحص الكاتب المخارج براسم الإشارة فوجد أن اثنين منها يحملان ناقل CAN — وهو استخدام يصفه بأنه «مخالف للمعيار بشكل مروّع». وباستخدام ESP32-C6 وSN65HVD230 وMCP2515 بنى مسجّلاً ورسم خريطة الرسائل: الرسالة 0x300 تحمل وضع القيادة وحالة المصباح، و0x306 موضع دواسة السرعة والمؤشرات وحدّ السرعة، و0x201 سرعة المحرك وأعلام الحالة.

التفكيك واستخراج البرنامج وانعدام المصادقة

وبعد شراء وحدة تحكم وشاشة بديلتين، وجد أن علامات المكوّنات على وحدة التحكم لم تُمحَ، فحدد منفذ SWD واستخرج البرنامج الداخلي بأداة OpenOCD؛ وكشف التحليل في Ghidra وجود محمّل إقلاع ووحدة تحديث وتطبيق أساسي على عناوين ثابتة. كان فتح الشاشة أصعب، وتبيّن أن لوحتها تضم متحكماً دقيقاً AT32F415 وشريحة Bluetooth من طراز CH573 وقارئ NFC من طراز FM17520 وذاكرة فلاش W25Q128FV لا تحتوي سوى صور الواجهة.

وتبيّن أن مسار التحديث مفتوح بالقدر نفسه: يُكتب البرنامج الداخلي عبر ناقل CAN دون أي تشفير، في مقاطع من 64 بايت موزّعة على تسعة إطارات مع تحقق CRC-16-CCITT، ويحمل المقطع الأول اسم ملف وطول البرنامج كنص فقط. ولأن التحديث يُكتب مباشرة فوق صورة التطبيق، فإن تحديثاً فاشلاً يجعل الشاشة غير صالحة للاستخدام، مع أن محمّل الإقلاع يستمع دائماً للحزم عند التشغيل. كتب برنامجاً للكتابة، واختبره بالنسخة التي استخرجها، ونجح من المحاولة الأولى. ويقول: «من الممكن تعديل البرنامج الداخلي لأي سكوتر دون مصادقة».

طبقة عتاد بلغة Rust

تبيّن أن AT32F415 ليس نسخة من شريحة واحدة، بل خليط من أطراف STM32، لذلك بنى بدلاً من إطار Embassy طبقة تجريد للعتاد بدأها من تفريعة لمشروع stm32-rs، وشغّل الساعات والمؤقتات ومحوّل ADC ومقاطعات GPIO ووحدات UART وCAN وRTC. وتُدار شاشة ST7796 بواجهة متوازية من mipidsi، ويتيح نوع Bus كتابة جميع مخارج GPIOB وعددها 16 بتعليمة واحدة، كما تتيح تعريفات deku فكّ إطارات CAN وBluetooth من البنى نفسها — بما في ذلك أداة منفصلة تحوّل سجلات CAN الخام إلى سجلات مقروءة لجهد البطارية وسعتها وحالة وحدة التحكم.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.