Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
22
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

root@kali:~/lora# ./lora_recv.py /dev/ttyUSB0 serial port connection made

4294967245

Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message Not so secret LoRa message

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Вы должны ожидать появления нового сообщения LoRa с той же полезной нагрузкой каждые несколько секунд, учитывая, как часто программа вызывает цикл модуля Heltec.

Превращаем USB-устройство CatWAN в сниффер LoRa

Теперь давайте настроим устройство, которое позволит нам перехва- тыватьэтоттрафик LoRa.ВUSB-устройстве CatWAN (рис.13.6) исполь- зуется чип RFM95,ивы можетединамически настроитьего на исполь- зование 868 МГц (для Европейского Союза) или 915 МГц (для США).

Рис.13.6.USB-устройство CatWAN,совместимое с LoRa и LoRaWAN,основано на приемопередатчике RFM95.Стрелка указывает на кнопку сброса (RST)

Устройство поставляется в пластиковом корпусе, который необ- ходимо снять, чтобы получить доступ к кнопке сброса. Подключив устройство к компьютеру, дважды быстро нажмите кнопку сброса. В проводнике Windows должен появиться USB-накопитель под назва- нием USBSTICK, потому что CatWAN оснащен встроенной памятью.

Настройка CircuitPython

Загрузите и установите последнюю версию Adafruit CircuitPython по адресу https://circuitpython.org/board/catwan_usbstick/. CircuitPython – это простой открытый исходный язык, основанный на MicroPython, вер- сии Python, оптимизированной для работы на микроконтроллерах. Мы использовали версию 4.1.0.

Радио дальнего действия: LPWAN  367

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

CatWAN использует микроконтроллер SAMD21, у которого есть за-

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

грузчик, упрощающий запись прошивки. Он использует формат USB-

.

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

прошивки Microsoft (UF2), который представляет собой формат файла,

 

 

 

 

 

 

 

 

 

 

применяемый для прошивки микроконтроллеров в USB-устройствах.

 

 

 

 

 

 

 

 

 

 

Это позволяет вам перетащить файл UF2 на устройство USBSTICK. Это

 

 

 

 

 

 

 

 

 

 

действиеавтоматическисбрасываетзагрузчик.Затемустройствопере-

 

 

 

 

 

 

 

 

 

 

загружается и переименовывает встроенный накопитель в CIRCUITPY.

 

 

 

 

 

 

 

 

 

 

Вам также понадобятся две библиотеки CircuitPython: Adafruit

 

 

 

 

 

 

 

 

 

 

CircuitPython RFM9x и Adafruit CircuitPython BusDevice. Вы можете

 

 

 

 

 

 

 

 

 

 

найти их на https://github.com/adafruit/Adafruit_CircuitPython_RFM9x/re-

 

 

 

 

 

 

 

 

 

 

leases и https://github.com/adafruit/Adafruit_CircuitPython_BusDevice/releases.

 

 

 

 

 

 

 

 

 

 

Мы установили их с по­мощью adafruitcircuitpython – rfm9x-4.x-mpy-

 

 

 

 

 

 

 

 

 

 

1.1.6.zip и adafruit-circuitpython-bus-device-4.xmpy – 4.0.0.zip. Номер

 

 

 

 

 

 

 

 

 

 

4.x относится к версии CircuitPython; убедитесь, что эти библиотеки

 

 

 

 

 

 

 

 

 

 

соответствуютвашей установленной версии.Нужно будетразархиви-

 

 

 

 

 

 

 

 

 

 

роватьихиперенестифайлы.mpyнаCIRCUITPY.Обратитевнимание,

 

 

 

 

 

 

 

 

 

 

что для библиотеки шины файлы.mpy должны находиться в каталоге

 

 

 

 

 

 

 

 

 

 

библиотеки шины, как показано на рис. 13.7. Файлы библиотеки­

по-

 

 

 

 

 

 

 

 

 

 

мещаются в каталог lib, и есть подкаталог adafruit_bus_device для мо- дулей I2C и SPI. Файл code.py, который вы создадите, находится в са- мом верхнем (корневом) каталоге памяти USB-устройства.

Рис.13.7.Структура каталогов в памяти устройства CIRCUITPY

368  Глава 13

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Затем мы настроим Serial Monitor (с той же функциональностью,

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

что и Serial Monitor Arduino, о чем говорилось ранее). Для этого мыdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

использовали PuTTY в Windows,потому что он работаетнамноголуч- ше,чемлюбойдругой эмулятортерминала,который мытестировали. Установив PuTTY в вашей системе, определите правильный COMпорт,открыв диспетчер устройств Windows и перейдя к портам (COM

и LPT),– рис. 13.8.

Рис.13.8.Настройка PuTTY для подключения к последовательной консоли на COM4,который мы определили в диспетчере устройств как порт,используемый устройством CatWAN.Ваш COM-порт может отличаться

ОтключитеисноваподключитеCatWANккомпьютеру,чтобыопре- делить правильный COM-порт. Этот прием работает, потому что вы увидите, какой COM-порт исчезает в диспетчере устройств, когда вы его отсоединяете, и появляется снова, когда снова его подключаете. Затем на вкладке Session (Сеанс) выберите Serial (Последовательный порт). Введите правильный COM-порт в поле Serial line (Последова- тельный канал) и измените скорость передачи данных на 115200.

Разработка сниффера

