Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
logitech-ipc-protocol — مهندس عكسيًا لبروتوكول IPC الخاص بعميل Logi Options+. قم بتبديل أجهزة Logitech متعددة المضيفين برمجيًا عبر مقبس Unix (macOS) أو أنبوب مسمى (Windows). | Kitploit
أدوات/GitHubGitHub/saimanish1/logitech-ipc-protocol
أمان الأنظمة المدمجةأمن البلوتوثالهندسة العكسيةأمن الشبكات اللاسلكيةاختراق الأجهزةأمان الأجهزة وإنترنت الأشياءالأوراق والأبحاثالتعلم والتعليم
GitHubsaimanish1/logitech-ipc-protocol

logitech-ipc-protocol

مهندس عكسيًا لبروتوكول IPC الخاص بعميل Logi Options+. قم بتبديل أجهزة Logitech متعددة المضيفين برمجيًا عبر مقبس Unix (macOS) أو أنبوب مسمى (Windows).

عرض المستودع
172منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

بروتوكول IPC لوجيتك

توثيق هندسي عكسي لبروتوكول IPC لعامل Logi Options+. يتيح التحكم البرمجي في أجهزة Logitech متعددة المضيفين (تبديل المضيف، استعلامات الجهاز) دون الوصول المباشر إلى HID، على كل من macOS و Windows.

لم يتم توثيق هذا البروتوكول بشكل علني قبل هذا المشروع.

المشكلة

يحظر macOS الوصول المباشر إلى HID لأجهزة الإدخال عبر Bluetooth على مستوى النواة. لا توجد أذونات أو صلاحيات أو اختراقات تتجاوز ذلك. يمتلك عامل Logi Options+ صلاحيات موقععة من Apple (com.apple.security.device.bluetooth) تمنحه الوصول إلى HID عبر Bluetooth. يتواصل هذا المشروع مع العامل عبر قناة IPC الخاصة به بدلاً من ذلك.

الملفات

الملفالوصف
logi-options-ipc-reverse-engineering.mdالسجل الكامل للهندسة العكسية
software-kvm-setup.mdدليل إعداد KVM برمجي ثنائي الاتجاه (Windows + Mac)
switch_to_windows.pyسكريبت جانب Mac يقوم بتبديل أجهزة Logitech وإدخال الشاشة عبر IPC مقبس Unix
api-reference.mdمرجع API للعامل: نقاط النهاية العاملة، أنواع protobuf، قدرات الجهاز
kvm.ahkسكريبت AutoHotkey v2: مفاتيح اختصار Win+1/2/3 تستدعي kvm_daemon_windows.py --switch (يعمل في علبة النظام)
kvm_daemon_windows.pyتبديل أجهزة Windows عبر named pipe، تبديل الشاشة عبر DDC/CI
kvm_config.iniإعدادات Windows (مفاتيح الاختصار، مدخلات الشاشة)
query_feature_index.pyيكتشف فهرس ميزة ChangeHost الخاصة بـ HID++ لأجهزة Logitech (Windows)
query_agent_windows.pyيستعلم من العامل على Windows عبر named pipe
config.iniإعدادات UnifiedSwitch القديمة (تم استبدالها بـ kvm_daemon_windows.py)

الاستخدام

Mac

root@kitploit:~
python3 switch_to_windows.py 0        # التبديل إلى المضيف 0 (DisplayPort)
python3 switch_to_windows.py 1        # التبديل إلى المضيف 1 (HDMI)
python3 switch_to_windows.py --dry-run 0  # عرض ما سيحدث دون تنفيذ

يتطلب تشغيل Logi Options+ وتثبيت m1ddc (brew install m1ddc).

Windows

root@kitploit:~
# بدء مستمع مفاتيح الاختصار AHK (يعمل في علبة النظام، بدون وحدة تحكم)
# يتطلب AutoHotkey v2: winget install AutoHotkey.AutoHotkey
start kvm.ahk

# أو التبديل مباشرة من سطر الأوامر
python kvm_daemon_windows.py --switch 1

# عرض الأجهزة المكتشفة ومفاتيح الاختصار المهيأة دون تبديل
python kvm_daemon_windows.py --dry-run

يتطلب تشغيل Logi Options+. تركيب التبعيات: pip install pywin32.

يستمع سكريبت AHK لمفاتيح Win+1/2/3 ويستدعي kvm_daemon_windows.py --switch N لكل منها. يقوم سكريبت Python باكتشاف الأجهزة تلقائيًا من العامل (بدون معرفات جهاز ثابتة أو مسارات HID). عدّل kvm_config.ini لتكوين مفاتيح الاختصار وقيم إدخال DDC/CI للشاشة.

البروتوكول

يستمع العامل على:

  • macOS: مقبس نطاق Unix في /tmp/logitech_kiros_agent-<hash>
  • Windows: named pipe في \\.\pipe\logitech_kiros_agent-<hash>

