كيفية اختراق سيارة - دورة تدريبية سريعة

الهدف من هذه المقالة هو أن تبدأ في قرصنة السيارات - بسرعة ، ورخيصة ، وسهلة. للقيام بذلك ، سنحاكي مقياس RPM كمثال.

ما يلي ليس بأي حال من الأحوال تعليمي شامل. بدلاً من ذلك ، يهدف إلى توفير معلومات كافية فقط لبدء التشغيل. إذا كنت تريد البحث بشكل أعمق ، فيمكنك الاطلاع على ما يجب أن يقرأه في النهاية.

إذا قررت تنفيذ هذا البرنامج التعليمي في الحياة الواقعية ، فستحتاج إلى كمبيوتر Linux (أو جهاز Linux ظاهري) وجهاز CAN-to-USB (والذي سننظر فيه لاحقًا).

السيارة عبارة عن شبكة

تتكون السيارة من أجهزة كمبيوتر متعددة للتحكم في المحرك وناقل الحركة والنوافذ والأقفال والأضواء وما إلى ذلك. تسمى أجهزة الكمبيوتر هذه وحدات التحكم الإلكترونية (ECU) وتتواصل مع بعضها البعض عبر الشبكة.

على سبيل المثال ، عندما تضغط على الزر الموجود على عجلة القيادة لزيادة حجم الراديو ، ترسل وحدة التحكم الإلكترونية في عجلة القيادة أمرًا لزيادة مستوى الصوت على الشبكة ، ثم ترى وحدة التحكم الإلكترونية اللاسلكية هذا الأمر وتعمل وفقًا لذلك.

توجد عدة شبكات في السيارة ، بشكل عام اثنان على الأقل:

  • واحد للبيانات الهامة مثل رسائل المحرك ومجموعة نقل الحركة
  • وواحد للبيانات الأقل أهمية مثل أقفال الراديو والأبواب

تستخدم الشبكة الهامة بروتوكولًا سريعًا وموثوقًا بينما تستخدم الشبكة غير الحرجة بروتوكولًا أبطأ وأقل موثوقية ولكنه أرخص. يعتمد عدد الشبكات وكذلك وحدات التحكم الإلكترونية المتصلة ببعضها البعض على طراز السيارة وطرازها وسنتها. يمكن أيضًا توصيل وحدة التحكم الإلكترونية بشبكات متعددة.

الاتصال بشبكة

يمكن الوصول إلى بعض الشبكات عبر منفذ OBD-II. OBD-II إلزامي على جميع السيارات والشاحنات الخفيفة التي تم تصنيعها في الولايات المتحدة بعد عام 1996 وأوروبا بعد عام 2004.

الموصل في متناول اليد من مقعد السائق. قد تحتاج إلى رفع بعض الأغطية البلاستيكية ولكن يمكن الوصول إليها دائمًا بدون أدوات.

يسمح معيار OBD-II بخمسة بروتوكولات إشارات. الأمر متروك للشركة المصنّعة لتقرر أيهما تستخدم. CAN هي الأكثر شعبية وهذا ما سنناقشه. يمكن الوصول إليه عبر المسامير 6 و 14 من موصل OBD-II. إذا كانت سيارتك بها حافلة CAN ، فسترى خيوط معدنية على المسامير كما في الصورة أعلاه.

CAN bus هي حافلة موثوقة وعالية السرعة تُستخدم لإرسال البيانات الهامة. لسوء الحظ ، حزم البيانات الموجودة على الحافلة ليست موحدة لذا ستحتاج إلى عكسها لمعرفة ما تعنيه. كما يترك معيار OBD-II مجالًا لدبابيس البائع المحددة التي يمكن استخدامها لبروتوكولات البائع المحددة. هذا يجعل من السهل على التاجر تشخيص المشاكل.

