חזרה
מהנדס הנדס לאחור קורקינט חשמלי וכתב מחדש את הקושחה ב-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. ממשק מקבילי של mipidsi מפעיל את מסך ST7796, טיפוס Bus מאפשר לכתוב את כל 16 הפינים של GPIOB בהוראה אחת, והגדרות deku מאפשרות לאותן מחלקות לפענח פריימים של CAN ו-Bluetooth — כולל כלי נפרד שהופך לוגים גולמיים לרשומות קריאות של מתח הסוללה, הקיבולת ומצב הבקר.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.