إكسيرا8

أجهزة التواصل مع الإنسان: التعبئة لسرقة الواصف

بدأنا بـ اكتشاف واصفات HID قبل أسبوعولقد أوضحت لك كيفية إرسال حزم HID الأولية باستخدام شوكة MicroPython. لا تزال المهمة أمامنا – وهي صنع جهاز بشاشة تعمل باللمس. لذلك، دعنا نمنحك الأدوات اللازمة لالتقاط واصف موجود من شاشة تعمل باللمس، ثم نوضح لك كيفية تعديله وكيف سيظهر في النهاية.

التعبئة للسرقة

عندما يتعلق الأمر بهذا النوع من المغامرات، لا يمكننا الاستغناء عن الأدوات والأسلحة - فقد يكون الأمر خطيرًا! وبدونها، يمكنك حتى التخلي عن مشروعك في منتصف الطريق! إليك ما يكفي من الأدوات والذخيرة عالية الدقة التي ستساعدك على تجاوز أي عقبات قد تواجهها. باستثناء الأدوات المستندة إلى الويب، فإن هذه الأدوات مخصصة لنظام التشغيل Linux، ولكن يرجى تذكر أنه يمكنك دائمًا استخدام جهاز افتراضي أو Raspberry Pi. لن يستخدم أحد Windows في عملية سرقة على أي حال، مع كل القياسات عن بعد وما شابه.

الأداة الأولى مخصصة لقراءة الواصفات - نحتاج إلى أداة للتعلم منها، إنها تمامًا مثل بطاقة المفاتيح التي يمكنك إرسالها إلى حارس الأمن ومسحها ضوئيًا عند مدخل القبو. وبطبيعة الحال، مع RFID، تريد الحصول على أمثلة كافية، ومقارنة البتات بين عدد قليل من البطاقات وكل شيء. في الوقت الحالي، لا تحتوي واصفات HID على عمليات التحقق من الأصالة، ولكن يبدو الأمر كذلك قد يتغير ذلك في المستقبل. اترك الأمر لشركة Apple وMicrosoft لإضافتهما، كالعادة. في نظام التشغيل Linux، تعد رؤية الواصفات أمرًا بسيطًا - مثل الجذر، انتقل إلى /sys/bus/usb/devices/، ابحث عن جهازك من خلاله lsusb مسار شجرة الجهاز، ثم اتبع الدليل الذي يحتوي على VID/PID فيه. سيحتوي هذا الدليل على ملف report_descriptor ملف - hexdump هو - هي. يمكن أن يبدو الأمر بأكمله كما يلي:

