معلومات BLE (bleinfo / bi) — تعداد GATT والتفاعل معه
نظرة عامة
bleinfo (اختصارًا: bi) عميل GATT لـ BLE مدمج في العنقاء. يتّصل بجهاز Bluetooth منخفض الطاقة، ويقرأ شجرة خدماته/خصائصه الكاملة، ويفكّ القيم باستخدام واصفات نوع GATT القياسية، ويوفّر أدوات تفاعلية للمراقبة السلبية والتفاعل الفعّال.
وهو مكافئ BLE لـ ماسح منافذ + ملتقِط بانر + حاقن حزم في أمر واحد.
بداية سريعة
sbl # مسح أجهزة BLE أوّلًا
bi 0 # الاتصال بالجهاز رقم 0
bi 3 # الاتصال بالجهاز رقم 3
bi aa:bb:cc:dd:ee:ff # الاتصال بعنوان MAC خام
bi all # تعداد كل جهاز من آخر مسح sbl
مفاتيح التنقّل
عرض GATT:
| المفتاح | الإجراء |
|---|---|
a / l | الصفحة السابقة / التالية |
n | بدء ترصّد notify/indicate (30 ثانية) |
r | Write-cap — إعادة تشغيل قيمة إشعار ملتقَطة نحو الجهاز |
w | الكتابة إلى خاصّية قابلة للكتابة (يعيد الاتصال ثم يكتب) |
f | تشويش خاصّية قابلة للكتابة (seq / random / boundary / oversized / flood) |
g | مسح إساءة — مطرقة قراءة على كل خاصّية، ووسم تسريبات القراءة بلا مصادقة |
b | تدقيق أمني — وضعية الوصلة (تشفير/اقتران/ارتباط، عدد القراءات/الكتابات بلا مصادقة) + مسح تسريب القيم |
p | تبديل وضع الاقتران / الارتباط |
s | حفظ شجرة GATT إلى بطاقة SD |
q | الخروج |
شاشة الترصّد (أثناء [n]):
| المفتاح | الإجراء |
|---|---|
w | الكتابة إلى خاصّية دون قطع الاتصال — يظهر الردّ في تدفّق الترصّد |
q | إيقاف الترصّد، حفظ السجلّ، والعودة لعرض GATT |
تظهر المفاتيح في التذييل حين تكون ذات صلة فقط:
[n]إن وُجدت خصائص notify/indicate، و[r]إن وُجد ملفّ التقاط.ble، و[w]/[f]إن وُجدت خصائص قابلة للكتابة. أمّا[b]auditو[g]abuseفمتاحان دائمًا.
ما يعرضه
بعد الاتصال، يقرأ bi بنية GATT الكاملة ويعرضها مُقسَّمة لصفحات:
[GATT] aa:bb:cc:dd:ee:ff 1/3
────────────────────────────────
SVC 0x180a DeviceInfo
0x2a29 [R ] Manufacturer:"Polar"
0x2a24 [R ] ModelNum:"H10"
0x2a26 [R ] FirmwareRev:"3.1.1"
SVC 0x180f Battery
0x2a19 [R ] BattLevel:87
SVC 0xfb005c~ [RWN]
!0xfb005d~ [W ] (UnlockKey)
────────────────────────────────
[q]qt [a/l]pg [n]sniff [w]wr[f]fz [b]audit [g]abuse [s]save [p]pair
ترميز الخطر بالألوان (سطريًّا، على كل سطر):
- بادئة
!— خطر عالٍ (16 أو 32 بايت ثنائيًّا = حجم مفتاح AES، أو كتلة تبدو base64) - بادئة
~— خطر متوسّط (سلسلة هيكس ≥ 8 أحرف = سرّ مُرمَّز، أو قيمة 4–8 أرقام = PIN) - سطر برتقالي — خطر منخفض (قابل للكتابة + وصف مستخدم يبدو حسّاسًا)
- أبيض / عادي — بلا وسم
شرح الأعمدة:
- UUID — الـ 16 بت يُعرَض
0x1234، والـ 128 بت مقتطعًا12345678~ - Props —
Rقابل للقراءة ·Wقابل للكتابة ·Nقابل للإشعار ·Iindicate - Value — يُفكّ باستخدام صيغة العرض 0x2904 إن وُجدت، وإلّا:
- ASCII قابل للطباعة ←
"سلسلة بين علامتي اقتباس" - بايت واحد ←
0xXX - ثنائي ← تفريغ هيكس (
DE AD BE EF..)
- ASCII قابل للطباعة ←
- Name — معرّفات UUID المعروفة تُحَلّ لأسماء بشرية (DeviceName و BattLevel …)
- (desc) — وصف المستخدم 0x2901 يُعرَض بين قوسين للخصائص المجهولة القابلة للكتابة فقط
قراءة الواصفات
يقرأ bi واصفَي GATT إضافيَّين إلى جانب القيمة:
0x2901 — وصف المستخدم
تسمية نصّية حرّة يضبطها مصنّع الجهاز. وغالبًا تكشف غرض الخصائص الخاصّة ذات 128 بت غير الموجودة في مواصفة GATT.
مثال: خاصّية للكتابة فقط في قفل ذكي قد تكشف (UnlockCommand) أو (SetPIN) عبر وصف المستخدم، حتى وإن تعذّرت قراءة قيمتها الحالية.
0x2904 — صيغة العرض
تخبر bi كيف يفكّ البايتات الخام:
| النوع | يُفكّ كـ |
|---|---|
0x04 | uint8 |
0x06 | uint16 LE |
0x08 | uint32 LE |
0x0C | int8 |
0x0D | int16 LE |
0x16 | سلسلة UTF-8 |
مستوى البطارية بلا 0x2904 يظهر 0x57. ومعها: 87. ونبض القلب بلا 0x2904 يظهر 48 00. ومعها: 72.
ترصّد Notify / Indicate ([n])
يشترك في كل خصائص N وI معًا، ثم يبثّ القيم حيًّا لمدّة 30 ثانية.
[SNIFF] aa:bb:cc:dd:ee:ff 00:24
────────────────────────────────
1.2s 0xfb005~ 48 00 00 00 1A 2B
2.4s 0xfb005~ 49 00 00 00 1A 2C
4.8s 0x2a37 49 00
────────────────────────────────
subs:2 total:4 [w]write [q]stop
- Notify — يدفع الجهاز دون إقرار (أرسِل وانسَ)
- Indicate — يدفع الجهاز وينتظر إقرارك قبل إرسال التالي
يُلتقَط كلاهما في الذاكرة الحلقية نفسها. وبعد انتهاء الجلسة، يُحفَظ السجلّ تلقائيًّا في /apps/bleinfo/<mac>_sniff.txt إن وُجدت SD.
إيقاف مبكّر: اضغط q. ويُحفَظ السجلّ الجزئي رغم ذلك.
الكتابة أثناء الترصّد ([w] داخل شاشة الترصّد)
اضغط [w] أثناء الترصّد لإرسال أمر دون قطع الاتصال. يبقى الاشتراك نشطًا — وأي ردّ يرسله الجهاز يظهر فورًا في تدفّق الترصّد. وهذه الطريقة الصحيحة لفحص بروتوكولات الطلب/الردّ:
[n] → الاشتراك في كل خصائص notify
[w] → اختر خاصّية → اكتب الحمولة → Enter → "Sent! Watch sniff for reply."
→ يظهر الردّ خلال أجزاء من الثانية
[q] → إيقاف الترصّد، حفظ تلقائي للسجلّ
هذا يتجنّب تأخير إعادة الاتصال الذي يتطلّبه [w] منفصلٌ من عرض GATT.
الكتابة ([w])
يرسل بايتات إلى خاصّية قابلة للكتابة. استخدمه لـ:
- إرسال الأوامر (تشغيل/إيقاف، تغيير الإعدادات)
- اختبار التحقّق من المُدخَلات
- إطلاق إشعارات ردّ
السير:
- اضغط
[w]— اختر الخاصّية الهدف من قائمة مُرقَّمة - أدخِل الحمولة هيكسًا (
DE AD BE EF) أو ASCII (hello) ثم Enter - يتّصل
bi، ويجد الخاصّية بمعرّفها، ويجرّب الكتابة مع الردّ ثم يعود تلقائيًّا للكتابة بلا ردّ - يعرض
Write OK.أوWrite failed.
قواعد إدخال الهيكس:
- المسافات اختيارية:
DEADBEEFوDE AD BE EFكلاهما يعمل - إن لم يكن الإدخال هيكسًا صالحًا، عُومِل بايتات ASCII خام
- 20 بايت كحدّ أقصى
- كرة التتبّع يسار/يمين تحرّك المؤشّر داخل الإدخال — لتصحيح خطأ دون حذف كل شيء
- Backspace يحذف الحرف يسار المؤشّر
التشويش ([f])
يرسل سلسلة طلبات كتابة إلى خاصّية قابلة للكتابة لإيجاد ثغرات التحقّق من المُدخَلات، أو إطلاق انتقالات حالة غير متوقّعة، أو إسقاط الجهاز.
الأوضاع:
| الوضع | الحمولات | الاستخدام |
|---|---|---|
1 seq | 0x00 ← 0xFF (256 كتابة، بايت لكلٍّ) | تغطية كامل فضاء البايت الواحد |
2 rand | 64 كتابة، 1–4 بايت عشوائية (LCG) | تشويش بروتوكول متعدّد البايتات |
3 boundary | 0x00 0x01 0x7F 0x80 0xFE 0xFF | اختبار خطأ-بواحد والفيضان |
4 oversized | 5 كتابات متصاعدة: 20 ← 64 ← 128 ← 255 ← 509 بايت | معالجة MTU / الكتابة الطويلة / فيضان المخزن |
5 flood | 500 كتابة سريعة 4 بايت بلا تنظيم، مع عرض الكتابات/ثانية حيًّا | سلوك DoS / التعليق / تحديد المعدّل |
ما ينبغي مراقبته:
- ارتفاع عدد الأخطاء — الجهاز يرفض القيم السيّئة (أمان جيّد)
- بقاء عدد الأخطاء صفرًا — الجهاز يقبل كل شيء بما فيه العشوائي (سيّئ)
- “Device disconnected!” — انهيار أو حماية أُطلِقت؛ لاحظ الحمولة
- تفاعل الشاشة — أصبت مسار تحكّم فعّالًا
- قفز الأخطاء عند بايت معيّن — عُثِر على شرط حدّي
- قبول oversized — لا تحقّق من الطول على الكتابات (قد يفيض مخزنًا ثابتًا)
- بقاء معدّل flood مرتفعًا / تعليق الجهاز — لا تحديد معدّل؛ سطح DoS
التنظيم حسب الوضع: 80 مِلّي ثانية (seq/rand/boundary)، و250 مِلّي ثانية (oversized)، وبلا خنق (flood). و[q] يوقف مبكّرًا.
شاشة النتيجة تنتظر
[q]— بعد انتهاء التشغيل (أو قطع الجهاز) يبقى ملخّصsent/errعلى الشاشة حتى تضغط[q]؛ ولا يُغلق تلقائيًّا لتقرأ النتيجة.
لماذا يهمّ: يُثبِت ما إذا كان الجهاز يتحقّق من المُدخَل الذي يقبله. فقبول oversized = لا فحص طول (فيضان مخزن محتمل)؛ وانقطاع/انهيار أثناء التشغيل = خلل برمجي أطلقته؛ وflood لا يبطؤ = لا تحديد معدّل (سطح DoS).
مسح الإساءة ([g])
مطرقة قراءة لـ التحكّم المكسور بالوصول. يعيد الاتصال ويحاول قراءة GATT على كل خاصّية — متجاهلًا خاصّية القراءة المُعلَنة — ثم يصنّف ما عاد:
| الوسم | المعنى |
|---|---|
LEAK (أحمر) | الخاصّية بلا خاصّية قراءة لكنها أعادت بيانات — كان على الخادم رفض القراءة |
open (أصفر) | خاصّية قابلة للقراءة أعادت بيانات عبر وصلة غير مشفّرة (بلا اقتران) |
يعرض سطر الملخّص عدّادات tried / leak / open (مع (abrt) إن أوقفته مبكّرًا). ونتائج LEAK هي المهمّة: فهي تعني أن الطرفي يعتمد على احترام العميل لرايات الخصائص بدل فرض التحكّم بالوصول على جانب الخادم. و[a]/[l] للتصفّح، و[q] للعودة. وهذا يتجاوز [b]audit الذي يقرأ فقط الخصائص التي تُعلن القراءة.
لماذا يهمّ: يجيب “هل أقرأ بيانات حاول الجهاز إخفاءها، دون اقتران؟” فـ LEAK على قفل/جهاز يُرتدى/مستشعر قد يكشف الإعدادات أو المفاتيح أو القياسات لأي أحد في النطاق. أمّا نتيجة كلّها خضراء فتعني أن الجهاز يفرض التحكّم بالوصول كما ينبغي.
شاشة الخروج/النتيجة: تنتظر النتائج
[q]ولا تُغلق تلقائيًّا. وإن رأيت بدلًا من ذلك “Reconnect failed.”، فمسح الإساءة يُسقِط الاتصال الأوّل ويفتح اتصالًا جديدًا — وبعض الأجهزة تسمح باتصال BLE واحد فقط وترفضه. أعد المحاولة على جهاز يقبل إعادة الاتصال.
التدقيق الأمني ([b])
تقرير من جزأين، متاح دائمًا أثناء الاتصال. أوّلًا وضعية التحكّم بالوصول للوصلة (مأخوذة حيًّا من الاتصال — يتّصل bi بلا اقتران، فأي شيء قابل للقراءة يُثبِت تحكّمًا مكسورًا)، ثم مسح تسريب القيم (خصائص تبدو محتوياتها أسرارًا).
[AUDIT] BLE Security Posture
────────────────────────────────
Link: OPEN - not encrypted
Pairing: none (no auth needed)
Bonded: no
No-auth: R:7 W:2 chars
────────────────────────────────
Value leak scan:
! 0xfb005d~ [W ] (UnlockKey)
RISK: binary 16B (AES key size?)
~ 0xfb005e~ [RW ] 31 32 33 34 35 36
RISK: 6-digit value (PIN?)
────────────────────────────────
2 flagged [q] back
حقول الوضعية:
| الحقل | المعنى |
|---|---|
Link | ENCRYPTED (NB key) (أخضر) أو OPEN - not encrypted (أحمر) وقت التعداد |
Pairing | none (بلا تشفير)، أو Just Works (no MITM) (أصفر)، أو authenticated (MITM) (أخضر) |
Bonded | هل الاتصال مرتبط |
No-auth | عدد الخصائص القابلة للقراءة / الكتابة دون تشفير — الاكتشاف الجوهري |
تُكتَب الوضعية (وراية leaks=yes/no) في تقرير /apps/bleinfo/<mac>.txt المحفوظ عند [s].
منطق تقييم الخطر:
| الوسم | الشرط | المعنى |
|---|---|---|
! عالٍ | القيمة 16 أو 32 بايت ثنائيًّا بالضبط | يطابق حجم مفتاح AES-128 / AES-256 |
! عالٍ | القيمة تبدو كتلة base64 (≥16 حرفًا، ينتهي بـ =) | سرّ مُرمَّز أو مادّة مفتاح |
~ متوسّط | سلسلة هيكس ≥ 8 أحرف | قد تكون مفتاحًا/رمزًا بترميز هيكس |
~ متوسّط | سلسلة رقمية 4–8 أرقام | تبدو رمز PIN |
| منخفض | خاصّية قابلة للكتابة بوصف مستخدم يبدو حسّاسًا | وصول كتابة مباشر لتحكّم حسّاس |
يُقيَّم الخطر وقت التعداد. و[b]audit يظهر دائمًا في التذييل — فتقرير الوضعية مفيد حتى بلا قيم موسومة.
اضغط q للعودة لعرض GATT الرئيسي.
Write-Cap ([r]wcap)
يتيح لك Write-cap أخذ قيمة ملتقَطة أثناء ترصّد [n] وكتابتها إلى خاصّية قابلة للكتابة على الجهاز نفسه (أو جهاز آخر). وهو مكافئ BLE لإعادة تشغيل الحزم على طبقة قيمة GATT.
متى يعمل:
- أجهزة IoT الخاصّة التي تستخدم الخاصّية نفسها للخرج (notify) والدخل (write)
- أجهزة ببروتوكولات أوامر بسيطة تُرسَل كتابةً وتُقَرّ إشعارًا على الخاصّية نفسها
متى لا يعمل:
- مِلفّات GATT القياسية: خصائص notify فقط لا يمكن كتابتها
- مصادقة التحدّي-والردّ: حتى لو أعدت البايتات الصحيحة، يغيّر الخادم رقمه العشوائي كل جلسة
- أجهزة تتحقّق من أرقام تسلسل أو طوابع زمنية مضمّنة في الحمولة
الالتقاطات المحفوظة: يحفظ ترصّد [n] تلقائيًّا ملفّ .ble في /apps/bleinfo/<mac>_replay.ble بعد كل جلسة. ويقرأ Write-cap من هذا الملفّ أو من ذاكرة الترصّد الحالية.
السير:
- اضغط
[r]— يظهر مُنتقي المصدر:[1]استخدام جلسة الترصّد الحالية (في الذاكرة)[2]التحميل من SD — يسرد ملفّات.bleفي/apps/bleinfo/
- مُنتقي الحزم — يعرض الحزم الملتقَطة، اختر واحدة
- مُنتقي الخاصّية — يعرض الخصائص القابلة للكتابة، اختر الهدف
- يعيد
biالاتصال ويكتب البايتات المختارة للخاصّية المختارة
صيغة ملفّ الالتقاط .ble
تُحفَظ جلسات الترصّد ملفّات .ble نصّية:
ALANQA_BLE_REPLAY
MAC aa:bb:cc:dd:ee:ff
TYPE 1
PKT 0x2a37 1234 4800
PKT 0xfb005~ 2500 DEADBEEF01020304
MAC— عنوان MAC للجهازTYPE— نوع العنوان (0=عامّ، 1=عشوائي)PKT <uuid> <elapsed_ms> <hex_bytes>— إشعار ملتقَط واحد لكل سطر؛ بايتات الهيكس متلاصقة بلا مسافات
يمكن تحميل هذه الملفّات في Write-cap على T-Deck نفسه أو مختلف.
الاقتران ([p])
يبدّل الارتباط + MITM + Secure Connections لعمليات إعادة الاتصال اللاحقة.
عند التفعيل (يظهر [p]PAIR ON في التذييل)، يضبط bi:
- الارتباط — يحفظ المفتاح طويل الأمد لإعادة الاتصال
- حماية MITM — تتطلّب تفاعل المستخدم للتأكيد
- Secure Connections — يستخدم تبادل مفاتيح ECDH
إن طلب الجهاز مفتاح مرور، ظهر طلب:
Passkey (6 digits):
> _
اكتب رمز PIN المكوّن من 6 أرقام المعروض على الجهاز.
وإن استُخدِمت المقارنة الرقمية:
Confirm PIN 123456? [y/n]
متى تستخدمه: بعض الأجهزة تخفي خدمات أو تقيّد الوصول للخصائص حتى الارتباط. فعّل [p]، ثم اضغط [n] أو [w] — يرتبط bi عند إعادة الاتصال التالية وتصبح شجرة الخدمات كاملة متاحة.
متى لا تستخدمه: الاستطلاع والترصّد السلبي. فالارتباط يكتب مفتاحًا طويل الأمد في ذاكرة الجهاز. للاستطلاع الخالص، اترك الاقتران متوقّفًا.
مسح عدّة أجهزة (bi all)
يتّصل بكل جهاز من آخر مسح sbl بالتتابع، ويُعدّد GATT، ويحفظ كل نتيجة إلى SD تلقائيًّا.
bi all
[1/8] aa:bb:cc:dd:ee:ff
ok (3 svcs)
[2/8] 11:22:33:44:55:66
failed
Done. Results in /apps/bleinfo/
- المهلة لكل جهاز: 4 ثوانٍ
- اضغط
qلإيقاف الجولة مبكّرًا - الملفّات المحفوظة:
/apps/bleinfo/<mac>.txtلكل جهاز استجاب - الأجهزة التي ترفض الاتصال أو بلا خدمات تُسجَّل
failedعلى الشاشة
استخدم هذا لرسم كل أجهزة BLE في مساحةٍ دون التفاعل مع كلٍّ يدويًّا.
مُخرَجات بطاقة SD
- بنية GATT —
/apps/bleinfo/<mac>.txt(يُحفَظ بمفتاح[s]أوbi all) - سجلّ Notify —
/apps/bleinfo/<mac>_sniff.txt(يُحفَظ تلقائيًّا بعد كل جلسة، بالإلحاق) - التقاط Write-cap —
/apps/bleinfo/<mac>_replay.ble⚠️ لم يُختبَر بعد (بايتات خام لكل إشعار ملتقَط)
حالات الاستخدام في الكشف
1. التعرّف على جهاز دون تطبيقه
شغّل bi <index>. اقرأ خدمة DeviceInfo (0x180A) — فالمصنّع والطراز والفيرموير والرقم التسلسلي عادةً قابلة للقراءة بلا ارتباط على أجهزة المستهلكين. قابِل الطراز والمصنّع لتحديد العتاد بدقّة.
2. إيجاد قنوات تحكّم مخفية
تكشف معظم أجهزة BLE أكثر ممّا يستخدمه تطبيقها. يعرض bi كل الخصائص بما فيها ما لا يمسّه التطبيق الرسمي. ابحث عن: خصائص [W] لا يكتب لها التطبيق (أوامر غير موثّقة)، وخصائص [R] بقيم غريبة (رايات تصحيح، عدّادات داخلية)، وخصائص [N] لا يشترك بها التطبيق (قياسات مخفية).
3. كشف أجهزة BLE غير الآمنة
| الملاحظة | الدلالة |
|---|---|
| كل الخدمات مرئية بلا ارتباط | لا تحكّم بالوصول |
خصائص الكتابة تقبل أي قيمة (أخطاء [f]=0) | لا تحقّق من المُدخَلات |
| DeviceInfo يعيد رقمًا تسلسليًّا/فيرموير حقيقيًّا | لا تعمية |
| Notify يدفع بيانات قبل المصادقة | قياسات بلا مصادقة |
| نفس MAC الثابت كل إقلاع | قابل للتتبّع، بلا عشوائية |
4. رسم سطح هجوم BLE قبل اختبار الاختراق
شغّل bi all بعد sbl. راجع /apps/bleinfo/ على حاسوب. لكل جهاز لاحظ الخدمات الحاضرة، وخصائص الكتابة، و Notify بلا ارتباط، وهل يُشترَط الاقتران — فتحصل على جرد مُهيكَل مرتّب حسب سطح الهجوم.
5. التحقّق من أجهزتك الخاصة
شغّل bi ضدّ عتاد BLE الخاص بك للتحقّق من كشف الخدمات المتوقّعة فقط، ورفض خصائص الكتابة للمُدخَل غير الصالح، واشتراط الارتباط للخصائص الحسّاسة، وعدم تسريب بيانات عبر إشعارات بلا مصادقة.
ملاحظات نوع العنوان
تستخدم معظم طرفيات BLE الحديثة عناوين عشوائية (النوع 1). أمّا الأقدم أو المضمّنة فتستخدم عناوين عامّة (النوع 0، محروقة في العتاد).
bi <index>— يستخدم نوع العنوان الملتقَط أثناءsbl(صحيح تلقائيًّا)bi <mac>— يجرّب العشوائي أوّلًا، ويعود للعامّ إن فشل الاتصال
إن استمرّ فشل الاتصال بجهاز معروف، فقد يكون غيّر عنوانه العشوائي (عنوان خاصّ قابل للحلّ). أعد sbl للحصول على العنوان الحالي.
مثال سير عمل: تدقيق ساعة ذكية
sbl # مسح — إيجاد الساعة بالفهرس 2
bi 2 # الاتصال وتعداد شجرة GATT كاملة
[b] # تدقيق — وضعية الوصلة + مسح تسريب القيم
[s] # حفظ شجرة GATT كاملة إلى SD
[n] # ترصّد — الاشتراك بكل خصائص notify/indicate معًا
[w] # (داخل الترصّد) اختر خاصّية أمر → اكتب الحمولة → Enter
[q] # إيقاف الترصّد — حفظ تلقائي لـ _sniff.txt و _replay.ble
[r] # write-cap — حمّل حزمة ملتقَطة، أعِد تشغيلها لخاصّية قابلة للكتابة
[f] → mode 3 # تشويش حدّي لخاصّية التحكّم
[p] → [n] # فعّل الاقتران، ارصد مجدّدًا — هل تظهر خدمات أكثر؟
q
الهندسة العكسية للبروتوكولات
bi مفيد خصّيصًا لفهم بروتوكولات BLE الخاصّة بلا توثيق عامّ. ويتيح مسار الترصّد+الكتابة رسم بنية أوامر الجهاز دون أي تطبيق أو شيفرة مصدرية.
المنهج:
[n]ارصد والجهاز خامل — لاحظ الحزم الأساسية (نبضات إبقاء، استطلاعات مستشعر)- تفاعل مع الجهاز فعليًّا (اضغط زرًّا، اضبط منبّهًا، غيّر إعدادًا)
- لاحظ أي حزمة جديدة ظهرت — فهي تُرمّز الإجراء الذي فعلته
- جرّب إرسال تلك الحزمة إلى خاصّية قابلة للكتابة عبر
[w]داخل الترصّد - راقب الردّ — إن تفاعل الجهاز، فقد وجدت قناة الأوامر
فكّ الحزم — تتبع معظم بروتوكولات BLE الخاصّة نمطًا: [START] [CMD] [BRAND/SYNC] [LENGTH] [DATA...] [CHECKSUM?]. فالبايتات الثابتة في كل حزمة = رأس/مزامنة البروتوكول؛ والبايتات المتغيّرة مع الأفعال الفعلية = الحمولة ذات المعنى.
الكتابة بلا ردّ: كثير من خصائص الأوامر الخاصّة تستخدم الكتابة بلا ردّ. يجرّب bi كليهما تلقائيًّا — وWrite OK. تعني تسليم البايتات بصرف النظر عن نوع الكتابة.
قنوات ردّ متعدّدة: بعض الأجهزة تردّ على خاصّية غير التي كتبت لها. فإن أظهر [w] Write OK. لكنك رأيت نوع حزمة جديدًا في تدفّق الترصّد على UUID مختلف، فتلك قناة الردّ.