في سيارتي (GM) ، لدي ناقل CAN قياسي على المسامير 6 و 14 ، وسلك واحد خاص ببائع CAN على الطرف 1. إن ناقل CAN القياسي هو بروتوكول موثوق وعالي السرعة (500 كيلوبت في الثانية) يشار إليه أيضًا باسم علبة السرعة العالية (HS-CAN). يتم استخدامه للبيانات الهامة. يكون ناقل CAN بسلك واحد (SW-CAN) أو GMLAN أبطأ (33.3 كيلو بت في الثانية) وأقل موثوقية ولكنه أرخص نظرًا لأنه يستخدم سلكًا واحدًا فقط. يستخدم هذا الناقل للبيانات غير الحرجة.

إذا رأيت رقم التعريف الشخصي الخاص بالمورد ولا تعرف البروتوكول الذي يتم استخدامه ، Google “OBD pinout”. هناك أيضًا CAN منخفض السرعة (LS-CAN) وسرعة متوسطة CAN (MS-CAN). يعمل MS-CAN بشكل عام على المسامير 3 و 11 ، ويعمل بسرعة 125 كيلو بت في الثانية على سيارات Ford و Volvo.

أدوات

ستحتاج إلى جهاز قادر على تفسير بيانات CAN بالإضافة إلى برنامج لتحليل البيانات

المعدات

لتلقي حزم CAN وإرسالها ، فأنت بحاجة إلى جهاز قادر على ذلك. ستصادف غالبًا أجهزة تستند إلى ELM327. في حين أن هذه لها فوائد ، إلا أنها مريعة للقرصنة. إنها طريقة بطيئة جدًا في مراقبة حافلة CAN.

هناك أيضًا أجهزة متطورة مثل Kvaser أو Peak أو EMS Wünsche. ستنجز هذه المهمة ولكنها باهظة الثمن ومكلفة للغاية.

تتطلب بعض الأجهزة المتطورة أيضًا شراء برنامج معها. USB2CAN هي واجهة CAN أصلية لنظام Linux تقدم قيمة كبيرة مقابل المال.

يمكنك أيضًا استخدام Cantact أو CANUSB. ومع ذلك ، فهذه ليست أجهزة CAN أصلية في Linux وتستخدم بروتوكولًا قائمًا على ASCII. هذا يعني أن إعدادها أكثر تعقيدًا وأداء أقل. من ناحية أخرى ، فهي مدعومة جيدًا عبر أنظمة تشغيل متعددة.

أستخدم CANalyze الذي صممته لتلبية احتياجاتي. إنه مشابه لـ USB2CAN من حيث أنه واجهة CAN أصلية ميسورة التكلفة ولكنها تستخدم وحدة تحكم صغيرة أحدث ، وهي مفتوحة المصدر ويمكن بناؤها باستخدام أدوات مفتوحة المصدر. يفترض الجزء المتبقي من هذا البرنامج التعليمي أنك تستخدم واجهة CAN أصلية.

البرمجيات

للتواصل مع الجهاز ، تحتاج إلى تثبيت حزمة can-utils على جهاز Linux الخاص بك. يمكنك القيام بذلك عن طريق كتابة ما يلي في موجه Linux:

sudo apt-get install can-utils

يجعل Can-utils من السهل للغاية إرسال واستقبال وتحليل حزم CAN. هذه هي الأوامر التي سنستخدمها.

  • cansniffer يعرض فقط الحزم التي يتم تغييرها
  • candump تفريغ جميع الحزم المستلمة
  • cansend إرسال حزمة

يحتوي Linux على دعم CAN مدمج في kernel عبر SocketCAN. هذا يجعل من السهل كتابة البرامج الإضافية الخاصة بك. يمكنك التفاعل مع ناقل CAN بنفس الطريقة التي تتفاعل بها مع أي شبكة أخرى ، أي عبر المقابس.

يمكن حافلة