sudo hexdump -v -e '/1 "%02X "' /sys/bus/usb/devices/3-6.2/3-6.2:1.1/0003:0C40:8000.0022/report_descriptor`

مرة أخرى، قد تحتاج إلى الجذر للعثور على هذا المسار، لذا استخدمه sudo -i إذا توجب عليك. سلسلة التنسيق في hexdump يمنحك الأمر إخراجًا سهلاً للمحلل اللغوي. على وجه التحديد، للتحليل، أستخدم هذه صفحة ويب - إنه أمر رائع، حتى إضافة علامات تبويب تحدد أقسامًا مختلفة من الواصف، مما يجعل مخرجاته أكثر قابلية للقراءة! يمكنك أيضًا حفظ صفحة الويب هذه محليًا، فهي أداة رائعة جدًا. بخلاف ذلك، يمكنك تجربة أدوات محلية أخرى مثل هذا!

الآن، حصلت على وصف للجهاز الذي تريد تقليد سلوكه، ويمكنك تحليله لمعرفة ما الذي يجعله مميزًا. رائع! ولكن ليس شيئًا يمكنك فهمه بنظرة واحدة، ليس بعد؟ لا يصلح الواصف وحده لبناء خريطة ذهنية، فقد يحتوي على معرفات تقارير متعددة، وستكون بعض الواصفات عامة بما يكفي لتكون مربكة. على سبيل المثال، تحتوي العديد من الأجهزة على واصفات تمثل في الواقع نقاط نهاية لتحديثات البرامج الثابتة بدلاً من ذلك، لذلك قد تقضي وقتًا في معرفة متى لا يتم استخدام الواصف مطلقًا. دعونا نلقي نظرة على ما يرسله جهازنا فعليًا عندما نتفاعل معه، ومعرف التقرير الذي يجب أن نتعلم منه - والأهم من ذلك، كيف يفسره نظام التشغيل Linux.

للقيام بذلك، نحتاج فقط إلى VID وPID. كجذر مرة أخرى، انتقل إلى /sys/kernel/debug/hid/، ابحث عن دليل يحتوي على VID وPID الخاصين بك، ثم cat انها events ملف. ستجد هناك وصفًا مطبوعًا وسهل القراءة لكل حدث تحصل عليه من جهازك، بمجرد ظهوره. في بعض الأحيان، تتعطل عملية الطباعة وتتوقف في منتصف الحدث - قد يكون السبب هو ما يحدث cat'ed، لكنها عادة ليست خسارة كبيرة. هذه طريقة رائعة لمعرفة ما يحدث بالفعل عندما يكون جهاز HID الخاص بك نشطًا. البايت الأول هو معرف التقرير، ثم تتم طباعة الحزمة بطريقة استلامها، وبعد ذلك نرى نتائج التحليل من نظام التشغيل. إنها ببساطة أداة رائعة لديك! فيما يلي مثال لسطر الأوامر:

sudo cat /sys/kernel/debug/hid/0003:2E8A:0005.0029/events

أخيرًا وليس آخرًا، ستحتاج إلى طريقة لرؤية الأحداث حيث تقوم طبقات الإدخال في نظام التشغيل لديك بتفسيرها فعليًا. نعم، هذا مختلف - إذا وصلت حزمة، فلن يتم تحويلها بالضرورة إلى حدث إدخال على مستوى نظام التشغيل، وأحيانًا يتم تجاهلها لأنها لا تستوفي شرطًا معينًا. على سبيل المثال، في مرحلة ما، تم تجاهل حزم شاشة اللمس الخاصة بي لأنني كنت أرسل الإحداثيات فقط، وحذفت جزءًا مهمًا يخبر نظام التشغيل بأن شاشة اللمس تنقل حاليًا حدث لمس صالحًا بدلاً من لمسة زائفة. هذا الشيء هو الأمام والوسط في "ملاحظات" Microsoft حول بناء التحويل الرقمي، ورؤية أن نظام التشغيل الخاص بي لم "يستوعب" الأحداث التي قمت بإنشائها كان بمثابة الدفع الذي كنت بحاجة لإلقاء نظرة خاطفة على مذكرة التطبيق والتحقق مما قد تكون الحزمة الخاصة بي مفقودة.

لهذا، لدي نص بايثون الصغير الخاص بي الذي يطبع الأحداث كما يتم تلقيها بواسطة طبقات مكتبة الإدخال، وقد خدمني هذا البرنامج النصي منذ عقد من الزمن تقريبًا. ما عليك سوى تنزيله وتشغيله - ستحتاج إلى تثبيت مكتبة Python `evdev`، ولكنها متاحة من مستودعات Debian/Ubuntu و`pip` على حدٍ سواء. تحتاج أيضًا إلى تشغيل هذا كجذر، ولكن هذا يحدث عندما تقوم بتشغيله كـ `./listen_keys.py` تلقائيًا.

أفضّل تشغيل كل تلك الأوامر المختلفة tmux، أجزاء صغيرة مختلفة لمختلف المهام الجارية - هذه هي مساحة العمل الخاصة بي عندما كنت أقوم بتطوير وتصحيح كود شاشة اللمس، حيث أ) تعرض طباعة حدث HID الخام، ب) تعرض طباعة واصف HID، و ج) تعرض كود عرض حدث الإدخال.

تمويه مثالي

باستخدام هذه الأدوات، كان بناء شاشة تعمل باللمس عملاً مسائيًا. حصلت على إحداثيات من مكتبة XPT2046 التي كنت أستخدمها، لذا كل ما كان علي فعله هو إنشاء واصف. في البداية، فكرت في إعادة استخدام واصف "الموضع المطلق للماوس" الذي تم توفيره بشكل مفيد بواسطة [] مع الكود، ولكن البرنامج النصي لطباعة حدث الإدخال أظهر لي أنه حتى الضغط على زر الماوس من هذا البرنامج النصي لم يتم التقاطه بواسطة واجهة المستخدم - وبينما لقد ظهرت أحداث MOUSE_ABS بالفعل، ولم تؤثر على سطح المكتب بأي شكل من الأشكال.

لم يكن تصحيح أخطاء واصف الماوس أمرًا ممتعًا، خاصة وأنني لا أملك حتى ماوسًا فعالاً للتعلم منه! بدلاً من ذلك، قررت إعادة بناء واصف الفأرة المطلق إلى واصف التحويل الرقمي، حيث أن لدي واصف التحويل الرقمي والحزم! تم عرض واصف الفأرة المطلق بشكل مفيد في مصادر MicroPython بشكل منفصل، وهو جاهز للتعديل أيضًا! تغيير USAGE و USAGE_PAGE الفئات وحدها إلى تلك الموجودة في واصف شاشة اللمس USB جعلت نظام التشغيل الخاص بي يتعرف على لوحة RP2040 الخاصة بي كمحول رقمي.

لم تكن التغييرات الفعلية صعبة - فقد قدمت مكتبة XPT2046 إحداثيين صحيحين، لذلك قمت بنسخ بنية من واصف يصف قيمة X واحدة وقيمة Y واحدة، يبلغ طول كل منهما 16 بت، وبالتالي يتم تقسيم كل منهما إلى بايتتين، تمامًا مثل شاشة اللمس USB الخاصة بي. بمساعدة آلية طباعة تصحيح أخطاء حزمة HID، تمكنت بسرعة من ملاحظة متى تم تبديل البايت العلوي والسفلي، لأن نظام التشغيل الخاص بي لم يكن يفسر الإحداثيات بشكل صحيح. بعد إصلاح ذلك، سيتم تحليل الحزم الخاصة بي بشكل صحيح ولكنها لم تظهر بين أحداث الإدخال، وبمقارنة حزم شاشة لمس USB المصنوعة في المصنع بالحزم التي تم إنشاؤها يدويًا على شاشة اللمس الخاصة بي، يمكنني ملاحظة وجود بت "لمسة صالحة" كان مفقود. إضافة إلى ذلك جعل الجهاز يتصرف كشاشة تعمل باللمس لجميع المقاصد والأغراض!

الآن، لدي شاشة تعمل باللمس متصلة بـ USB، وكل ما يتطلبه الأمر هو سرقة واصف HID من شاشة لمس مختلفة، ثم تقليدها بشكل كافٍ. بالإضافة إلى ذلك، عندما أريد، يمكنني تحويل شاشة اللمس الخاصة بي إلى وضع لوحة اللمس عن طريق جعلها ترسل حزمًا بمعرف تقرير مختلف يتوافق مع واصف الماوس الخاص بالبرنامج الثابت - فهي تفتقر فقط إلى زري الماوس لتكون لوحة لمس كاملة للكمبيوتر المحمول! نظرًا لأنني أستخدم هذا كنموذج أولي لشاشة يمكن ارتداؤها، فسيكون ذلك مفيدًا للغاية.

في الداخل والخارج، قمنا بتأمين البضائع

كما هي، تحتاج شاشة اللمس USB التي تم إنشاؤها حديثًا إلى بعض التصفية والمعايرة، ولكن هذه إصلاحات صغيرة - ربما يمكنها سرقة بعض خوارزميات التصفية من برامج تشغيل Linux XPT2046 أيضًا! إنها ميزة التوصيل والتشغيل، وسهلة الاستخدام، وقابلة للاختراق - ولم تعد شاشة اللمس SPI كما كان من المفترض أن تكون. والأهم من ذلك كله، أنه مثال رائع على أنه إذا كنت ترغب في إنشاء جهاز HID غريب بعض الشيء، فليس من الصعب القيام بذلك، ويقدم لك Linux مجموعة أدوات قوية تساعدك على ملاحظة أي مشكلات HID بغض النظر عن المدى الذي تريد الوصول إليه. يذهب.

هناك الكثير من الأشياء التي يمكنك القيام بها إذا فهمت HID. على سبيل المثال، يمكنك إنشاء شاشة برايل متوافقة تمامًا، دون مواجهة مشكلة الأرقام التسلسلية لـ USB-UART. زيادة على Hackaday الخلاف، قام [mupf] باختراق جهاز متوافق مع XBox Adaptive Controller يستخدم مقياس مغناطيسي وجيروسكوبي لإرسال نظام التشغيل، مع تعريف واصف HID بشكل كبير من خلال واصف مُلغى لوحدة تحكم Xbox Adaptive الأصلية. تصف مواصفات HID عددًا كبيرًا من الأشياء، حتى شاشات عرض الأحرف المتصلة عبر USB، وأشياء مثل - يمكنك إرسال الكواترنيونات بمساعدة HID، من بين كل الأشياء!

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

في المرة القادمة، أود أن أعرض لكم المزيد عن I2C HID - إرسال حزم HID وواصفاتها عبر I2C، دون الحاجة إلى منفذ USB على الإطلاق واستخدام اتصال I2C فقط، والذي أصبح الآن موجودًا في كل مكان! في هذا السياق، سأوضح لك كيفية إعادة استخدام لوحة اللمس للكمبيوتر المحمول Framework، والتي تستخدم I2C-HID لاتصالاتها. آمل تعديل QMK حتى نتمكن من التدرب على إضافة لوحات اللمس I2C إلى أي لوحات مفاتيح يتم التحكم فيها بواسطة QMK، ولكن قد نستقر على تعديل KMK، وهو ما يعادل QMK ولكن في CircuitPython. سأوضح لك أيضًا كيف يمكنك توصيل جهاز I2C-HID بسرعة بوحدة Linux SBC الخاصة بك - إنه أسهل مما تتخيل! وإذا تمت محاذاة النجوم وتبين أن دعم الوضع المحيطي I2C في RP2040 MicroPython مستقر بدرجة كافية، فيمكننا أيضًا إنشاء جهاز I2040C HID الطرفي الذي يعمل بنظام RP2 كحلوى.

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