An NRF24 driver for the Flipper Zero device. The NRF24 is a popular line of 2.4GHz radio transceivers from Nordic Semiconductors.
NRF24L01+ Enhanced ShockBurst packet decoder example using Python: nrf24_packet_decoder.py
Flipper Zero FAP file: Nrf24_Scanner.fap
Приложение для Flipper Zero, читающее эфир на радиомодулях nRF24L01.
Выбор пукта меню - стрелки вверх/вниз, стрелки влево/вправо либо изменют настройки либо управляют видом списка, кнопка ОК либо выбирает режим (короткое нажатие), либо выполняет дополнительное действие (длительное нажатие).
По умолчанию при запуске включается режим поиска (sniff) - ищутся все валидные пакеты с корректным заголовком и CRC.
Размер CRC и тип пакета (Enhanced ShockBurst или нет) задается. CRC может быть или 1 или 2 байта.
Так как пакеты читаются в RAW формате, то длина полезной нагрузки не может быть больше 23 байт, пакеты с большей длинной не будут пойманы.
В настройках задается минимальный размер нагрузки (payload)
После принятия, пакет сдвигается побитно и валидируется. Побитный сдвиг сильно увеличивает вероятность отлова пакета, но так же увеличивается количество мусорных пакетов.
Количество уникальных адресов запоминается (просмотр - стрелка вниз в режиме просмотра адресов)
После поиска можно переключиться в режим сканирования по найденным адресам или сканировать адрес конкретного пакета или группы адресов с различным LSB в адресе
Адреса, которые попались дважды и более раз отображаются списком:
Изменение режима sniff/scan - стрелками на пункте Scan.
Режим сканирования (scan) - просто чтение пакетов по заданным в настройках мак адресам и виду пакета - ESB/DPL.
На начальном экране в режиме чтения можно загрузить файл настроек (по умолчанию загружается settings.txt из папки nrf24_scanner на SD карте).
В файле настройке задаются адреса (максимум 6) в шестнадцатеричном виде (старший байт - первый), длина адреса вычисляется по P0.
Остальные настройки можно поменять интерактивно
Настройки сохраняются длительным нажатием на ОК.
Описание настроек:
Ch - номер канала.
Rate - скорость передачи данных
Next Ch time - через сколько секунд будет увеличен номер канала
Log - выбор режима авто сохраннения в файлы log-xx.txt. Yes - сохранять в новый файл при заполнении буфера в 99 записей, Append - добавлять в последний файл, Clear - только очистка буфера
В пунктах Ch, Rate, Next при нажатии OK меняются параметры связи:
ESB - Enhanced ShockBurst (включена автоотправка подтверждения получения пакета, работающий приемник тоже попытается это сделать, возможны коллизии)
DPL - Динамический пакет
CRC1/2 - Размер CRC в байтах
Payload - размер пакета в байтах
Просмотр принятых пакетов
В пункте "Start scan/sniff" можно выбрать стрелками сканировать и смотреть или просто смотреть (view).
Если в файле настройки было несколько адресов, то первая цифра - номер канала (pipe) от 0 до 5.
Стрелки - перемещение по списку и горизонтальное скролирование
Долгий OK - отправка пакета
OK - вход в режим просмотра адресов и включения декодирования заголовка ESB пакета и CRC.
При декодировании заголовка (PCF) - первые 2 цифры - длина пакета в hex или 33, если длина пакета фиксирована
3-я цифра - PID (2bit) << 1 + флаг NO_ACK
Если включен режим декодирования CRC, то по всему пакету ищется подходящая CRC и подчеркивается в списке, а так же вместо ":" выводится "=" после номера записи в буфере
Схема подключения модуля nRF24l01:
Big board:
Gerber for full board (https://raw.githubusercontent.com/vad7/nrf24scan/master/Gerber_PCB_Flipper%20Zero%20nRF24%20board_v1_0.zip)
Easyeda source (https://oshwlab.com/vad7/flipper-zero-nrf24-board).
Mini board:
Gerber for mini board with 5V - 3.3V converter LM1117-3.3 (https://raw.githubusercontent.com/vad7/nrf24scan/master/Gerber_PCB_Flipper%20Zero%20nRF24%20board%20mini_v1_0.zip)
Easyeda source (https://oshwlab.com/vad7/flipper-zero-nrf24-board_copy).
Settings file (default addr.txt) format:
Rate: 0/1/2 - rate in Mbps (=0.25/1/2)
Ch: 0..125 - default channel
ESB: 0/1 (1 - Enhanced ShockBurst)
DPL: 0/1 (1 - Dynamic Payload Length)
CRC: 0/1/2 (CRC length)
Payload: 1..32 (bytes)
P0: address pipe #0 in hex (max 5 bytes, LSB last)
P1: address pipe #1 in hex (max 5 bytes, LSB last)
P2: address pipe #2, LSB in hex (1 byte)
P3: address pipe #3, LSB in hex (1 byte)
P4: address pipe #4, LSB in hex (1 byte)
P5: address pipe #5, LSB in hex (1 byte)
captured data in raw format, first byte = address # 0..5, Payload len if DPL
... up to MAX_LOG_RECORDS-1
In the list of the received:
Press OK - send the packet,
Long press OK - view addresses.
Decode the Packet Control Field and check CRC (long press OK in the list and then press '<' / '>').
ESB (Enhanced Shockburst) option must be turned off.
Press '>' to decode CRC.
1 - pipe #
2 - Payload length (for valide packet must be 1..20 or 33 hex)
3 - PID (2 bit) + NO_ACK (1 bit)
2/A7 on FZ goes to MOSI/6 on nrf24l01
3/A6 on FZ goes to MISO/7 on nrf24l01
4/A4 on FZ goes to CSN/4 on nrf24l01
5/B3 on FZ goes to SCK/5 on nrf24l01
6/B2 on FZ goes to CE/3 on nrf24l01
8/GND on FZ goes to GND/1 on nrf24l01
9/3V3 on FZ goes to VCC/2 on nrf24l01
IRQ/8 is left disconnected on nrf24l01
If the nRF module is acting a bit flakey, try adding a capacitor to the vcc/gnd lines! I've not tried the Plus model so it may have a bigger need for a cap. Otherwise, I haven't had any major issues. Anything from a 3.3 uF to 10 uF should do. (Watch your positive/negative placement! Negative to ground.) I learned if you wanna get fancy, include a 0.1 uF cap in parallel. The 3.3 uF to 10 uF will respond to slow freq changes while the 0.1 uF will respond to the high freq switching spikes that the larger one cannot. That said, a single 10 uF will likely suffice for the Mousejack attack. ¯\_(ツ)_/¯