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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Sniffle — متطفل Bluetooth 5 و 4.x LE لأجهزة TI CC1352/CC26x2 مع دعم للإعلانات الموسعة، جميع أوضاع PHY، تصفية MAC/RSSI، وتصدير PCAP متوافق مع Wireshark. | Kitploit
أدوات/GitHubGitHub/nccgroup/sniffle
أمان الأنظمة المدمجةالتقاط وتحليل الحزمأمن البلوتوثتخطيط الشبكةأمن الشبكات اللاسلكيةأمان الأجهزة وإنترنت الأشياء
GitHubnccgroup/sniffle

Sniffle

متطفل Bluetooth 5 و 4.x LE لأجهزة TI CC1352/CC26x2 مع دعم للإعلانات الموسعة، جميع أوضاع PHY، تصفية MAC/RSSI، وتصدير PCAP متوافق مع Wireshark.

عرض المستودع
1.2k162منذ 11 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Sniffle

Sniffle هي أداة استنشاق (sniffer) لبلوتوث 5 و 4.x (LE) باستخدام أجهزة TI CC1352/CC26x2.

يتميز Sniffle بعدد من الخصائص المفيدة، بما في ذلك:

  • دعم حزم الإعلان والبيانات ذات الطول الممتد لـ BT5/4.2
  • دعم خوارزميات اختيار القناة BT5 #1 و #2
  • دعم جميع أوضاع BT5 PHY (العادية 1M و 2M والأوضاع المرمّزة)
  • دعم استنشاق الإعلانات فقط وتجاهل الاتصالات
  • دعم عمليات تغيير خريطة القناة ومعلمات الاتصال وPHY
  • دعم تصفية الإعلانات حسب عنوان MAC وRSSI
  • دعم الإعلان الممتد BT5 (غير الدوري)
  • دعم التقاط الإعلانات من MAC هدف على جميع قنوات الإعلان الأساسية الثلاث باستخدام مستنشق واحد. هذا يجعل اكتشاف الاتصال أكثر موثوقية بنحو 3 مرات من معظم المستنشقات الأخرى التي تستنشق قناة إعلان واحدة فقط.
  • برمجيات جانب المضيف سهلة التوسيع ومكتوبة بلغة Python
  • تصدير PCAP متوافق مع Ubertooth
  • إضافة متوافقة مع Wireshark

المتطلبات الأساسية

  • أي من الأجهزة التالية (مكافئة وظيفيًا لـ Sniffle)
    • TI CC26x2R Launchpad Board: https://www.ti.com/tool/LAUNCHXL-CC26X2R1
    • TI CC2652RB Launchpad Board: https://www.ti.com/tool/LP-CC2652RB
    • TI CC1352R Launchpad Board: https://www.ti.com/tool/LAUNCHXL-CC1352R1
    • TI CC1352P Launchpad Board: https://www.ti.com/tool/LAUNCHXL-CC1352P
    • TI CC2652R7 Launchpad Board: https://www.ti.com/tool/LP-CC2652R7
    • TI CC1352P7 Launchpad Board: https://www.ti.com/tool/LP-CC1352P7
    • TI CC2651P3 Launchpad Board: https://www.ti.com/tool/LP-CC2651P3
    • TI CC1354P10 Launchpad Board: https://www.ti.com/tool/LP-EM-CC1354P10
    • SONOFF CC2652P USB Dongle Plus: https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus/
    • EC Catsniffer V3 CC1352 & RP2040 https://github.com/ElectronicCats/CatSniffer
  • سلسلة أدوات ARM GNU لهدف AArch32 المعدني العاري (arm-none-eabi): https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
  • TI SimpleLink Low Power F2 SDK 8.30.01.01: https://www.ti.com/tool/download/SIMPLELINK-LOWPOWER-F2-SDK/8.30.01.01
  • برنامج TI DSLite للبرمجة: انظر أدناه
  • Python 3.9+ مع تثبيت PySerial

إذا كنت لا تريد عناء إعداد بيئة بناء للبرنامج الثابت، يمكنك ببساطة كتابة ملفات البرنامج الثابت الجاهزة باستخدام UniFlash/DSLite. تُرفق ملفات البرنامج الثابت الجاهزة بالإصدارات في تبويب الإصدارات على GitHub لهذا المشروع. عند استخدام البرنامج الثابت الجاهز، تأكد من استخدام كود Python المطابق لوسم الإصدار بدلاً من master لتجنب مشكلات التوافق مع البرنامج الثابت المتأخر عن فرع master.

تثبيت GCC

إن arm-none-eabi-gcc المقدم عبر مدير حزم توزيعات لينكس المختلفة غالبًا ما يفتقر إلى بعض ملفات الرأس أو يتطلب بعض التغييرات على إعدادات الرابط. لتقليل المتاعب، أقترح استخدام ARM GCC المرتبط أعلاه. يمكنك فقط تنزيل الملفات التنفيذية الجاهزة واستخراجها.

تثبيت TI SDK

يتم توفير TI SDK كملف ثنائي قابل للتنفيذ يستخرج مجموعة من الكود المصدري بمجرد قبول اتفاقية الترخيص. على لينكس وماك، الدليل الافتراضي للتثبيت موجود داخل ~/ti/. يعمل هذا بشكل جيد وتتوقع ملفات البناء (makefiles) هذا المسار، لذا أقترح الالتزام بالافتراضي هنا. وينطبق الأمر نفسه على أداة TI SysConfig.

