
nOBEX allows emulating the PBAP, MAP, and HFP profiles to test vehicle infotainment systems and similar devices using these profiles
يتيح nOBEX محاكاة ملفات PBAP وMAP وHFP لاختبار أنظمة الترفيه المعلوماتي في المركبات والأجهزة المماثلة التي تستخدم هذه الملفات. يوفر nOBEX عملاء PBAP وMAP لاستنساخ أنظمة الملفات الافتراضية الأصلية لهذه الملفات من هاتف حقيقي. وهذا يعني تنزيل دليل الهاتف بالكامل وجميع الرسائل النصية. يتم تخزين بطاقات vcards الخام وقوائم XML وهياكل MAP BMSG، ويمكن تعديلها حسب الرغبة للاختبار السلبي. يمكن لـ nOBEX بعد ذلك العمل كخادم PBAP وMAP، مما يسمح للمركبات والأجهزة الأخرى بالاتصال به واسترجاع معلومات الهاتف والرسائل. يتم إرسال بطاقات Vcards وBMSGs وقوائم XML تمامًا كما تم حفظها، مما يسمح بمرور البيانات المعدلة من قبل المستخدم والمشوهة. نظرًا لأن معظم وحدات الرأس في المركبات تتطلب دعم HFP قبل محاولة استخدام PBAP وMAP، يوفر nOBEX أيضًا دعمًا أساسيًا لـ HFP. سيعيد إرسال استجابات مسبقة قابلة للتخصيص من قبل المستخدم لأوامر AT القادمة من وحدة رأس المركبة. وهذا يسمح بمحاكاة هاتف خلوي حقيقي.
nOBEX مبني على مشروع PyOBEX من تأليف David Boddie. لم تكن هذه الأداة ممكنة لولا جهود David العظيمة في جعل OBEX سهل الفهم والتعامل معه. يوسع nOBEX PyOBEX بإضافة دعم لرسائل OBEX متعددة الأجزاء الكبيرة، ومحاكاة HFP، وخوادم PBAP وMAP، وعميل MAP، وعميل PBAP محسّن.
يستخدم nOBEX (وPyOBEX) مجموعة BlueZ للبلوتوث للإعلان عبر بروتوكول اكتشاف الخدمات (SDP) وإنشاء اتصالات RFCOMM. يحتوي nOBEX/PyOBEX على تطبيقات مستقلة لمواصفات OBEX لأدوار العميل والخادم. يتم دعم كل من Python 2 و3.
في وضع العميل، يستخدم nOBEX BlueZ للاستعلام عن الخدمات التي يقدمها الخادم. إذا اكتشف أن الخدمة المطلوبة متاحة، فإنه يتصل بالخادم عبر RFCOMM على المنفذ المحدد عبر SDP. يتم إنشاء طلبات OBEX وإرسالها إلى الخادم وفقًا للملف الجانبي المستخدم. يتم تفسير الاستجابات وحفظها على القرص. يمكن استخدام أوضاع العميل لـ PBAP وMAP لاستنساخ هاتف حقيقي.
في وضع الخادم، يعلن nOBEX عن الخدمات المتاحة عبر SDP. عندما يقوم عميل بإنشاء اتصال RFCOMM على المنفذ المعلن عنه، سيقبل الخادم طلبات OBEX ويتعامل معها. سيتم إرسال استجابات OBEX للطلبات باستخدام البيانات الموجودة على القرص. تخدم خوادم PBAP وMAP هياكل الملفات/المجلدات المطابقة لتلك التي تم إنشاؤها بواسطة العملاء المعنيين.
تم اختبار تعليمات الإعداد التالية على Fedora 24 و27 و29. قد تعمل التوزيعات الحديثة الأخرى أيضًا، لكن التجارب قد تختلف. قد تحتاج إلى تثبيت أدوات bluez القديمة (بما في ذلك sdptool) إذا كانت توزيعتك لا تتضمن sdptool. انتبه أيضًا إلى أن خوادم OBEX تميل إلى عدم العمل داخل الأجهزة الافتراضية التي تحتوي على محولات بلوتوث مشتركة. إما أن تشغل Linux بشكل أصلي، أو امتلك محول بلوتوث USB مخصصًا يستخدمه الجهاز الافتراضي فقط.
جرب استكشاف الخدمات المحلية المعلن عنها على SDP:
sudo sdptool browse local
إذا كنت تستخدم توزيعة حديثة، فمن المحتمل أن يفشل ذلك بسبب بعض تغييرات API الجذرية في BlueZ 5. يمكنك إصلاح ذلك بتشغيل bluetoothd في وضع التوافق. افعل ذلك عن طريق تحرير خدمة systemd الخاصة بـ bluetoothd.
sudo vi /usr/lib/systemd/system/bluetooth.service
أضف --compat إلى سطر ExecStart:
ExecStart=/usr/libexec/bluetooth/bluetoothd --compat
الآن أعد تشغيل bluetoothd:
sudo service bluetooth stop
sudo systemctl daemon-reload
sudo service bluetooth start
sudo hciconfig -a hci0 reset
اختبر تصفح خدمات SDP المحلية مرة أخرى (يجب أن يعمل هذه المرة):
sudo sdptool browse local
احصل على nOBEX وقم بتثبيته:
git clone https://github.com/nccgroup/nOBEX.git
cd nOBEX
sudo python3 setup.py install
ابحث عن عنوان MAC لهاتف ترغب في استنساخ دليل هاتفه:
hcitool scan
استنسخ محتويات PBAP لهاتف موجود (استخدم عنوان MAC الصحيح الخاص بك ويفضل أن يكون دليل الوجهة فارغًا أو غير موجود من اختيارك):
python3 examples/pbapclient.py 5C:51:88:8A:EC:5B ~/pbap_root/
بدلاً من ذلك، استخدم شجرة بيانات العينة الخاصة بـ PBAP الموجودة في مجلد examples/pbap_root.
عدّل بطاقات vcards وXML الخاصة بالقوائم في دليل تفريغ PBAP الخاص بك حسب الرغبة. الآن شغّل خادم PBAP باستخدام دليل الهاتف المستنسخ:
sudo python3 examples/multiserver.py --pbap ~/pbap_root/
ستحتاج أيضًا إلى إقران عميل PBAP بالكمبيوتر (خادم PBAP).
اسحب بيانات الرسائل من هاتفك لإنشاء شجرة MAP للاختبار:
python3 examples/mapclient.py 5C:51:88:8A:EC:5B ~/map_root/
بدلاً من ذلك، إذا كان هاتفك لا يدعم MAP بشكل صحيح، فاستخدم شجرة بيانات العينة الخاصة بـ MAP الموجودة في مجلد examples/map_root.
عدّل بيانات العينة حسب الرغبة. ثم شغّل الخادم، مع الإشارة إلى المكان الذي يجب أن يبحث فيه عن جذر شجرة MAP.
sudo python3 examples/multiserver.py --map ~/map_root/
عميل HFP (جهاز حر اليدين، محاكي طقم السيارة) يوفر واجهة أوامر AT للتواصل مع HFAG الخاص بك (هاتف/مودم). أسميه "عميل HFP" على الرغم من كونه خادم RFCOMM لأنه "عميل" لـ HFAG (هاتف/مودم). أنت تستخدم محاكي HF ("العميل") لإرسال أوامر AT إلى HFAG، على الرغم من أن "الخادم" (HFAG) هو من يبدأ اتصال RFCOMM.
لتشغيل محاكي HF:
sudo python3 examples/hfpclient.py
قد تحتاج إلى تشغيل محاكي HF للإعلان عبر SDP بأنك جهاز HF قبل إقران هاتفك. عندما يكون محاكي HF قيد التشغيل، سيبدأ هاتفك اتصال RFCOMM لأوامر AT مع نص المحاكي. لتسريع هذه العملية، يمكنك النقر على الكمبيوتر المقترن في إعدادات البلوتوث بهاتفك لتشغيل اتصال/إعادة اتصال.
بمجرد أن يبدأ HFAG (هاتف/مودم) اتصالًا، يكون لديك عادةً نافذة زمنية محدودة (30 ثانية إلى دقيقة) لتكوين جلسة HFP. قبل أن تتمكن من إرسال أوامر AT مفيدة (مثل بدء المكالمات الهاتفية)، يجب عليك إرسال سلسلة من أوامر AT خلال النافذة المحدودة، وإلا فقد يفصل منك HFAG. يجب أن تعمل سلسلة أوامر AT الأولية التالية مع معظم الهواتف:
AT+BRSF=39
AT+CIND=?
AT+CIND?
AT+CMER=3,0,0,1
AT+CHLD=?
AT+CCWA=1
AT+CLIP=1
AT+NREC=0
خادم HFP (بوابة الصوت) أساسي إلى حد ما، حيث يعيد إرسال ردود مكوّنة مسبقًا لأوامر محددة. تم إعداد الخادم لدعم أوامر HFP الشائعة مباشرة، ولكن من المرجح أن تتطلب كل مركبة بعض الأوامر الإضافية و/أو تغييرات في الاستجابات. يمكن تكوين الاستجابات المخصصة من خلال ملف نصي بتنسيق أزواج الأوامر والاستجابات في كل سطر، حيث يتم فصل الأمر والاستجابة بعلامة تبويب. يمكن العثور على ملفات إعدادات عينة في مجلد examples/bbeast.
على عكس الخوادم الأخرى، فإن تطبيق nOBEX لـ HFP AG لا يقبل فعليًا اتصالات RFCOMM. معيار HFP غامض حول كيفية إنشاء الاتصالات، وبالتالي يُسمح لكل من HF وAG بقبول الاتصالات وبدءها. تتصرف وحدات الرأس المختلفة بشكل مختلف عندما يتعلق الأمر بممارسات إنشاء الاتصال. ومع ذلك، تميل معظم أجهزة HF إلى قبول الاتصال بها من قبل AG إذا كان AG لا يقبل الاتصالات على منفذه الخاص. وبالتالي، فإن "خادم" nOBEX لـ HFP AG يبحث فقط بين الأجهزة المقترنة عن تلك التي تدعم خدمة HF، ثم يتصل nOBEX بجهاز HF.
انتبه إلى أن كود HFP AG سيحاول الاتصال بأي جهاز مدرج تحت /var/lib/bluetooth/*/* يدعي دعم دور HFP HF. لذلك، يجب عليك حذف أي اقترانات خاطئة في هذا الدليل قبل محاولة استخدام خادم HFP.
لتشغيل HFP AG مستقل (ملف الإعداد اختياري):
sudo python3 examples/multiserver.py --hfp [config_file]
يدعم خادم HFP (HFAG) أيضًا التشغيل التفاعلي حيث يمكنك تحرير الاستجابات التلقائية في وقت التشغيل أو إرسال استجابات AT يدويًا. يستمع خادم HFP على المنفذ 7137 من localhost للأوامر. يمكنك الاتصال به باستخدام netcat كما هو موضح أدناه:
nc localhost 7137
يوجد أمران بسيطان فقط لهذه الواجهة:
send <atresp> - إرسال atresp كاستجابة ATursp <atcmd> <atresp> - تحديث/تعيين الاستجابة التلقائية لـ atcmd إلى atrespأوامر المثال التالية ستحاكي مكالمة هاتفية واردة:
ursp AT+CLCC +CLCC: 1,1,4,0,0,"1234567890",129
send RING
يتيح لك عميل FTP (ملف نقل الملفات) تصفح الملفات على خادم OBEX FTP، مثل كمبيوتر آخر يشغل nOBEX، أو هاتف Android يشغل تطبيق Bluetooth File Transfer. يوجد برنامج عينة لعميل FTP في مجلد الأمثلة.
python3 examples/ftpclient.py SERVER_MAC_ADDRESS [save_directory]
تشغيل عميل FTP النموذجي مع عنوان MAC للبلوتوث فقط كوسيطة سيطبع قائمة دليل متكررة لجميع الملفات التي يمكن الوصول إليها عبر OBEX FTP على الخادم. إذا تم توفير وسيطة save_directory الاختيارية، فسيقوم البرنامج النصي بتنزيل كل ملف يمكن الوصول إليه على الخادم وحفظه في دليل الحفظ المحدد على جهاز الكمبيوتر الخاص بك.
يسمح خادم FTP للعميل بتصفح الملفات الموجودة على جهاز الكمبيوتر الخاص بك (الخادم) داخل مجلد محدد.
sudo python3 examples/multiserver.py --ftp PATH_TO_FTP_FOLDER
يسمح عميل OPP (ملف دفع الكائنات) بدفع ملف موجود على جهاز الكمبيوتر الخاص بك إلى خادم OBEX OPP.
python3 examples/pushclient.py SERVER_MAC_ADDRESS FILE_TO_PUSH
يسمح خادم OPP للعميل بدفع الملفات إلى جهاز الكمبيوتر الخاص بك (الخادم) داخل مجلد محدد.
sudo python3 examples/multiserver.py --opp PATH_TO_OPP_FOLDER
تسمح نصوص multiserver.py بتشغيل أي مجموعة من خوادم HFP وMAP وPBAP وFTP وOPP في وقت واحد. فقط ادمج الوسائط من الأمثلة الموضحة أعلاه. لتشغيل HFP وMAP وPBAP في وقت واحد:
python3 examples/multiserver.py --map ~/map_root/ --pbap ~/pbap_root/ --hfp [config_file]
تم اختبار مزيج HFP وPBAP بنجاح على سيارة Ford Focus موديل 2012.
الغرض الأساسي من nOBEX هو إجراء الاختبار السلبي والتلغيم (fuzzing) لعملاء PBAP وMAP على وحدات الرأس في السيارات. يهدف دعم HFP ودعم عملاء PBAP/MAP إلى تسهيل هذا الهدف. يمكن إجراء التلغيم اليدوي عن طريق تشغيل خادم مع قوائم XML وبطاقات vcards وBMSGs معدلة يدويًا. يعد OBEX هدفًا غنيًا للتلغيم حيث يحتوي على العديد من هياكل TLV المتداخلة التي يمكن أن تمتد عبر رسائل متعددة الأجزاء. تزيد PBAP وMAP بشكل كبير من سطح الهجوم باستخدام محللات vcard وBMSG وXML.
لا يحتوي nOBEX على دعم مدمج للتلغيم الآلي، ولكن نظرًا لأنه مكتوب بلغة Python، فمن السهل توسيعه. يمكن بناء قدرات تلغيم أكثر قوة من خلال إقرانه بمحرك تحوير وتجهيز الجهاز المستهدف بأدوات القياس.
بعيدًا عن تلغيم MAP وPBAP على وحدات الرأس في السيارات، يمكن أيضًا استخدام nOBEX للاختبار الإيجابي العادي لـ PBAP وMAP وملفات OBEX الأخرى (مثل FTP) لكل من أدوار العميل والخادم. تم اختبار خوادم PBAP وMAP مع تطبيق OBEX Commander لنظام Android، حيث يمكن أن تتسبب اتصالات OBEX الخاطئة والبيانات الخاصة بالملف الجانبي المشوهة في العديد من الأعطال. علاوة على ذلك، يمكن استخدام دعم HFP لتلغيم أوامر AT يدويًا.