لمنع انخفاض معدل الذكاء أثناء العزلة الذاتية ، كانت هناك رغبة في القيام بشيء مفيد لأنفسهم ، وإذا كنت محظوظًا - ليس فقط. عند قطع الدائرة التاسعة حول الشقة ، تم التقاط عيني على ماسح ضوئي للسيارات ، أخذته من صديق لمزيد من الدراسة ، وهو Lexia 3 ، المعروف أيضًا باسم Actia XS Evolution. إليكم أحدها:
كان عيبها الضخم هو أن برنامج DiagBox فقط المصمم لتشخيص سيارات بيجو / سيتروين يمكنه العمل معه. كان من المستحيل تحمل هذا الأخير (s) ، لذلك نشأت فكرة أنه إذا تم إجبار هذا الماسح الضوئي على إرسال واستقبال رسائل عشوائية إلى حافلة CAN للسيارة ، وبالتالي تحويلها إلى محول عالمي.إذن ، خطة العمل:- اجمع اتصال USB بين الكمبيوتر الشخصي والمريض.
- افهم كيف يحدث الاتصال بين برنامج تشغيل المحول والبرنامج.
- كرر التبادل وأشعر أنني بحالة جيدة (المفسد: تبين أنه أكثر تعقيدًا قليلاً).
1. الصرف
يقوم مجمع برامج DiagBox بتصفح الإنترنت بحرية ، لذلك لم تكن هناك صعوبات في الخطوة 1 ، خاصة أنه يأتي مع أداة صغيرة لتحديد المحول ، الأمر الذي يبسط المهمة إلى حد ما من الخطوة 2. عند تلقي التبادل عبر USB ، ساعدت نسخة تجريبية من USBLyzer .نحن ذاهبون إلى النجاح. في الصورة ، حزمة البيانات المرسلة ، ونوع الجهاز في المرسل ، والأداة المساعدة نفسها.
بالنظر إلى IRPs عند فتح الجهاز والتبادل معه ، يمكننا أن نستنتج أن العمل يتم من خلال آلية Windows I / O القياسية ، وهي فتح الملف الظاهري للجهاز ، ووظيفة CreateFile وللتبادل ، DeviceIOControl.
2. استخلاص المعلومات
يتم جمع البيانات ، ويتم استلام معرف IOCTL والأعلام ، ويظل الأمر صغيرًا ، وفتح جهاز الملف وإرسال حزمة من البايتات هناك. فقط افتحه؟ لم يعط البحث من خلال WinObj أي نتائج ، عند توصيله ، لا يكون للمحول اسم دقيق ، فقط ارتباط ضمني بمعرف متغير باستمرار ، أي ببساطة فتح جهاز مثل منفذ COM لن يعملCreateFile("\\\\.\\COM1", ...)
لقد أوضحت دراسة ملفات البرنامج ، أن كل شيء أصبح بسيطًا جدًا - يحتوي المحول على GUID الفريد الخاص به ، والذي يُطلب من نظام التشغيل الحصول على قائمة بجميع الأجهزة التي تحتوي على GUID وإذا كانت موجودة ، فسوف نحصل على رابط للجهاز ،\\?\USB#VID_103A&PID_F000#6&268bff9b&0&7#{75a835f4-d77d-4402-8585-c42247f25b76}\vcommusb0
والذي سيتم فتحه بنجاح.دالة تقوم بإرجاع المسار بدلاً من GUID:CM_Get_Device_Interface_List(InterfaceClassGuid, pDeviceID, Buffer, BufferLen, ulFlags);
يتم فتح "الملف" بنجاح ، لا تنس العلامات التي تم الحصول عليها عبر USBLyzerDevice = CreateFile(DeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
3. النهائي
نرسل حزمة من البايت ، واستجابة - الصمت ...bStatus = DeviceIoControl(Device, 0x220003, send_buf, send_len, out_buf, max_out_len, &returned_len, NULL);
لفترة طويلة جلست ونظرت إلى الشاشة ، وهنا نفس التبادل ، وهنا الاستجابات من الجهاز ، وهنا الأعلام ، تمامًا كما كررت ، ولكن لا شيء يأتي منها.
بعد أن فقدت كل أمل في النجاح ، كان لدي شيء أخير - المدفعية الثقيلة على شكل قرص من مجلة Hacker مع برنامج OllyDbg. نبدأ ، نعلق على العملية ، ونضع نقطة التوقف على وظائف DeviceIoControl وما نراه.
الملك ليس حقيقيا. رمز IOCTL مختلف تمامًا ، البيانات ليست على الإطلاق مثل تلك التي يتم رؤيتها من خلال USBLyzer.ما تم ارساله للجهاز:<b>00 FA</b> <i>AA</i> BA 7C 15 00 00 00 00 00 00
وذلك عبر USB:40 05 15 C0 <b>00 FA</b> 00 00 <i>AA</i> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41
كان التلميح باسم الجهاز مرئيًا في مدير المهام. لقد وجدت مقالاً على موقع Microsoft على الويب حول ماهية برنامج تشغيل UMDF USB. مسح مخطط كتلة:
اتضح أن ما نراه في USBLyzer هو طبقة النقل لنقل بيانات العميل ، والتي يتم تنفيذها في برنامج تشغيل UMDF (الاتجاه 7 في الصورة) ، بينما نقوم بنقل البيانات إلى الجهاز (الاتجاه 2 في الصورة) ، الذي سيذهب أولاً إلى السائق ، ثم يذهب إلى ناقل USB. آمل أن أوضحت بشكل واضح.الآن أصبح من الواضح من أين تأتي معرفات وبيانات IOCTL الأخرى. حسنًا ، إنه أبسط ، ليس عليك أن تعلق عقلك على كيفية تنفيذ النقل ، ولدينا أبسط واجهة استجابة للطلب. أيضا في ملفات البرنامج تم تحميل وصف بروتوكول التبادل (جزئي) عن طريق الخطأ ، إنه أمر مؤسف فقط باللغة الفرنسية.
ووفقا له ، في الرسالة أعلاه ، تم طلب إصدار البرامج الثابتة (00 FA) ، والذي تم تلقي استجابة به مع الخط APPLI_XS_Fuji_ P106138A V4.3.0ACTIA 02.01.12.الكل. نقوم بتكوين CAN ، وإرسال عناوين استجابة الطلب للاتصال باستخدام بروتوكول ISO-TP والحصول على محول يعمل بشكل كامل مع السيارة. لسهولة الاستخدام ، تمت كتابة غلاف يتوافق ، قدر الإمكان ، مع معيار PassThru J2534 ، بحيث يمكن استخدام هذا المحول مع برامج السيارات المختلفة ، بما في ذلك تصميمه الخاص.فيديو العمل (يتم إخراج stdout إلى وحدة التحكم لتسهيل عملية التصحيح):يمكن العثور على مصادر هنا