بعد استخراج SDK، ستحتاج إلى تعديل ملف makefile واحد ليطابق بيئة البناء الخاصة بك. داخل ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 (أو أينما تم تثبيت SDK) يوجد ملف makefile باسم imports.mak. المسارات الوحيدة التي يجب ضبطها هنا لبناء Sniffle هي GCC وXDC و cmake وSysConfig. لا نحتاج إلى مترجم CCS. انظر الـ diff أدناه كمثال، وقم بالتكييف حسب المكان الذي ثبّت فيه الأشياء.``` diff --git a/imports.mak b/imports.mak index b2cf5bf59..389d1a7c3 100644 --- a/imports.mak +++ b/imports.mak @@ -18,14 +18,14 @@

will build using each non-empty *_ARMCOMPILER cgtool.

-XDC_INSTALL_DIR ?= /home/username/ti/xdctools_3_62_01_15_core -SYSCONFIG_TOOL ?= /home/username/ti/ccs1270/ccs/utils/sysconfig_1.21.1/sysconfig_cli.sh +XDC_INSTALL_DIR ?= $(HOME)/ti/xdctools_3_62_01_15_core +SYSCONFIG_TOOL ?= $(HOME)/ti/sysconfig_1.21.1/sysconfig_cli.sh

-CMAKE ?= /home/username/cmake-3.21.3/bin/cmake +CMAKE ?= cmake PYTHON ?= python3

TICLANG_ARMCOMPILER ?= /home/username/ti/ccs1270/ccs/tools/compiler/ti-cgt-armllvm_3.2.2.LTS-0 -GCC_ARMCOMPILER ?= /home/username/arm-none-eabi-gcc/12.3.Rel1-0 +GCC_ARMCOMPILER ?= $(HOME)/arm_tools/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi IAR_ARMCOMPILER ?= /home/username/iar9.50.2

Uncomment this to enable the TFM build

root@kitploit:~
اعتبارًا من إصدار SDK 8.30.01.01، للتجميع مع الإصدارات الحديثة من GCC (وbinutils)،
يلزم إجراء تعديل بسيط على SDK لتجنب أخطاء الربط
"Unknown destination type (ARM/Thumb)" و"dangerous relocation: unsupported relocation".```
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
index 187cfd744..4cbf0d384 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
@@ -236,6 +236,7 @@ lab$1:
 @ user code has set the PRIMASK and not cleared it, or when single
 @ stepping with interrupts disabled.
 
+.type ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe, %function
 ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe:
         b   ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe
 
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
index 717f49c9a..1c83ed725 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
@@ -226,6 +226,7 @@ lab$1:
 @ user code has set the PRIMASK and not cleared it, or when single
 @ stepping with interrupts disabled.
 
+.type ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe, %function
 ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe:
         b   ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe

بعد إجراء هذا التعديل، ستحتاج إلى إعادة ترجمة SDK.``` cd ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 make build-gcc -j5

root@kitploit:~
### الحصول على DSLite

DSLite هو أداة TI للبرمجة والتصحيح عبر سطر الأوامر والمخصصة لمصححات XDS110. تحتوي لوحتا Launchpad من فئتي CC26xx وCC13xx على مصححات XDS110. لسوء الحظ، لا توفر TI تنزيلًا مستقلًا لأداة DSLite عبر سطر الأوامر. أسهل طريقة للحصول على DSLite هي تثبيت [UniFlash](http://www.ti.com/tool/download/UNIFLASH) من TI. وهو متاح لأنظمة Linux وMac وWindows. سيكون الملف التنفيذي لـ DSLite موجودًا في المسار `deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite` بالنسبة إلى دليل تثبيت UniFlash. على Linux، يكون دليل تثبيت UniFlash الافتراضي داخل `~/ti/`.

يجب وضع المجلد الذي يحتوي على الملف التنفيذي لـ DSLite في `$PATH` الخاص بك.

## بناء البرنامج الثابت (Firmware)

بمجرد تثبيت GCC وDSLite وSDK وتشغيلها، يجب أن يكون بناء Sniffle أمرًا مباشرًا. فقط انتقل إلى دليل `fw` وشغّل الأمر `make`. إذا لم تقم بتثبيت SDK في الدليل الافتراضي، فقد تحتاج إلى تعديل `SIMPLELINK_SDK_INSTALL_DIR` في ملف makefile.

إذا كنت تبني أو تثبّت على أحد أنواع Launchpad الأخرى غير CC26x2R، فيجب عليك تحديد `PLATFORM=xxx`، إما كوسيط للأمر make، أو بتعريفه كمتغير بيئة قبل استدعاء make. يمكن العثور على القيم المدعومة لـ `PLATFORM` في ملف makefile الخاص بالبرنامج الثابت. تأكد من تنفيذ `make clean` قبل البناء لمنصة مختلفة.

## تثبيت البرنامج الثابت (لوحة TI Launchpad)

لتثبيت Sniffle على لوحة CC26x2R Launchpad (الموصولة بالطاقة) باستخدام DSLite، شغّل `make load` داخل دليل `fw`. بالنسبة لأي نماذج أخرى من Launchpad، يجب تحديد وسيط `PLATFORM` للأمر make كما هو موصوف أعلاه. يمكنك أيضًا وميض الملف الثنائي المُجمَّع `sniffle.hex` باستخدام واجهة UniFlash الرسومية.

## تثبيت البرنامج الثابت (دونجل SONOFF USB)

لتثبيت Sniffle على دونجل SONOFF CC2652P (المزوَّد بجسر CP2102N USB/UART)، استخدم الأداة [JelmerT/cc2538-bsl](https://github.com/JelmerT/cc2538-bsl) لوميض البرنامج الثابت عبر مُحمّل الإقلاع المدمج في ROM باستخدام الأمر التالي:```
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv sniffle_cc1352p1_cc2652p1.hex

