С появлением в широком доступе таких устройств, как bladeRF, HackRF, RTL-SDR, а также программных комплексов вроде GNU Radio реверс-инжиниринг данных радиоэфира становится очень простым и увлекательным. Об этом и поговорим сегодня.

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

При помощи bladeRF, HackRF (в меньшей степени RTL-SDR) оказывается возможным полноценное наблюдение за радиоэфиром, а также взаимодействие с ним. Энтузиасты уже написали софт, который позволяет интерпретировать сигналы GPS, поднимает на компьютере стек Bluetooth, Wi-Fi и дает возможность создать свою собственную базовую станцию GSM, а один парень даже перехватил сигналы с метеоспутника и расшифровал передаваемые фотоснимки — примеров много.

INFO


Подобной функциональности можно добиться, подключив радиоприемник к входу аудиокарты, но в таком случае система будет охватывать диапазон на уровне нескольких десятков килогерц (в соответствии с частотой дискретизации звуковой карты), что довольно мало и непригодно для множества задач.

Среди программного обеспечения для исследования радиосигнала стандартом де-факто является GNU Radio. Этот комплекс дает очень крутой набор инструментов, начиная от фильтров и простых математических преобразований сигнала и заканчивая интерфейсами для трансляции данных в сеть и написания своих собственных модулей. Его и будем использовать.

INFO


Из интересных модулей GNU Radio можно отметить gr-gsm, позволяющий работать с данными сетей GSM.
 

Установка

Установку будем проводить на OS X. Если у тебя нет Xcode, то нужно его установить, так как вместе с ним поставляется компилятор, который нам потребуется. Берем из App Store. Поскольку мы будем использовать GNU Radio, понадобится графическая система X11 (скачать можно тут. Теперь установим основные библиотеки (MacPorts, если вдруг нет, берем c macports.org):

$ sudo port install bladeRF +tecla

Потом нужно дописать в файл конфигурации командной оболочки .bashrc (при отсутствии) следующее:

export DISPLAY=:0.0
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH
export PYTHONPATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages:/opt/local/lib/python2.7/site-packages:${PYTHONPATH}

Если все прошло успешно, на следующую команду должен быть примерно такой ответ:

$ bladeRF-cli -p
    Backend:        libusb
    Serial:         d1ece1003730a1a27f9beeba1f511413
    USB Bus:        4
    USB Address:    8

Полную же информацию можно посмотреть, перейдя в интерактивный режим:

$ bladeRF-cli -i

И напечатав info и version:

bladeRF> info

  Serial #:                 d1ece1003730a1a27f9beeba1f511413
  VCTCXO DAC calibration:   0x894e
  FPGA size:                40 KLE
  FPGA loaded:              no
  USB bus:                  2
  USB address:              3
  USB speed:                SuperSpeed
  Backend:                  libusb
  Instance:                 0

bladeRF> version
  bladeRF-cli version:        0.11.0-git-58c3ff4
  libbladeRF version:         0.16.1-git-58c3ff4

  Firmware version:           1.7.1-git-ca697ee
  FPGA version:               Unknown (FPGA not loaded)

Здесь обратим внимание на такие строки:

FPGA size:                40 KLE
FPGA version:               Unknown (FPGA not loaded)

Важный момент: для работы в наше устройство нужно подгружать образ FPGA, который требуется отдельно скачать, например отсюда. В зависимости от размера FPGA (у нас 40 KLE) выбираем соответствующий файл, в нашем случае hostedx40-latest.rbf. Скачиваем и подгружаем командой

$ bladeRF-cli -l hostedx40-latest.rbf

На устройстве должны замигать огоньки — теперь оно готово к работе.

INFO


FPGA — полупроводниковое устройство, дающее возможность на аппаратном уровне выполнять различные операции цифровой обработки сигналов и другие интересные и полезные вещи. BladeRF, например, с его помощью можно настроить даже на работу без компьютера.

Остается установить GNU Radio, что можно сделать командой

$ sudo port install gnuradio +grc +swig +wxgui +qtgui +python27

Вдогонку нужно добавить в GNU Radio поддержку самого bladeRF с помощью модуля gr-osmosdr:

$ sudo port install gr-osmosdr

Теперь можно запустить программу и приступить к сути:

$ gnuradio-companion
 

Тюнер для поиска рабочего сигнала

Сначала сделаем сканер эфира с визуализацией частотного спектра, он поможет нам отыскать сигнал от автобрелока для исследования. Для этого в правом окне GNU Radio выбираем osmocom Sink — это модель самого устройства, перетягиваем блок на рабочую область и в свойствах блока указываем используемое устройство (у меня bladeRF, и в графе Device Arguments будет bladerf=0), частоту (Ch0: Frequency) и ширину диапазона, который будет видеть сканер. Остальные настройки можно пока оставить по умолчанию.

Управление значениями часто изменяемых переменных обычно выносится на рабочую область: делаются слайдеры или просто блоки с прописанными значениями. Поскольку у нас сканер, сделаем слайдер, которым в процессе работы можно будет изменять рабочую частоту: просто перетягиваем блок WX GUI Slider и устанавливаем границы его действия, значение по умолчанию и айдишник — например, freq. В osmocom Sink в поле частоты прямо так и пишем — freq. Добавим блок WX GUI Waterfall Sink, отвечающий за графическое отображение сигнала, и соединим линией с osmocom Sink. Чтобы не анализировать каждый раз сигнал вживую, обычно делается его запись в файл, а затем она воспроизводится на стадии анализа. Для этого добавим блок File Sink с указанием имени файла, в который будут писаться данные в сыром виде, сделаем связь, и сканер готов! Остается запустить, после чего, двигая ползунком, найти рабочую частоту и сделать запись сигнала. Сохраним полученную схему как tuner.grc, она должна выглядеть примерно как на рис. 1.

Рис. 1. Схема тюнера для поиска рабочего сигнала
Рис. 1. Схема тюнера для поиска рабочего сигнала

Вид тюнера в работе можно посмотреть на рис. 2. Здесь мы видим, что было в эфире на участке спектра от 432,5 до 434,5 МГц в последние 16 с. Посередине — сигнал, возникающий от постоянного источника питания нашего прибора, который не представляет полезной информации, а вот правее — сигнал от брелока! Стоит отметить, что можно найти его гармоники на других частотах. Они слабее и гораздо быстрее пропадают с удалением от источника сигнала, их менее удобно исследовать (видны на рисунке), возникают они вследствие нелинейности элементов в схеме.

Рис. 2. Вид тюнера в работе
Рис. 2. Вид тюнера в работе
 

Анализ полученного сигнала

Создадим новую схему (например, под именем radioaudi-reversing.grc), где сигнал будет браться уже не с bladeRF, а из записанного файла. Для этого используем блок File Source, которому просто передадим имя файла. Теперь начинается самое интересное!

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


4 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …