HackRF One¶
HackRF — відкритий SDR трансивер з широким діапазоном частот.
Огляд¶
Характеристики¶
| Параметр | Значення |
|---|---|
| Частоти | 1 МГц - 6 ГГц |
| Ширина смуги | до 20 МГц |
| ADC/DAC | 8 біт |
| Потужність TX | до 15 dBm |
| Інтерфейс | USB 2.0 |
| Режим | Напівдуплекс |
Особливості¶
- Повністю відкритий (hardware + software)
- Широкий діапазон
- TX можливість
- Зовнішній тактовий вхід
- Trigger вхід/вихід
Аксесуари¶
| Аксесуар | Призначення |
|---|---|
| ANT500 | Телескопічна антена |
| Opera Cake | Антенний перемикач |
| Rad1o | Портативна версія |
| PortaPack | Автономний дисплей |
Встановлення¶
Linux¶
# Залежності
sudo apt install hackrf libhackrf-dev
# Правила udev
sudo cp 53-hackrf.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
# Перевірка
hackrf_info
Оновлення firmware¶
# Завантажити останню версію
wget https://github.com/greatscottgadgets/hackrf/releases/latest/download/hackrf-2023.01.1.zip
unzip hackrf-2023.01.1.zip
# Оновити
hackrf_spiflash -w hackrf_one_usb.bin
Windows¶
1. Zadig → WinUSB драйвер
2. Встановити hackrf-tools
Базове використання¶
Командна строка¶
# Інформація про пристрій
hackrf_info
# Прийом (RX)
hackrf_transfer -r rx.bin -f 100000000 -s 8000000 -g 40 -l 32
# Передача (TX)
hackrf_transfer -t tx.bin -f 100000000 -s 8000000 -a 1 -x 40
# Сканування спектру
hackrf_sweep -f 2400:2500 -w 100000
Параметри¶
-f frequency Частота в Гц
-s samplerate Частота дискретизації (2-20M)
-g gain IF gain (0-40 dB)
-l lna LNA gain (0-40 dB)
-a amp Підсилювач TX (0 або 1)
-x txvga TX VGA gain (0-47 dB)
Прийом¶
SDR¶
Встановити HackRF plugin:
1. Скопіювати SDRSharp.HackRF.dll
2. Додати в SDRSharp.exe.Config:
<add key="hackRF" value="SDRSharp.HackRF.HackRFIO,SDRSharp.HackRF"/>
GNU Radio¶
#!/usr/bin/env python3
from gnuradio import gr, blocks
import osmosdr
class hackrf_rx(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
self.source = osmosdr.source(args="hackrf=0")
self.source.set_sample_rate(8e6)
self.source.set_center_freq(100e6)
self.source.set_gain(40)
self.sink = blocks.file_sink(gr.sizeof_gr_complex, "rx.bin")
self.connect(self.source, self.sink)
if __name__ == "__main__":
tb = hackrf_rx()
tb.run()
GQRX¶
Device: hackrf=0
Sample rate: 8000000
Передача¶
Увага!¶
⚠️ ПЕРЕДАЧА ТІЛЬКИ:
- На ліцензованих частотах
- В екранованому приміщенні
- З dummy load
- Для тестування
Незаконна передача = кримінальна відповідальність!
FM передавач (приклад)¶
#!/usr/bin/env python3
from gnuradio import gr, analog, blocks
import osmosdr
class fm_tx(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
# Аудіо джерело
self.source = blocks.wavfile_source("audio.wav", True)
# FM модулятор
self.fm = analog.wfm_tx(
audio_rate=48000,
quad_rate=240000
)
# HackRF sink
self.sink = osmosdr.sink(args="hackrf=0")
self.sink.set_sample_rate(2e6)
self.sink.set_center_freq(100e6)
self.sink.set_gain(14)
self.connect(self.source, self.fm, self.sink)
Replay attack (дослідження)¶
# Запис сигналу
hackrf_transfer -r signal.bin -f 433920000 -s 2000000 -g 40 -l 32
# Відтворення
hackrf_transfer -t signal.bin -f 433920000 -s 2000000 -a 1 -x 40
PortaPack¶
Що це¶
Автономний дисплей + батарея для HackRF.
Функції¶
- Прийом/передача без ПК
- Спектроаналізатор
- Декодери (ADS-B, AIS, POCSAG)
- Replay attack
- Генератор сигналів
Firmware¶
Mayhem: https://github.com/eried/portapack-mayhem
- Розширений функціонал
- Активна розробка
Практичні проекти¶
Аналіз спектру¶
# Запис спектру
hackrf_sweep -f 400:500 -w 100000 -1 > spectrum.csv
# Візуалізація (Python)
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("spectrum.csv", header=None)
plt.plot(data[2], data[6])
plt.show()
TPMS (датчики тиску шин)¶
Частота: 315 МГц (US) / 433 МГц (EU)
Модуляція: FSK/ASK
Протокол: manufacturer-specific
RF Jam Detection¶
# Моніторинг спектру
hackrf_sweep -f 2400:2500 -w 100000 | while read line; do
# Аналіз anomalій
done
Обмеження¶
8-біт ADC¶
- Обмежений динамічний діапазон
- ~48 dB теоретично
- Сильні сигнали перевантажують
Напівдуплекс¶
- Не можна TX і RX одночасно
- Потрібен час на перемикання
- Не підходить для full-duplex протоколів
Фазовий шум¶
- Внутрішній осцилятор не ідеальний
- Проблеми з вузькосмуговими сигналами
- Використовуйте зовнішній clock для точності
Troubleshooting¶
"hackrf_info" не бачить пристрій¶
# Перевірити USB
lsusb | grep 1d50
# Перевірити права
ls -l /dev/bus/usb/...
# Перезавантажити udev
sudo udevadm control --reload-rules
sudo udevadm trigger
Низький TX рівень¶
1. Увімкнути amp: -a 1
2. Збільшити txvga: -x 47
3. Перевірити антену
Перегрів¶
- Не тримати TX тривалий час
- Забезпечити вентиляцію
- Зменшити потужність
Firmware brick¶
# Режим DFU
1. Затиснути кнопки
2. Підключити USB
3. Використати dfu-util
dfu-util --device 1fc9:000c --download hackrf_one_usb.dfu
Шлях: sdr/hackrf.md