Для написания кода CircuitPython мы рекомендуем вам использовать редакторMU(https://codewith.mu/).Впротивномслучаеизменениявпа- мяти CIRCUITPY могут не сохраняться правильно и в реальном вре- мени. При первом запуске MU выберите режим Adafruit CircuitPython.

Радио дальнего действия: LPWAN  369

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Вы также можете изменить режим позже, используя значок режима

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

в строке меню. Запустите новый файл, введите код из листинга 13.3

.

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

и сохраните файл на диске CIRCUITPY, используя имя code.py. Обрати-

 

 

 

 

 

 

 

 

 

 

те внимание,что имя файла важно,потому что CircuitPython будет ис-

 

 

 

 

 

 

 

 

 

 

кать файл кода с именем code.txt, code.py, main.txt или main.py в этом

 

 

 

 

 

 

 

 

 

 

порядке.

 

 

 

 

 

 

 

 

 

 

 

 

Когда вы впервые сохраняете файл code.py на диске и каждый раз,

 

 

 

 

 

 

 

 

 

 

когда вы вносите изменения в код с помощью­

MU, редактор автома-

 

 

 

 

 

 

 

 

 

 

тически запускает эту версию кода в CatWAN. Вы можете отслежи- вать это выполнение, используя последовательную консоль с PuTTY. Используя консоль, можете нажать клавиши Ctrl+C, чтобы прервать программу, или Ctrl+D, чтобы перезагрузить ее.

Программа аналогична базовому приемнику LoRa, который мы представили с LoStik. Основная особенность заключается в том, что она постоянно применяет разные коэффициенты передачи, чтобы увеличить шансы прослушивания различных типов трафика LoRa.

Листинг 13.3. Код CircuitPython для USB-устройства CatWAN,

выступающего в качестве базового сниффера LoRa

import board import busio import digitalio

import adafruit_rfm9x

RADIO_FREQ_MHZ = 915.0

CS = digitalio.DigitalInOut(board.RFM9X_CS) RESET = digitalio.DigitalInOut(board.RFM9X_RST)

spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, RADIO_FREQ_MHZ) rfm9x.spreading_factor = 7

print('Ожидаем пакеты LoRa...') i = 0

while True:

packet = rfm9x.receive(timeout=1.0, keep_listening=True, with_header=True) if (i % 2) == 0:

rfm9x.spreading_factor = 7 else:

rfm9x.spreading_factor = 11 i = i + 1

if packet is None:

print('Ничего нет. Продолжаем прослушивать...') else:

print('Received (raw bytes): {0}'.format(packet)) try:

packet_text = str(packet, 'ascii') print('Received (ASCII): {0}'.format(packet_text))

except UnicodeError:

print('пакет содержит не-ASCII символы)

370  Глава 13

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

rssi = rfm9x.rssi

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

print('Уровень принятого сигнала: {0} dB'.format(rssi))

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

e

 

 

 

 

p

df

 

 

 

g

.c

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сначала импортируем необходимые модули, как мы обычно де- лаем это в Python. Модуль платы содержит имена основных выводов платы, которые могут отличаться от платы к плате. Модуль busio со- держит классы, поддерживающие несколько последовательных про- токолов, включая SPI, который использует CatWAN. Модуль digitalio обеспечивает доступ к базовому цифровому вводу/выводу, а adafruit_ rmf9x – наш основной интерфейс к приемопередатчику LoRa RFM95, который использует CatWAN.

Мы установили радиочастоту на 915 МГц ,потому что используем версиюCatWANдляСША.Всегдапроверяйтечастоту,соответствую-

щуювашейверсиимодуля.Например,установитечастоту868МГц,если вы используете версию модуля для ЕС1.

ОстальныекомандынастраиваютшинуSPI,подключеннуюкрадио­ модулю, в частности выводы выбора микросхемы (CS) и сброса, что требует инициализации нашего класса rfm9x . Шина SPI использует контактCS,какописановглаве5.ЭтотклассопределенвмодулеRFM95

CircuitPython по адресу https://github.com/adafruit/Adafruit_CircuitPython_

RFM9x/blob/master/adafruit_rfm9x.py.Стоитизучитьисходныйкод,чтобы лучше понять, как именно работает этот класс.

Самая важная часть инициализации – это настройка коэффициен- та передачи . Мы начинаем с SF7, но позже, в основном цикле, пе- реключимся на другие режимы, чтобы увеличить шансы перехваты- вать все типы трафика LoRa. Затем начинаем опрос чипа на предмет новых пакетов внутри­ бесконечного цикла, вызывая rfm9x.receive() со следующими аргументами:

zztimeout = 1.0 – означает, что чип будет ждать до одной секунды для пакета, который нужно получить и декодировать;

zzkeep_listening = True – переведет чип в режим прослушивания после получения пакета. В противном случае он вернется в ре- жим ожидания и проигнорирует любой будущий прием;

zzwith_header = True – вернет четырехбайтовый заголовок LoRa вместе с пакетом. Это важно, потому что, когда пакет LoRa ис- пользует режим неявного заголовка, полезная нагрузка может быть частью заголовка; если вы не читаете его, можете пропус­ тить часть данных.

Поскольку мы хотим,чтобы CatWANдействовал как сниффер LoRa, нам необходимо постоянно переключаться между показателями рас- пространения, увеличивающими наши шансы перехвата трафика LoRa с узлов, которые могут быть либо слишком близко, либо слиш- ком далеко. Переключение между 7 и 11 в значительной степени по-

1В Россиидля LoraWAN выделендиапазон частот864-870 МГц,поэтому сле- дует приобретать модуль, предназначенный для рынка ЕС.– Прим.ред.

Радио дальнего действия: LPWAN  371