قبل أن تبدأ في الرجوع ، يجب أن يكون لديك بعض الفهم لكيفية عمل ناقل CAN. يتكون من سلكين ويستخدم إشارات تفاضلية. نظرًا لأنه ناقل ، يمكن توصيل العديد من الأجهزة بهذين الأسلاك. عندما يتم إرسال إطار CAN على الناقل ، يتم استلامه بواسطة جميع وحدات التحكم الإلكترونية ولكن تتم معالجته فقط إذا كان مفيدًا لوحدة التحكم الإلكترونية. إذا تم إرسال إطارات CAN متعددة في نفس الوقت ، يفوز الإطار ذو الأولوية القصوى. يحتوي إطار CAN على 3 أجزاء ذات صلة بنا.

  • معرّف التحكيم هو معرّف الرسالة. تستخدمه وحدة التحكم الإلكترونية لتقرر معالجة أو تجاهل الإطار المستلم. كما أنه يمثل أولوية الرسالة. الرقم الأقل له أولوية أعلى. على سبيل المثال ، إذا كنت مهندسًا يصمم الشبكة ، فستعطي إطار نشر الوسائد الهوائية أولوية عالية جدًا أو معرف تحكيم منخفض. من ناحية أخرى ، ستعطي أولوية أقل أو معرف تحكيم أعلى للبيانات المخصصة لأقفال الباب.
  • يشير كود طول البيانات (DLC) إلى طول حقل البيانات بالبايت. يمكن أن يحتوي إطار CAN على 8 بايت على الأكثر من البيانات.
  • حقل البيانات يحتوي على ما يصل إلى 8 بايت من البيانات.

عكس حافلة CAN

تتمثل الطريقة العامة لعكس ناقل CAN في إنشاء السلوك الذي تريد تقليده والعثور على الرسالة التي تسبب هذا السلوك. على سبيل المثال ، لنفترض أن نظام المساعدة في الحفاظ على المسار (LKAS) في سيارتك هو حماقة وأنك صنعت نظامك الخاص.

لكي تتحكم في التوجيه ، تحتاج إلى معرفة الرسائل التي يجب إرسالها. طريقة معرفة ذلك هي تشغيل LKAS الأصلي ومراقبة ناقل CAN وتحديد الحزم المسؤولة عن قلب عجلة القيادة. بمجرد تحديد هذه الحزم ، يمكنك الحصول على LKAS الخاص بك لإرسال هذه الحزم إلى حافلة CAN للتحكم في عجلة القيادة.

في حالتنا ، نريد محاكاة ساخرة لمقياس سرعة الدوران ، لذلك نحتاج إلى تغيير عدد الدورات في الدقيقة عن طريق الضغط على الغاز مع تشغيل السيارة وفي الوضع المحايد ثم محاولة العثور على الحزمة المسؤولة عن تغيير عدد الدورات في الدقيقة.

اقامة

قم بتوصيل جهاز CAN بمنفذ OBD-II في السيارة ومنفذ USB بالكمبيوتر. قم بإظهار واجهة CAN عن طريق تشغيل ما يلي في موجه Linux الخاص بك:

sudo ip link set can0 up type can bitrate 500000

والذي يعرض can0الواجهة (دائمًا can0إذا كان لديك جهاز واحد متصل) بمعدل بت 500 كيلو بت في الثانية ، وهو معيار.

تحديد

عندما تكون السيارة مطفأة ، عادة ما تكون وحدات التحكم الإلكترونية نائمة ، لذا تحتاج إلى تشغيل السيارة أو وضعها في وضع الملحقات. يمكنك إلقاء نظرة على بيانات CAN الأولية عن طريق تشغيل هذا في موجه Linux الخاص بك:

candump can0

يؤدي هذا إلى طباعة بيانات CAN على الشاشة بمجرد استلامها. ومع ذلك ، هذا غير منظم للغاية ومن الصعب جدًا رؤية الحزم التي تتوافق مع حدث معين. يمكنك الضغط على ctrl + c لإيقاف البرنامج. لجعل البيانات أكثر قابلية للقراءة ، نستخدم cansniffer الذي يجمع الحزم حسب معرف التحكيم ولا يعرض سوى الحزم التي يتم تغييرها. لبدء تشغيله ، قم بتشغيل الأمر في موجه Linux الخاص بك:

cansniffer -c can0

حيث يقوم -cبتلوين البايت المتغيرة can0وهي واجهة الشم. يستغرق الأمر بضع ثوان لإزالة الحزم الثابتة.