اعتبارًا من 10 يناير 2025، هناك خطأ في cc2538-bsl يمنعه من إعادة ضبط شريحة CC2562P في دونجل Sonoff بعد الوميض. الإصلاح لهذه المشكلة موجود في طلب السحب 173، ولم يتم دمجه بعد. في غضون ذلك، أثناء انتظار دمج طلب السحب، يمكنك استخدام fork الخاص بي على https://github.com/sultanqasim/cc2538-bsl.

في عام 2022، بسبب نقص الرقائق أثناء جائحة كوفيد-19، تم تصنيع بعض دونجلات Sonoff CC2652P باستخدام رقائق جسر USB/UART من نوع CP2102 (غير N) بحد أقصى 921600 باود. إذا كان لديك واحد من هذه، فستحتاج إلى وميض صورة برنامج ثابت مختلفة تستخدم سرعة باود أبطأ تبلغ 921600. هذا الإصدار الخاص بسرعة الباود الأبطأ يُسمى sniffle_cc1352p1_cc2652p1_1M.hex (متغير البناء CC2652P1F_1M). ستحتاج أيضًا إلى استدعاء أدوات Sniffle مع الخيار -b 921600 لتجاوز سرعة الباود الافتراضية البالغة 2000000.

تحذير: لا تقم بوميض متغير البناء الخاطئ باستخدام محمّل الإقلاع، أو قد يؤدي ذلك إلى تعطيل الجهاز (brick) وقفل نفسك خارج محمّل الإقلاع. بالنسبة لأجهزة Sonoff CC2652P، استخدم ملف sniffle_cc1352p1_cc2652p1.hex (متغير البناء CC2652P1F) أو ملف sniffle_cc1352p1_cc2652p1_1M.hex(متغير البناءCC2652P1F_1M`) لسرعة باود تبلغ 921600. إذا قمت بوميض المتغير الخاطئ وأغلقت على نفسك الوصول إلى محمّل الإقلاع، فمن المحتمل أن تتمكن من استعادة الجهاز باستخدام JTAG/SWD.

تثبيت البرنامج الثابت (Catsniffer V3)

توفر Electronic Cats أداة Catnip Uploader لتحميل البرنامج الثابت. للحصول على معلومات مفصلة، راجع المستودع. قم بتنزيل الأداة واتبع هذه الأوامر:```bash

Fetch the CatSniffer tools and their dependencies

[ec@sniffle]$ git clone https://github.com/ElectronicCats/CatSniffer-Tools.git [ec@sniffle]$ cd CatSniffer-Tools/catnip_uploader [ec@sniffle]$ pip install -r requirements.txt

Download the available firmwares

[ec@sniffle]$ python3 catnip_uploader.py releases [INFO] Fetching assets from https://api.github.com/repos/ElectronicCats/CatSniffer-Firmware/releases/latest [INFO] Release: board-v3.x-v1.1.0 [INFO] Fetching assets from https://api.github.com/repos/nccgroup/Sniffle/releases/latest [INFO] Release: v1.10.0 [INFO] Found local release: releases_board-v3.x-v1.1.0 [SUCCESS] Local release is up to date: board-v3.x-v1.1.0 [SUCCESS] Available releases: 0: sniffer_fw_CC1352P_7_v1.10.hex 1: airtag_scanner_CC1352P_7_v1.0.hex 2: nccgroup_v1.10.0_sniffle_cc1352p7_1M.hex 3: airtag_spoofer_CC1352P_7_v1.0.hex 4: sniffle_CC1352P_7_v1.7.hex

Install the firmware

[ec@sniffle]$ python3 catnip_uploader.py load 2 COMPORT

root@kitploit:~
تحتاج إلى تغيير *COMPORT* إلى المسار المناسب للوحة الخاصة بك.
باستخدام الأمر `python3 catnip_uploader.py load 2 COMPORT`، ستقوم بتحميل
البرنامج الثابت `2: nccgroup_v1.10.0_sniffle_cc1352p7_1M.hex`.
**لتحميل البرنامج الثابت، يتطلب Catsniffer V3 استخدام SerialPassthroughwithboot**.

**تحذير:** لا تومض نسخة البناء الخاطئة باستخدام مُحمِّل الإقلاع، أو أنك
تخاطر بتعطيل الجهاز وفقدان الوصول إلى مُحمِّل الإقلاع. إذا كنت
تستخدم البرنامج النصي `catnip_uploader.py` لجلب البرنامج الثابت وتثبيته، فسوف
يعرض فقط البرامج الثابتة المتوافقة. ومع ذلك، إذا اخترت تجميع وتثبيت
البرنامج الثابت يدويًا، فتأكد من استخدام نسخة البناء الصحيحة. بالنسبة لأجهزة CatSniffer
v3، استخدم ملف `sniffle_cc1352p7_1M.hex` (نسخة البناء `CC1352P74_1M`).
أجهزة CatSniffer v1.x/v2.x تستخدم نسخة شريحة مختلفة (CC1352P1) تتطلب
نسخة بناء مختلفة (نسخة `CC1352P1F3_1M`، صورة `sniffle_cc1352p1_cc2652p1_1M.hex`
). لم يتم اختبار Sniffle على أجهزة CatSniffer v1.x/v2.x، لكنها ستعمل
على الأرجح طالما قمت بوميض نسخة البناء المناسبة. إذا قمت بوميض
النسخة الخاطئة وفقدت الوصول إلى مُحمِّل الإقلاع، فقد يكون من الممكن استعادة
الجهاز باستخدام JTAG/SWD.

## استخدام Sniffer```
[skhan@serpent python_cli]$ ./sniff_receiver.py --help
usage: sniff_receiver.py [-h] [-s SERPORT] [-b BAUDRATE] [-c {37,38,39}] [-p] [-r RSSI]
                         [-m MAC] [-i IRK] [-S STRING] [-a] [-A] [-e] [-H] [-l] [-q]
                         [-Q PRELOAD] [-n] [-C] [-d] [-o OUTPUT]

Host-side receiver for Sniffle BLE5 sniffer

options:
  -h, --help            show this help message and exit
  -s SERPORT, --serport SERPORT
                        Sniffer serial port name
  -b BAUDRATE, --baudrate BAUDRATE
                        Sniffer serial port baud rate
  -c {37,38,39}, --advchan {37,38,39}
                        Advertising channel to listen on
  -p, --pause           Pause sniffer after disconnect
  -r RSSI, --rssi RSSI  Filter packets by minimum RSSI
  -m MAC, --mac MAC     Filter packets by advertiser MAC
  -i IRK, --irk IRK     Filter packets by advertiser IRK
  -S STRING, --string STRING
                        Filter for advertisements containing the specified string
  -a, --advonly         Passive scanning, don't follow connections
  -A, --scan            Active scanning, don't follow connections
  -e, --extadv          Capture BT5 extended (auxiliary) advertising
  -H, --hop             Hop primary advertising channels in extended mode
  -l, --longrange       Use long range (coded) PHY for primary advertising
  -q, --quiet           Don't display empty packets
  -Q PRELOAD, --preload PRELOAD
                        Preload expected encrypted connection parameter changes
  -n, --nophychange     Ignore encrypted PHY mode changes
  -C, --crcerr          Capture packets with CRC errors
  -d, --decode          Decode advertising data
  -o OUTPUT, --output OUTPUT
                        PCAP output file name

The XDS110 debugger on the Launchpad boards creates two serial ports. On Linux, they are typically named ttyACM0 and ttyACM1. The first of the two created serial ports is used to communicate with Sniffle. By default, the Python CLI communicates using the first CDC-ACM device it sees matching the TI XDS110 USB VID:PID combo, or the first Sonoff dongle it sees. You may need to override this with the -s command line option if you are using a different USB serial adapter or have additional USB CDC-ACM devices connected.

For the -r (RSSI filter) option, a value of -40 tends to work well if the sniffer is very close to or nearly touching the transmitting device. The RSSI filter is very useful for ignoring irrelevant advertisements in a busy RF environment. The RSSI filter is only active when capturing advertisements, as you always want to capture data channel traffic for a connection being followed. You probably don't want to use an RSSI filter when MAC filtering is active, as you may lose advertisements from the MAC address of interest when the RSSI is too low.

To hop along with advertisements and have reliable connection sniffing, you need to set up a MAC filter with the -m option. You should specify the MAC address of the peripheral device, not the central device. To figure out which MAC address to sniff, you can run the sniffer with RSSI filtering while placing the sniffer near the target. This will show you advertisements from the target device including its MAC address. It should be noted that many BLE devices advertise with a randomized MAC address rather than their "real" fixed MAC written on a label.

Most new BLE devices use Resolvable Private Addresses (RPAs) rather than fixed static or public addresses. While you can set up a MAC filter to a particular RPA, devices periodically change their RPA. RPAs can can be resolved (associated with a particular device) if the Identity Resolving Key (IRK) is known. Sniffle supports automated RPA resolution when the IRK is provided. This avoids the need to keep updating the MAC filter whenever the RPA changes. You can specify an IRK for Sniffle with the -i option; the IRK should be provided in hexadecimal format, with the most significant byte (MSB) first. Specifying an IRK allows Sniffle to channel hop with an advertiser the same way it does with a MAC filter. The IRK based MAC filtering feature (-i) is mutually exclusive with the static MAC filtering feature (-m).

There is also a convenience feature to automatically identify the MAC address of the advertiser whose advertisement or scan response contains a specified string (series of bytes). This is useful for devices with RPAs where the IRK is unknown, but the advertisement contains a sufficiently unique static string suitable for identification. This feature uses the -S option, with the string specified using standard escape sequences. For example, to look for an advertiser whose advertisement contains the hex byte sequence DE AD BE EF, specify -S "\xDE\xAD\xBE\xEF". To look for an advertiser with the string "hello", simply specify -S "hello". When the string search feature is used, initially all MAC addresses will be accepted till an advertisement containing the search string is found. After that, a MAC filter will be set up with the corresponding advertiser's MAC address, and any RSSI filter would be automatically disabled.

To enable following auxiliary pointers in Bluetooth 5 extended advertising, enable the -e option. To improve performance and reliability in extended advertising capture, this option disables hopping on the primary advertising channels, even when a MAC filter is set up. If you are unsure whether a connection will be established via legacy or extended advertising, you can enable the -H flag in conjunction with -e to perform primary channel hopping with legacy advertisements, and scheduled listening to extended advertisement auxiliary packets. When combining -e and -H, the reliability of connection detection may be reduced compared to hopping on primary (legacy) or secondary (extended) advertising channels alone.

To sniff the long range PHY on primary advertising channels, specify the -l option. Note that no hopping between primary advertising channels is supported in long range mode, since all long range advertising uses the BT5 extended mechanism. Under the extended mechanism, auxiliary pointers on all three primary channels point to the same auxiliary packet, so hopping between primary channels is unnecessary.

To not print empty data packets on screen while following a connection, use the -q flag. This makes it easier to observe meaningful communications in real time, but may obscure when connection following is flaky or lost.

For encrypted connections, Sniffle supports detecting connection parameter updates even when the encryption key is unknown, and it attempts to measure the new parameters. However, if you know the new connection interval and Instant delta to expect in encrypted connection parameter updates, you can specify them with the --preload/-Q option to improve performance/reliability. The expected Interval:DeltaInstant pair should be provided as colon separated integers. Interval is an integer representing multiples of 1.25 ms (as defined in LL_CONNECTION_UPDATE_IND). DeltaInstant is the number of connection events between when the connection update packet is transmitted and when the new parameters are applied. DeltaInstant must be greater than or equal to 6, as per the Bluetooth specification's requirements for central devices. If multiple encrypted parameter updates are expected, you can provide multiple parameter pairs, separated by commas (eg. 6:7,39:8). If you have a device that issues encrypted PHY update PDUs that don't change the PHY, or puts out encrypted LE power control PDUs without any PHY changes, you can use the --nophychange/-n option.

To stop the sniffer, press Ctrl-C.

If for some reason the sniffer firmware locks up and refuses to capture any traffic even with filters disabled, you should reset the sniffer MCU. On Launchpad boards, the reset button is located beside the micro USB port.

Scanner Usage```

usage: scanner.py [-h] [-s SERPORT] [-b BAUDRATE] [-c {37,38,39}] [-r RSSI] [-l] [-d] [-o OUTPUT]

Scanner utility for Sniffle BLE5 sniffer

options: -h, --help show this help message and exit -s SERPORT, --serport SERPORT Sniffer serial port name -b BAUDRATE, --baudrate BAUDRATE Sniffer serial port baud rate -c {37,38,39}, --advchan {37,38,39} Advertising channel to listen on -r RSSI, --rssi RSSI Filter packets by minimum RSSI -l, --longrange Use long range (coded) PHY for primary advertising -d, --decode Decode advertising data -o OUTPUT, --output OUTPUT PCAP output file name

root@kitploit:~
تعمل وسائط سطر أوامر الماسح الضوئي بنفس طريقة عمل أداة الاستشعار. الغرض من أداة الماسح الضوئي هو جمع قائمة بالأجهزة القريبة التي تُعلن عن وجودها، وإصدار طلبات فحص نشطة للأجهزة المرصودة، دون الحصول على الانهمار الهائل من البيانات سريعة التمرير التي تحصل عليها مع أداة الاستشعار. سيدخل العتاد/البرنامج الثابت في وضع فحص نشط حيث سيقوم بالإبلاغ عن الإعلانات المستلمة، وإصدار طلبات فحص لتلك القابلة للفحص، والإبلاغ عن استجابات الفحص المستلمة. ستسجّل أداة الماسح الضوئي عناوين MAC المرصودة وتبلغ عنها مرة واحدة فقط دون إغراق الشاشة. بمجرد الانتهاء من التقاط الإعلانات، اضغط على Ctrl-C لإيقاف الفحص والإبلاغ عن النتائج. سيعرض الماسح الضوئي آخر إعلان واستجابة فحص من كل هدف. سيتم فرز نتائج الفحص حسب RSSI بترتيب تنازلي.

## أمثلة الاستخدام

استشعر جميع الإعلانات على channel 38، وتجاهل RSSI < -50، وابقَ على قناة الإعلان حتى عند رؤية CONNECT\_REQs.```
./sniff_receiver.py -c 38 -r -50 -a

التقط الإعلانات من MAC 12:34:56:78:9A:BC، والزم قناة الإعلان حتى عند رؤية CONNECT_REQs، واحفظ الإعلانات في data1.pcap.``` ./sniff_receiver.py -m 12:34:56:78:9A:BC -a -o data1.pcap

root@kitploit:~
قم بالتقاط الإعلانات والاتصالات لأول عنوان MAC يُرى بمستوى
RSSI >= -40. سيتم تعطيل مرشح RSSI تلقائيًا بمجرد
تثبيت عنوان MAC. احفظ البيانات الملتقطة في `data2.pcap`.```
./sniff_receiver.py -m top -r -40 -o data2.pcap

التقط الإعلانات والاتصالات من الجهاز الطرفي باستخدام IRK بترتيب البايت الكبير 4E0BEA5355866BE38EF0AC2E3F0EBC22. قم بتحميل مسبق لتحديثين متوقعين لمعاملات الاتصال المشفرة؛ الأول بفاصل زمني (Interval) قيمته 6، يحدث عند لحظة 6 أحداث اتصال بعد ملاحظة المتشمم لرسالة LL_CONNECTION_UPDATE_IND المشفرة. أما تحديث الاتصال المشفر المتوقع الثاني فله فاصل زمني (Interval) قيمته 39، وDeltaInstant قيمته 6 أيضًا.``` ./sniff_receiver.py -i 4E0BEA5355866BE38EF0AC2E3F0EBC22 -Q 6:6,39:6

root@kitploit:~
مراقبة إعلانات واتصالات BT5 الموسّعة من الأجهزة القريبة (RSSI >= -55).```
./sniff_receiver.py -r -55 -e

التقط الإعلانات القديمة والموسّعة والاتصالات من الجهاز بعنوان MAC المحدد. احفظ البيانات الملتقطة في data3.pcap.``` ./sniff_receiver.py -eH -m 12:34:56:78:9A:BC -o data3.pcap

root@kitploit:~
التقط الإعلانات الموسعة والاتصالات باستخدام الطبقة المادية الأولية طويلة المدى على
القناة 38.```
./sniff_receiver.py -le -c 38

قم بالمسح النشط على القناة 39 بحثًا عن الإعلانات ذات قيمة RSSI أكبر من -50.``` ./scanner.py -c 39 -r -50

root@kitploit:~
## الحصول على IRK

إذا كان لديك هاتف Android بصلاحيات الروت، فيمكنك العثور على مفاتيح IRK (وLTK) في ملف إعدادات Bluedroid. على Android 8.1، يقع هذا الملف في المسار `/data/misc/bluedroid/bt_config.conf`. يحدد `LE_LOCAL_KEY_IRK` مفتاح IRK الخاص بجهاز Android نفسه، وتشير أول 16 بايت من `LE_KEY_PID` لكل جهاز مقترن في الملف إلى مفتاح IRK الخاص بالجهاز المقترن. لاحظ أن المفاتيح المخزنة في هذا الملف بتنسيق Little Endian، لذلك **يجب عكس ترتيب البايتات للمفاتيح في هذا الملف.** على سبيل المثال، يجب تحويل مفتاح IRK بتنسيق Little Endian وهو 22BC0E3F2EACF08EE36B865553EA0B4E إلى 4E0BEA5355866BE38EF0AC2E3F0EBC22 (بتنسيق Big Endian) عند تمريره إلى Sniffle باستخدام الخيار `-i`.

يمكنك أيضًا العثور على IRK وLTK عبر سجلات HCI Snoop الملتقطة على Android أو iOS دون الحصول على صلاحية الروت للجهاز:

* Android: <https://novelbits.s3.us-east-2.amazonaws.com/Developer+Guides/Android+Bluetooth+Debugging+Guide.pdf>
* iOS: <https://novelbits.s3.us-east-2.amazonaws.com/Developer+Guides/iOS+Bluetooth+Debugging+Guide.pdf>

## إضافة Wireshark

تتضمن Sniffle إضافةً لبرنامج Wireshark تتيح تشغيل Sniffle تلقائيًا من واجهة Wireshark الرسومية عبر اختيار واجهة الالتقاط 'Sniffle'.

لتثبيت إضافة Sniffle، ابحث أولاً عن موقع مجلد Extcap الشخصي في مربع حوار 'About Wireshark' (*Help* > *About Wireshark* > *Folders* > *Personal Extcap path*). على أنظمة POSIX (Linux وMac OS) التي تعمل بإصدارات حديثة من Wireshark (4.2.0+)، يوجد هذا المجلد في المسار `~/.local/lib/wireshark/extcap`. أما في Windows، فيمكن العثور عليه في `%USERPROFILE%\AppData\Roaming\Wireshark\extcap`.

على أنظمة POSIX، يمكنك ببساطة إنشاء رابط رمزي (symlink) لإضافة Sniffle extcap في دليل extcap الشخصي لـ Wireshark:```
mkdir -p ~/.local/lib/wireshark/extcap
ln -s $(pwd)/python_cli/sniffle_extcap.py ~/.local/lib/wireshark/extcap

على نظام Mac OS، قد يحاول Wireshark استخدام Python الخاص بـ Xcode بدلاً من Python الموجود في PATH الخاص بك والمحدد في ملف تعريف الصدفة (shell profile). وبالتالي، قد لا يظهر ملحق Sniffle في واجهات extcap إذا لم تكن PySerial مثبتة لدى Python الخاص بـ Xcode. لإصلاح ذلك، يمكنك تعديل سطر shebang في sniffle_extcap.py ليشير مباشرة إلى Python الذي يحتوي على PySerial مثبتة، على سبيل المثال Python الخاص بـ Homebrew في /opt/homebrew/bin/python3، بدلاً من /usr/bin/env python3.

على Windows، يمكنك نسخ الملفات والمجلدات التالية من دليل python_cli إلى مجلد Extcap الشخصي الخاص بك:``` sniffle/ sniffle_extcap.py sniffle_extcap.bat

root@kitploit:~
على نظام ويندوز، قد يكون من الضروري تعديل ملف `sniffle_extcap.bat` لتحديد موقع
مفسّر بايثون إذا كان دليل التثبيت غير مُضمّن في PATH، على سبيل المثال:```
@echo off
C:\my_python_install\python.exe "%~dp0sniffle_extcap.py" %*

بعد تثبيت البرنامج المساعد، أعد تشغيل Wireshark أو اختر Capture > Refresh Interfaces لتمكين واجهة Sniffle.

وظيفة الإرسال

بينما كان البرنامج الثابت الأصلي لـ Sniffle لعام 2019 مجرد مستمع سلبي، أضافت إصدارات البرنامج الثابت الأحدث ميزات متنوعة لإرسال الحزم بنشاط بطرق مختلفة. يدعم البرنامج الثابت الحالي لـ Sniffle العمل كجهاز مركزي وطرفي في GAP، بما في ذلك المسح النشط، والإعلان التقليدي والموسع، وبدء الاتصالات، والاتصال في دور مركزي أو طرفي. يقوم السكربت scanner.py بالمسح النشط. يبدأ السكربت initiator.py اتصالًا بجهاز طرفي ثم يعمل كجهاز مركزي متصل. بينما يقوم السكربت advertiser.py بالإعلان التقليدي ويقبل طلبات الاتصال من الأجهزة الأخرى، منتقلًا إلى دور جهاز طرفي متصل.

تختلف وظيفة الإرسال في Sniffle قليلًا عن وحدة تحكم Bluetooth التقليدية القائمة على HCI، لأنها تمنحك تحكمًا منخفض المستوى للغاية في وحدات PDU الدقيقة التي يتم إرسالها في طبقة الارتباط. يتيح هذا التحكم منخفض المستوى للكود على الجانب المضيف تنفيذ وظائف إضافية، مثل اختبار الفاز لطبقة الارتباط أو هجمات الترحيل لطبقة الارتباط.

لم أخصص الوقت بعد لتوثيق واجهة برمجة التطبيقات (API) للبرنامج الثابت لـ Sniffle رسميًا، على الرغم من أنها بديهية إلى حد ما عند النظر إلى تنفيذها على الجانب المضيف في sniffle_hw.py. يتم تفعيل المسح النشط (الذي يرسل طلبات المسح) بواسطة cmd_scan. يتم تشغيل بدء الاتصال بواسطة cmd_connect، على الرغم من أنه من الأسهل استخدام الغلاف initiate_conn. يتم تفعيل الإعلان (القابل للاتصال اختياريًا) بواسطة cmd_advertise للإعلان التقليدي، أو cmd_advertise_ext للإعلان الموسع.

زمن استجابة UART لـ XDS110

منذ إصلاح مشكلة TI EXT_EP-11735 في منتصف عام 2024، أصبح مُنقّح XDS110 (المضمن في لوحات TI Launchpad) يتعامل مع معدلات الباود العالية مثل 2M (كما يستخدمها Sniffle) بشكل معقول دون زمن استجابة مفرط. ومع ذلك، لا يزال أحدث برنامج ثابت لـ XDS110 يستخدم تشغيل UART القائم على DMA مع التخزين المؤقت عند معدلات الباود هذه، وبالتالي يمكن أن يقدم زمن استجابة يصل إلى 30 مللي ثانية. هذا الزمن غير مهم للاستخدام كمستمع، ولكنه قد يكون ضارًا للعمليات الأكثر نشاطًا مثل الكود على الجانب المضيف الذي يعمل كعميل أو خادم GATT، أو تنفيذ هجمات الترحيل. يمكن لتعديل إصدار البرنامج الثابت 3.0.0.28 من XDS110 الموصوف أدناه للتشغيل القائم على المقاطعات أن يقلل بشكل كبير من زمن الاستجابة لهذه العمليات الحساسة للوقت. يجب أن يكون من الممكن إجراء تعديل مماثل على أحدث برنامج ثابت لـ XDS110، لكنني لم أخصص الوقت لتفكيكه وإيجاد البتات الصحيحة لتغييرها.

في منتصف عام 2024 وما قبله، كان البرنامج الثابت لمُنقّح TI XDS110 (المضمن على لوحات Launchpad) يعاني من سلوك غير مرغوب فيه في جسر USB إلى UART، حيث يمكن أن يكون هناك زمن استجابة شديد عند معدلات الباود العالية، خاصة مع عمليات الكتابة الصغيرة المتكررة التي يقوم بها برنامج Sniffle الثابت. استمرت هذه المشكلة لسنوات، وكانت لا تزال موجودة في أبريل 2024 مع البرنامج الثابت XDS110 3.0.0.28 المرفق مع UniFlash 8.6.0. كان السبب الجذري هو أنه في التشغيل القائم على DMA، كان البرنامج الثابت لـ XDS110 يجمع بيانات UART في مخزن مؤقت يتناسب حجمه مع معدل الباود، وينتظر امتلاء هذا المخزن قبل نقل البيانات. كانت هناك آلية لتطهير هذا المخزن إذا لم تصل بيانات جديدة خلال آخر 15 مللي ثانية، ولكن هذه الآلية لم يتم تشغيلها أبدًا عندما كان Sniffle يضيف بشكل متكرر حزمًا صغيرة من أحداث الاتصال كل بضع مللي ثانية. نتيجة لهذا السلوك غير الأمثل، يمكن أن تظهر البيانات الملتقطة في دفعات متأخرة على المضيف.

يحتوي البرنامج الثابت لـ XDS110 أيضًا على وضع بديل لتشغيل UART، حيث يؤدي كل استقبال UART إلى مقاطعة تؤدي إلى تمرير البيانات إلى المضيف فورًا. وضع التشغيل القائم على المقاطعات هذا له زمن استجابة أقل بكثير. ومع ذلك، يستخدمه البرنامج الثابت فقط لمعدلات الباود الأقل من 230400. كحل بديل لزمن الاستجابة العالي لتشغيل وضع DMA مع أجزاء بيانات صغيرة متكررة، يمكنك تعديل البرنامج الثابت لاستخدام جسر USB-UART القائم على المقاطعات حتى عند معدلات الباود العالية (مثل 2M باود كما يستخدمها Sniffle). في البرنامج الثابت 3.0.0.28 (المرفق مع Uniflash 8.6.0)، يمكنك تحرير البايتات بالنظام الست عشري عند الإزاحة 0x0A14 من 61 3F إلى 00 1F. سيؤدي هذا إلى تغيير معدل الباود للتبديل إلى تشغيل UART القائم على DMA من 230400 إلى 0x200000 (2097152).

انتبه إلى أن الإزاحات وتعديلات البايت الموصوفة أعلاه مخصصة فقط للبرنامج الثابت 3.0.0.28، وستكون مختلفة بالنسبة لإصدارات البرنامج الثابت الأخرى. قد يؤدي وميض برنامج ثابت غير صالح على المُنقّح إلى تلفه، ولا نتحمل أي مسؤولية عن أي ضرر قد يحدث.

يمكن استخدام الأوامر التالية على Linux لتعديل البرنامج الثابت لـ XDS110 للحصول على UART منخفض زمن الاستجابة عند معدلات الباود العالية:``` cd ~/ti/uniflash_8.6.0/deskdb/content/TICloudAgent/linux/ccs_base/common/uscif/xds110/ cp firmware_3.0.0.28.bin firmware_3.0.0.28_fastuart.bin printf '\x00\x1f' | dd of=firmware_3.0.0.28_fastuart.bin bs=1 seek=$((0x0A14)) conv=notrunc sha256sum firmware_3.0.0.28_fastuart.bin

root@kitploit:~
قبل الوميض، تحقق من أن مجموع SHA256 للبرنامج الثابت المعدل هو
`c226f2e9cb2b9f0bc111ca11f2903d58d4065293468623428c0e8eeb22086dcf`. بعد التحقق من ذلك،
نفّذ الأوامر التالية لوميض البرنامج الثابت المعدل لمصحح XDS110:```
./xdsdfu -m
./xdsdfu -f firmware_3.0.0.28_fastuart.bin -r

ترحيل حركة مرور طبقة الارتباط

يمكن استخدام Sniffle لتنفيذ ترحيل طبقة الارتباط لحركة مرور Bluetooth LE. عند القيام بالترحيل، يعمل جهاز Sniffle واحد كمركز BLE (باستخدام relay_master.py) بينما يعمل جهاز Sniffle ثانٍ كطرف BLE محيطي (باستخدام relay_slave.py). الماستر والعبد هما مصطلحان تاريخيان للمركز والطرف المحيطي في BLE على التوالي. يلتقط مُرحِّل الماستر بيانات الإعلان والاستجابة لمسح من الجهاز المحيطي الحقيقي، ثم يمررها إلى مُرحِّل العبد. يبث مُرحِّل العبد إعلانات واستجابات مسح تحاكي الجهاز المحيطي الحقيقي ويقبل الاتصالات. عند قبول اتصال، يُخطر مُرحِّل العبد مُرحِّل الماستر، الذي يبدأ بعد ذلك اتصالًا بالجهاز المحيطي الحقيقي. من هذه النقطة فصاعدًا، تُمرَّر جميع حزم طبقة الارتباط بين مُرحِّل الماستر ومُرحِّل العبد.

يوفر سكربت مُرحِّل الماستر وظيفة لطلب فترات اتصال أسرع على أحد جانبي الترحيل أو كليهما لتقليل زمن الاستجابة. إذا كنت تستخدم XDS110 كجسر USB/UART، فاعلم أن برنامج XDS110 الثابت يضيف زمن استجابة إضافيًا إلى الترحيل إلا إذا قمت بتعديله كما هو موضح أعلاه.

يُرجى ملاحظة أن سكربت مُرحِّل الماستر ينشئ مستمع شبكة يرتبط بجميع الواجهات (0.0.0.0)، وأن البروتوكول الشبكي المستخدم للتواصل بين أجهزة الترحيل لا يوفر أي حماية. استخدم هذه السكربتات فقط في بيئات شبكة موثوقة.

يظهر أدناه استخدام سكربتات مُرحِّل الماستر (المركز) والعبد (الطرف المحيطي). في الوقت الحالي، الإعلان الموسّع غير مدعوم من سكربتات الترحيل.``` usage: relay_master.py [-h] [-s SERPORT] [-c {37,38,39}] [-m MAC] [-i IRK] [-S STRING] [-P] [-q] [-Q PRELOAD] [-f] [-p] [-F] [-o OUTPUT]

Relay master script for Sniffle BLE5 sniffer

options: -h, --help show this help message and exit -s, --serport SERPORT Sniffer serial port name -c, --advchan {37,38,39} Advertising channel to listen on -m, --mac MAC Specify target MAC address -i, --irk IRK Specify target IRK -S, --string STRING Specify target by advertisement search string -P, --public Supplied MAC address is public -q, --quiet Don't show empty packets -Q, --preload PRELOAD Preload expected encrypted connection parameter changes -f, --fastslave Relay slave should request a fast connection interval -p, --pause Wait for key press on master before relaying -F, --fastmaster Relay master should specify a fast connection interval -o, --output OUTPUT PCAP output file name

root@kitploit:~
I don't see any source text in the input to translate. The "INPUT:" section is empty. Please provide the actual Markdown content for chunk 43, and I'll translate it into Arabic.```
usage: relay_slave.py [-h] [-s SERPORT] [-M MASTERADDR] [-q]

Relay slave script for Sniffle BLE5 sniffer

options:
  -h, --help            show this help message and exit
  -s, --serport SERPORT
                        Sniffer serial port name
  -M, --masteraddr MASTERADDR
                        IP address of relay master
  -q, --quiet           Don't show empty packets
تنزيل الأداة