نفس بروتوكول الاتصال على كلا النظامين. تنسيق الإطار الثنائي:

root@kitploit:~
LE32(total_len) + BE32(proto_name_len) + "json" + BE32(msg_len) + JSON_message

لتبديل جهاز إلى مضيف مختلف:

root@kitploit:~
{
  "msg_id": "1",
  "verb": "SET",
  "path": "/change_host/<device_id>/host",
  "payload": {
    "@type": "type.googleapis.com/logi.protocol.devices.ChangeHost",
    "host": 0
  }
}

الحمولة هي حقل google.protobuf.Any يتم تسلسله كـ JSON مضمن مع تعليق @type. يستخدم العامل محلل JSON صارم خاص بـ protobuf؛ الحقول غير المعروفة تسبب INVALID_MESSAGE_RECEIVED.

تستخدم الطلبات msg_id (snake_case). الردود تستخدم msgId (camelCase). الأفعال هي سلاسل: "GET", "SET", "SUBSCRIBE", "BROADCAST".

انظر logi-options-ipc-reverse-engineering.md للحصول على توثيق كامل للبروتوكول.

معالجة أخطاء IPC

للتشغيل الآلي طويل الأمد، أعد الاتصال عند BrokenPipeError وأعد اكتشاف مسار المقبس/الناقل.

مشاكل Windows HID++ المعروفة

تنطبق هذه عند إرسال أوامر HID++ مباشرة، وليس من خلال العامل. kvm_daemon_windows.py يتجنبها جميعًا بالمرور عبر named pipe الخاص بالعامل.

مشاكل HID++ القديمة (للوصول المباشر إلى HID)

مجموعة HID++ تختلف حسب الجهاز. يعرض MX Master 3S HID++ على COL02. يستخدم MX Keys S COL05. كلاهما يستخدم صفحة الاستخدام FF43:0202. تحقق باستخدام:

root@kitploit:~
Get-PnpDeviceProperty -InstanceId "<instance_id>" -KeyName DEVPKEY_Device_HardwareIds
# ابحث عن: UP:FF43_U:0202

فهارس الميزات تختلف حسب الجهاز. تكون ChangeHost (0x1814) في الفهرس 0x0A على MX Keys S ولكن في 0x09 على MX Mechanical. استعلم في وقت التشغيل عبر IRoot::GetFeature:

root@kitploit:~
إرسال: {0x11, 0x00, 0x00, 0x0D, 0x18, 0x14, ...}  (20 بايت)
قراءة: البايت 4 من الاستجابة = فهرس الميزة

إعادة إقران الجهاز يغير مسارات HID. التبديل من مستقبل Bolt إلى BT LE المباشر يغير المسار بالكامل. قم بتشغيل query_agent_windows.py للحصول على المسارات الحالية من العامل.

مجموعة بائع GATT BT LE تصبح "غير معروفة". تفشل Windows أحيانًا في تهيئة خدمة GATT الخاصة بـ HID++. يعمل الجهاز بشكل طبيعي ولكن قناة أوامر البائع معطلة. الإصلاح: قم بإيقاف تشغيل Bluetooth وتشغيله في إعدادات Windows. هذه مشكلة في Windows/البرامج الثابتة.

الإصدارات المختبرة

الإصدارالحالة
Logi Options+ 2.0.840907يعمل (macOS Tahoe, Windows 11)

بروتوكول الاتصال ومسارات API الأساسية (/devices/list, /change_host/<id>/host) كانت مستقرة. إعادة إقران الجهاز كسرت مسارات HID وأرقام المجموعات لكن بروتوكول IPC نفسه لم يتأثر.

إخلاء مسؤولية

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

هذا المشروع ليس تابعًا أو معتمدًا من Logitech.

الترخيص

MIT

تنزيل الأداة
السيناريوما يحدثالاكتشاف
العامل غير قيد التشغيلالمقبس/الناقل غير موجودconnect() يرفع FileNotFoundError أو ConnectionRefusedError
إعادة تشغيل العامل أثناء الجلسةانقطاع الاتصالsend() يرفع BrokenPipeError; recv() يُرجع فارغًا
الجهاز على مضيف آخرNO_SUCH_PATHتحقق من result.code
جهاز غير قابل للوصولTIMEOUT بعد حوالي 3 ثوانٍتحقق من result.code
حمولة مشوهةINVALID_MESSAGE_RECEIVED@type مفقود أو حقول غير معروفة
تغيير هاش المقبسالمسار القديم اختفىاكتشف دائمًا بشكل ديناميكي، لا تقم بتثبيته أبدًا
مقبس قديم بعد إعادة التشغيلConnectionRefusedErrorأعد المحاولة بعد تأخير قصير
عملاء متزامنونيعمل بشكل جيدالعامل يعالج اتصالات متعددة