يجب أن ترى شيئًا مشابهًا للصورة أدناه ، على الرغم من أن الأرقام قد تكون مختلفة تمامًا.

يُظهر العمود الأول (دلتا) المعدل بالثواني الذي يتم عنده استلام الحزم التي تحتوي على معرف التحكيم هذا. يحتوي العمود الثاني (ID) على معرف التحكيم. تحتوي الأعمدة الأبجدية الرقمية المتبقية (البيانات ...) على بايت البيانات. إذا كانت البيانات تحتوي على تمثيل ASCII ، فيمكن رؤيتها على اليمين ، وإلا فهي نقطة.

عندما تخطو على دواسة الوقود مع تشغيل المحرك من أجل زيادة عدد الدورات في الدقيقة ، فقد تظهر رسائل CAN جديدة على الشاشة و / أو تتغير الرسائل الحالية.

نحتاج إلى العثور على رسالة CAN حيث ترتبط البايتات المتغيرة بالتغيير في RPM. من المحتمل أن نتوقع أن تزيد القيمة / تنقص مع زيادة / انخفاض العائد لكل ألف ظهور.

أول إطار CAN في cansniffer يبدو أنه يختلف مع RPM هو الإطار مع معرف التحكيم C9. ربما توجد عدة حزم محتملة تختلف باختلاف عدد الدورات في الدقيقة ، هذه فقط الحزمة الأولى.

هناك 4 بايت يتم تغييرها (ملونة باللون الأحمر) في هذه الرسالة ولكن لا تشير جميعها بالضرورة إلى RPM. 07لا يبدو أن الاختلافات في البايت الثالث مرتبطة بتباين عدد الدورات في الدقيقة. البايت الأخير 1Bيفعل.

ومع ذلك ، بمجرد أن نرفع قدمنا ​​عن دواسة الوقود ، فإنه يذهب إلى 00. يشير هذا إلى أنه يمثل موضع الخانق وليس RPM.

أخيرًا ، هناك وحدتا بايت 21 C0يبدو أنهما يتوافقان مع تغيير في RPM. والأكثر من ذلك ، أنه يختلف كعدد صحيح 16 بايت ، أي عندما C0يفيض البايت الثاني ، 21يزداد البايت الأول بمقدار واحد. يبدو أيضًا أنه 21يتوافق مع 2000 دورة في الدقيقة تقريبًا. من الجيد ملاحظة متى ستعيد تشغيل الرسالة.

إعادة

بمجرد أن يكون لديك مرشح ، أرسله إلى ناقل CAN باستخدام الأمر التالي في موجه Linux الخاص بك:

cansend can0 0C9#8021C0071B101000

حيث يكون للإطار التنسيق #{data} ويجب استبداله برسالة CAN الخاصة بك.

يمكن أن تكون سيارتك قيد التشغيل أو في وضع الملحقات لهذا الغرض. تأكد من استخدام الحزمة التي حصلت عليها عندما كان المحرك غير خامل وإلا فلن ترى أي تغيير عند إعادة تشغيله عندما يكون محركك في وضع الخمول.

إذا أرسلت الحزمة مرة واحدة فقط ، فمن المحتمل ألا ترى أي تغيير في مجموعة العدادات. هذا لأن الرسالة الأصلية لا تزال تُرسل باستمرار على الحافلة بفواصل زمنية قدرها 0.2 ثانية بواسطة وحدة التحكم الإلكترونية ، لذلك سيتم تجاهل رسالتك.

تذكر أن المعدل يرد في العمود الأول من cansniffer. هناك طريقتان للالتفاف على هذا بخلاف فصل وحدة التحكم الإلكترونية التي تولد هذه الرسائل. أحد الخيارات هو إرسال الحزم بتردد أعلى بكثير من تلك التي يتم إرسالها حاليًا. يمكنك القيام بذلك عن طريق تشغيل ما يلي في موجه Linux الخاص بك:

while true; do cansend can0 0C9#8021C0071B101000; sleep 0.002; done

واستبدال رسالة CAN بالرسالة التي حددتها. اضغط على ctrl + c للتوقف.

خيار آخر هو مراقبة الحافلة ، وفي كل مرة تكتشف الحزمة التي تريد انتحالها ، أرسل الحزمة الخاصة بك على الفور بعد ذلك. يمكن القيام بذلك عن طريق التشغيل في موجه Linux الخاص بك:

candump can0 | grep " 0C9 " | while read line; do cansend can0 0C9#8021C0071B101000; done

حيث تحتاج إلى استبدال رسالة CAN ورسالة 0C9CAN التي حددتها ومعرف التحكيم الخاص بها على التوالي. يمكنك تجربة كلتا الطريقتين لمعرفة أيهما يعمل بشكل أفضل.

إذا تغير مقياس سرعة الدوران ، فهذا عمل جيد ، لقد وجدته! إذا لم يكن الأمر كذلك ، فحدد الرسالة التالية المرتبطة بـ RPM وأعد تشغيلها.

التشويش

الآن بعد أن أصبح لديك إطار CAN الذي يحدد RPM في مجموعة الأدوات ، يمكنك اللعب بالبيانات التي ترسلها لمعرفة ما سيحدث. لقد لاحظنا أن البايتين اللذين يتوافقان مع RPM يتصرفان كعدد صحيح 16 بت ، لذا من أجل ضبط مقياس سرعة الدوران على 8k RPM ، نقوم بتشغيل ما يلي في موجه Linux الخاص بك:

while true; do cansend can0 0C9#0080000000101000; sleep 0.002; done

والنتيجة ...

هذا هو! يمكنك الآن محاولة التحكم في عداد السرعة والراديو والأضواء وأقفال الأبواب وما إلى ذلك باستخدام نفس النهج.

القضايا المحتملة

  • في حين أن CAN bus هي الشبكة الأكثر شيوعًا ، فهي ليست الشبكة الوحيدة. إذا لم تتمكن من العثور على الرسالة التي تبحث عنها في CAN bus ، فجرب شبكة مختلفة. من المحتمل أن تكون الرسائل غير الهامة مثل الراديو والأضواء وأقفال الأبواب على شبكة مختلفة.
  • كما ذكرنا ، فإن البيانات الدقيقة التي يتم إرسالها عبر CAN تعتمد على طراز السيارة وطرازها وسنتها. تستخدم بعض السيارات عدادًا في رسالة CAN لضمان عدم معالجة الرسالة نفسها عدة مرات. هذا أصعب قليلاً ولكن يجب أن تكون قادرًا على القيام بذلك باستخدام المعلومات المقدمة. تستخدم بعض السيارات أيضًا المجموع الاختباري لضمان سلامة البيانات. قد يكون حساب هذا المجموع الاختباري صعبًا. إذا كان لديك Toyota ، تحقق من Adventures in Automotive Networks and Control Units، p10، Checksum-Toyota. يجب على الجميع قراءة الورقة كاملة.
  • عند إعادة تشغيل الحزمة المحددة على الناقل ، قد ينتقل جهاز CAN الخاص بك بجهاز USB إلى حالة "إيقاف الحافلة". هذا جزء من معيار CAN ويحدث عندما يواجه الجهاز الكثير من الأخطاء. يحدث هذا بشكل عام عندما يكون هناك الكثير من حركة المرور في الحافلة. للتغلب على هذا ، يمكنك اللعب مع التأخيرات والتوقيت ، ربما حاول إعادة الرسالة فورًا بعد وضع السيارة في وضع الملحقات ، حاول الانتظار قليلاً ، جربها مع السيارة ، إلخ. إذا كنت قد حددت ما هي وحدة التحكم الإلكترونية. متصل بالحافلة ، يمكنك أيضًا سحب الفتيل لمنعهم من إرسال الرسائل وتقليل حركة المرور في الحافلة.

يجب أن يقرأ

  • كتيب قرصنة السيارات
  • بحث تشارلي ميللر وكريس فالاسيك ، نعم كل ذلك
  • أبحاث جامعة كاليفورنيا في سان دييغو وجامعة واشنطن.

تأكد أيضًا من إطلاعك على Open Garages ومقاطع الفيديو الخاصة بهم.