hack rf one что это

Эксперименты с HackRF и брелоком от автомобиля

Проект HackRF появился на Kickstarter, и я решил написать небольшую статью об области применения этой программно-определяемой радиосистемы (Software Defined Radio, SDR).

Проект HackRF появился на Kickstarter, и я решил написать небольшую статью об области применения этой программно-определяемой радиосистемы (Software Defined Radio, SDR).

Я давно хотел поиграться с моими брелоками от автомобилей (в основном из праздного любопытства). Подобные устройства, генерирующие довольно чистый сигнал, имеются практически у каждого. В своих экспериментах я использовал брелок от Субару и Киа (машина моего друга). Оба этих брелока используют различный механизм кодирования сигнала, так что мои эксперименты ожидались весьма интересными.

Помимо чисто теоретического интереса, результаты эксперимента не будут столь полезны, поскольку все подобные устройства используют непрерывно изменяющийся код, и полученная последовательность, которая разблокирует автомобиль, может быть использована лишь однажды. Хотя, конечно, я не могу утверждать на сто процентов, что все такие радиопередатчики реализованы именно подобный образом. Короче говоря, это такая тема, которую необходимо исследовать более глубоко.

В начале эксперимента я начал выяснять, на каких частотах работают брелоки. Оказалось, что брелок для Киа работает на частоте 315 МГц, а брелок для Тойоты и Субару на частоте 433.847 МГц (по крайней мере, на многих моделях).

Теперь, когда мы узнали рабочие частоты, что же дальше? Для начала я запустил GQRX (софт для работы с системами SDR) для того, чтобы получить общее представление о физических процессах, происходящих во время передачи данных. Приношу свои извинения за то, что не могу опубликовать актуальный скриншот, и ниже привожу образец амплитудно-модулированного сигнала.

Обратите внимание, что мы записываем данные не на центральной частоте (315МГц), а чуть смещенной от нее. Так как мы перехватываем полосу в 8 МГц, то, по сути, получаем сам сигнал, однако делая небольшой сдвиг, мы избегаем смешения постоянной составляющей, которая является причиной пика в центре диапазона настройки HackRF. Последние версии прошивок позволяют практически полностью сгладить этот пик, однако мы может избавиться от него полностью.

Дадим утилите hackrf_transfer поработать какое то время, параллельно несколько раз нажимая на кнопку блокировки (или разблокировки) на брелоке. Через несколько секунд нажмите ctlr-c для того, чтобы остановить захват сигнала.

Я рекомендую именовать файлы внимательно: полученные данные представляют собой сырые синфазно-квадратурные выборки и не содержат какую-либо информацию о ширине выборки (в нашем случае 8 МГц), центральной частоте (312 МГц) и схеме кодирования (для HackRF все выборки 8-битные). Так что лучше именовать файлы правильно с самого начала.

Теперь у нас есть большой файл данных. Что мы можем с ним сделать? Есть одна хорошая утилита под названием baudline (http://www.baudline.com/download.html). К сожалению, условия лицензии не позволяют включать эту утилиту в дистрибутив, поэтому вам необходимо скачать ее самостоятельно.

/bin/disable/ находится простейший скрипт с именем «file», который выглядит так:

Теперь нам необходимо раздробить полученный файл на куски по 50 Мб. Для этого будем использовать утилиту «dd». Следующая команда откусывает первые 50 Мб от нашего файла:

$ dd if=foo.iq of=trimmed.iq bs=1M count=50

Разбиваем файл на блоки по 50 Мб:

$ dd if=foo.iq of=trimmed.iq bs=1M count=50 skip=50

Для объединения полученных блоков обратно в исходный файл можно использовать утилиту «split».

Теперь открываем первый кусок файла в baudline. Щелкните правой кнопкой мыши «input->open file. », затем выберите файл и установите формат «raw» вместо «auto detect». Перед вами появится следующее окно:

Настройки, на которые следует обратить внимание:

Sample rate: выбираем custom и выставляем значение 8000000 (поскольку мы получали выборку шириной в 8 МГц). Если ширина выборки другая, например, 20 МГц, выставляйте значение 20000000.

Channels: выставляем значение 2, поскольку hackrf записывает синфазные и квадратурные данные. Далее отметьте флажки «quadrature» и «flip complex» (последний флажок необходим потому, что HackRF пишет в формат отличный от формата baudline).

Decode Format: поскольку HackRF пишет беззнаковые 8-ми битные выборки, выбирайте «8 bit linear (unsigned)».

После установки необходимых параметров получаем следующую картину:

Мы получили изображение нашего сигнала. На этом скриншоте показан сигнал, снятый с брелока Субару (амплитудная модуляция), по сути, это азбука Морзе (передавать или не передавать).

При передаче сигнала, снятого с брелока Киа, используется частотная модуляция. Увеличенное изображение показано ниже:

Что мы видим на это скриншоте? После включения передатчика посылается комбинация сигналов с нулевой и ненулевой амплитудой, по сути, последовательность битов ‘101010101010’. Теперь вернемся к скриншоту сигнала от брелока Субару. Здесь также вначале посылается последовательность ‘1010101010’. Первоначальная последовательность говорит приемнику о том, что далее будут переданы основные данные, а также помогает нам выяснить длину цикла для сигналов с нулевой и ненулевой амплитудой.

Листая далее картинку частотно модулированного сигнала с брелока Киа, мы видим начало передачи основных данных:

На скриншоте выше показана последовательность, которая посылается для разблокировки автомобиля.

В baudline можно выделить нужный диапазон и сохранить его в отдельный файл:

Щелкните правой кнопкой мыши на выделенном диапазоне и далее выберите «output->export selection as. «

Будьте внимательны, во время экспорта файла baudline изменяет его формат. Это повлияет на загрузку файла в будущем и любой код gnuradio, который вы мастерите для последующей обработки файла. Более надежный вариант – использовать «dd» для обрезания файла (немного поэкспериментируйте, чтобы подобрать нужный размер) и его загрузка в baudline.

Читайте также:  часто спотыкаться что значит

Для повторного открытия файла, сохраненного в baudline, используйте следующие настройки:

При повторном открытии изменился формат декодирования (вместо 8-битного стал 16-битный), а также снят флажок «flip complex».

В следующей статье я попробую загрузить файл с выборкой в Gnuradio-Companion и сразу же извлечь битовый поток амплитудной модуляции.

Источник

Передача радиосигналов с помощью HackRF

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

Уникальность HackRF в его технических параметрах — при цене около 300$, устройство позволяет не только принимать, но и передавать радиосигналы в диапазоне 1МГц-6ГГц с шириной полосы до 20МГц. Использование HackRF практически не освещалось на Хабре и Гиктаймс, пора восполнить этот пробел.

Что касается приема радиосигналов, то тут все просто, и практически не отличается от популярного 10-долларового RTL-SDR, о котором не писал только самый ленивый. Ставится нужная DLL, запускается программа, в общем-то и все. Кто еще не слышал о таком “чуде”, могут почитать здесь же на сайте:
habrahabr.ru/post/149698
habrahabr.ru/post/149702
habrahabr.ru/post/280454
habrahabr.ru/post/200914

С приемом все достаточно просто и тривиально, технология дешевая и давно отработанная. С передачей все немного сложнее. Чем мы сейчас и займемся.

Низкий уровень — С/С++

Первый способ — общение напрямую с устройством. HackRF имеет библиотеку с открытым API, пример его использования можно посмотреть на сайте автора в утилите hackrf_transfer: github.com/mossmann/hackrf/blob/master/host/hackrf-tools/src/hackrf_transfer.c. Для тех, кто хоть раз работал со звуковой картой, принцип будет понятен — определенное число раз в секунду вызывается callback-функция, буфер для которой надо заполнить данными. Казалось бы все просто, но есть одно “но” — HackRF это SDR. Software Defined Radio. Это значит, что просто отправить WAV-файл в буфер не выйдет, ничего не передастся. Мы программно должны сформировать комплексный (IQ) сигнал для всей требуемой полосы приемника, чтобы его ЦАП в свою очередь, отправил “это” в эфир. Также необходимо задать ряд настроек (частота, усиление, полоса пропускания), что тоже можно посмотреть в исходнике.

HackRF поддерживает работу с различной шириной полосы пропускания, от 1 до 20МГц, и эту полосу необходимо сформировать программно. Мы этим заниматься не будем. Математика нужна достаточно серьезная, так что перейдем сразу ко второму способу — использованию пакета GNU Radio.

GNU Radio

GNU Radio — это открытый и бесплатный пакет программ, предназначенный для цифровой обработки сигналов в научных, образовательных или коммерческих целях. Система состоит из большого числа готовых блоков, имеющих интерфейс на языке Питон, сами блоки написаны на С++. В GNU Radio входит также визуальный редактор GNURadio Companion, позволяющий визуально соединять блоки в готовое “устройство”, вообще не используя язык программирования.

Итак, устанавливаем драйвера для Hack RF, устанавливаем GNU Radio (он может быть поставлен на Linux или Mac OS, либо скачан как Linux Live CD), запускаем в консоли “gnuradio-companion”. Теперь все готово, можно приступить к передаче.

Формально HackRF может передать что угодно в пределах своей полосы пропускания, например зная протокол передачи данных, можно рулить радиоуправляемой машинкой или управлять дверным звонком. Рассмотрим самые тривиальные примеры: амплитудную (AM) и частотную (FM) модуляцию.

Частотная модуляция

Для передачи в режиме FM запустим gnuradio-companion и создадим в программе такой граф.

Его структура довольно проста. В качестве источника был выбран WAV-файл с частотой дискретизации 44100, блок Multiply Const умножает сигнал на 2 (исходный звук был довольно-таки тихий), следующий блок WBFM Transmit и делает всю “магию” — преобразует наш вещественный сигнал с частотой 44100 в комплексный сигнал с частотой дискретизации 88200. Следующий блок Resampler повышает частоту дискретизации до выбранных для этого примера 2.4МГц. Частота передачи установлена на 87.5МГц, это была самая низкая частота FM-радио, поддерживаемая моим смартфоном, и она была свободна от FM-станций.

Результат — запускаем граф в GNU Radio, на HackRF загорается красный светодиод TX, в смартфоне слышен наш файл.

Его содержимое — готовая программа на Питоне, реализующая нашу передачу!

Ее можно сохранить в отдельную папку и использовать как угодно, модифицировать и пр. Это достаточно удобно, т.к. позволяет например, дописать свой UI, сделать запуск по расписанию, в общем, все ограничено только фантазией программиста.

Немного модифицируем граф, чтобы запускать программу в режиме “узкой ЧМ”, которая используется в рациях и радионянях:

Отличие небольшое — мы установили блок NBFM, а частоту передачи установили в 433.075МГц — первый канал LPD-диапазона. Включаем рацию, и слышим звук. Кстати, GNU Radio позволяет использовать в качестве источника не только WAV-файл, но и микрофон, так что программу легко переделать для передачи голосовых сообщений.

Амплитудная модуляция

Для тех у кого остался бабушкин приемник КВ-диапазона (хотя лучше конечно хотя бы Degen 1103 или IC-R9500), будет интересно попробовать режим AM. Для этого создаем следующий граф:

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

Еще больше SDR

Напоследок покажем, что HackRF может куда больше, чем просто рация из «Связного» ценой в 1000р. Это ведь полноценное Software Defined Radio, на котором можно передать что угодно. Чтобы показать легкость работы с “цифрой” в GNU Radio, дополним граф FM-трансляции так, чтобы HackRF передавал информацию одновременно на 2х частотах.

Читайте также:  рецепт на очки od какой глаз

Здесь мы добавляем второй файл, повторяем ту же самую структуру. Но полученные данные умножаем на комплексный синусоидальный сигнал с частотой 125КГц, что эквивалентно сдвигу частоты на эти 125КГц, в итоге второй поток данных будет транслироваться на частоте 433075+125 = 433200, что соответствует 6му каналу LPD. Теперь HackRF передает одновременно 2 звуковых файла на 2х разных частотах. Можно добавить и 3й, все ограничено лишь шириной полосы пропускания и мощностью компьютера.

На этом все. Заинтересовавшиеся темой GNU Radio могут найти туториалы в сети, их довольно-таки много.

Напоследок. HackRF не является полноценной радиостанцией, его мощность слишком мала и составляет около 20мВт, да и КПД штатной антенны менее 1%. Это скорее устройство для экспериментов с сигналами в «ближней зоне», в пределах офиса или квартиры. Если же кто-то захочет экспериментировать с более мощными сигналами, обязательно стоит соблюдать правила распределения радиочастотного спектра, чтобы не мешать другим.

Источник

HackRF: Первое знакомство с виновником торжества

Содержание статьи

Итак, мы разобрались в самых азах SDR, давай перейдем к более интересным вещам. С помощью HackRF ты сможешь не только анализировать более широкий диапазон сигналов, но и взаимодействовать с радиоустройствами. В общем, абсолютно полноценный SDR-трансивер за вполне вменяемые деньги.

Откуда у нас HackRF

Так получилось, что после прошлогоднего ZeroNights я посетил московский Hackspace Neuron и ушел оттуда не с пустыми руками, а с кодом на бету HackRF под честное слово, что девайс не будет пылиться на полке. Дальше было долгое ожидание старта бета-программы. И вот спустя без малого год обычной почтой прибыл долгожданный HackRF Jawbreaker. Большое спасибо Майклу Оссману (Michael Ossmann) за разработанный девайс и Александру Чемерису из Fairwaves за предоставленную возможность поучаствовать в программе бета-тестирования. Примечательно, что, судя по надписи на борту, плата была изготовлена в декабре 2012 года.

Обрезание

Итак, посылка вскрыта, фото сделано, приступим к делу. HackRF поставляется с плохонькой встроенной антенной на

900 МГц. При этом, несмотря на наличие уже распаянного SMA-разъема, просто подключить внешнюю антенну не получится, сигнал все равно будет браться с изогнутой дорожки с краю платы.

Внешне происходящее в GNU Radio похоже на программирование робота Mindstorms

Хакер #177. Радиохакинг: что такое SDR?

Чтобы задействовать желанный антенный разъем, необходимо отключить встроенную антенну. Для этого придется проделать небольшую хирургическую операцию, а именно разорвать одну токопроводящую дорожку. На плате место препарирования предусмотрительно отмечено стрелочкой, и на место будущего разрыва нанесена капля припоя, которую лучше предварительно удалить паяльником. После этого, вооружившись чем-нибудь тонким и острым, нужно разрезать (разорвать) токопроводящую дорожку. Осторожно, поблизости расположено несколько элементов, которые с платы удалять нежелательно, так что будь аккуратен :).

HackRF Jawbreaker — обрати внимание на дату производства

Перед тем как брать в руки скальпель, рекомендуем просмотреть инструкцию.

После успешного обрезания HackRF готов к подключению внешней антенны. Форма, размеры и конструкция созданных впоследствии антенн чрезвычайно разнообразны и зависят от рабочей длины волны и назначения антенны. Если под рукой не оказалось подходящей антенны с SMA-разъемом (как в нашем случае), можно обойтись парой метров медного провода, извлеченного из сетевого кабеля пятой категории aka «витая пара». Достаточно воткнуть один конец в центр антенного разъема на плате (не замкнув при этом на землю), а второй подвесить, например, к люстре. Нам же для начала вполне подойдет кусок провода подлиннее, легко выдираемый из любого сетевого кабеля. Вставляем провод в SMA-разъем, подключаем HackRF по USB к компу, и можно приступать к установке/настройке софтовой части.

Для экспериментов с радио вообще и HackRF в частности пригодны Linux и более-менее OS X. Про Windows по большей части можно забыть, так как под ней ничего, кроме SDR# и HDSDR, не работает.

Самый простой путь получить весь нужный софт в работающем виде — это воспользоваться уже готовым дистрибутивом RTL-SDR/HackRF Live DVD. Также буквально во время написания этой статьи вышел Kali Linux 1.05 с поддержкой RTL-SDR.

Для установки SDR утилит в Kali требуется выполнить следующие команды:

Пользователи OS X могут найти готовые формулы для Homebrew для большинства необходимого софта и собрать все ручками под себя. Однако без понимания и работы напильником не обойтись.

Для начала работы с HackRF потребуется следующий софт:

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

Baudline выглядит, конечно, винтажненько

В итоге интересующий нас файл — firmware-bin/hackrf_usb_rom_to_ram.bin. Берем его и прошиваем в недра Jawbreaker’а:

После чего для проверки работоспособности HackRF и корректности подключения опросим устройство стандартной утилитой из комплекта hackrf-tools:

Упражнение 1. Быстрый старт

Долго думать над применением девайса не придется, эфир в наше время буквально кишит различной информацией. Простейший способ ее оттуда достать — упомянутый программный приемник gqrx. А первым приходит в голову, что можно принять с помощью радио, как ни удивительно, — радио! Обычное вещание твоей любимой радиостанции с использованием частотной модуляции (FM).

Читайте также:  проблемы с челюстью к какому врачу обратиться

Экран запуска gqrx

Запускаем gqrx, выбираем HackRF Jawbreaker в качестве устройства, оставив остальные пункты по умолчанию.

Остается только нажать на кнопку старта приема и лицезреть визуализацию радиоэфира. Ползущая водопадом вниз спектрограмма наглядно дает понять, на каких частотах ведется вещание, яркость полос соответствует интенсивности сигнала. Далее устанавливаем нужную частоту, демодулятор типа Wide FM, и вуаля, из аудиовыхода уже слышны осмысленные звуки.

Ура, у нас фм-тюнер за 300 баксов! Но это даже не вершина айсберга возможностей, которые открываются перед нами, ведь можно не только принимать, но и передавать! Но с чего начать?

Упражнение 2. Нюхаем и запоминаем

В качестве подопытного возьмем бытовой беспроводной звонок. Данное устройство состоит из двух частей: передатчика с кнопкой звонка и приемника с мерзким динамиком-пищалкой. При нажатии кнопки звонка происходит передача данных (уникальных для каждой пары приемник/передатчик) «в цифре» на частоте 433,92 МГц, если верить инструкции. Наша задача отснифать сигнал передатчика и научиться повторять, чтобы можно было звонить соседу в дверь удаленно.

Для начала определимся с частотой и проверим наличие сигнала при помощи gqrx.

Как видно из картинки выше, при отправке сигнала четко заметен небольшой «всплеск», оставляющий на спектрограмме ярко-красный след. Итак, данные передаются, теперь запишем их в файл командой

Запустив снифер, «звоним в звонок». Количество данных, получаемых из АЦП при сэмплировании на 16 МГц, достаточно велико, и лишние минуты работы снифера могут вылиться в гигабайтные дампы, 99,9% которых — бесполезный шум, наследие бесконечного космоса. Сейчас же нас интересуют земные сигналы, а именно что же передала кнопка звонку.

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

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

WARNING

Также следует учесть, что baudline имеет дурное свойство падать при открытии больших файлов, так что если ты пишешь длительный по времени радиообмен, то следует воспользоваться командой dd и порезать полученный файл на кусочки. Например, так:

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

Что ж, раз сигнал есть, попробуем его воспроизвести в эфир.

Слушаем частоту нашего звонка Получи FM-тюнер за 300 долларов

Упражнение 3. Собственно реплей

Просто, не правда ли? Слишком просто! Жаль, что на данный момент hackrf_transfer опять поломали в части отправки. Поэтому для проигрывания записанного дампа будем использовать исключительный Инструмент с большой буквы И — GNU Radio.

Для нашей цели источником сигнала будет файл дампа, который мы только что инспектировали при помощи baudline. Для его подгрузки просто добавляем блок File Source и в его свойствах указываем путь до файла. Следует обратить внимание на то, что каждая точка соединения имеет свой тип (на самом деле это тип данных Python) и цвет. Наш первый блок будет отдавать данные типа Byte, что, впрочем, неудивительно для ресурса-файла.

Следующий блок в цепочке (Add Const) также требуется для приведения данных из нашего радио к виду, пригодному для дальнейшей работы, а именно для выравнивания сигнала относительно нулевого уровня сложением с вектором-константой. Теперь наши данные выглядят и имеют формат по всем правилам GR, и можно отправить их прямо в блок вывода (osmocom Sink).

Osmocom Sink как раз реализует прослойку между GR и множеством различных ресиверов и трансмиттеров, и HackRF в их числе. Sink-блок для нашего случая обладает практически теми же параметрами, что и hackrf-transmit. Для более удобного изменения частоты передачи и частоты дискретизации в дальнейшем, создадим переменные (вытащим из списка пару блоков Variable), назовем их freq и samp_rate и зададим соответствующие значения: 433 МГц и 16 МГц. Ведь с какими параметрами записывали, с такими и надо отдавать. При конфигурации блока вывода в соответствующих полях укажем не значения, а имена переменных. Так, при определении свойств блоков в полях можно указывать не только константы, но и переменные и даже целые выражения, что, по сути, дает огромные возможности.

Итак, преобразование данных описано, свойства блока вывода соответствуют исходным условиям, время запустить эту шарманку! По аналогии с IDE разработки, кликаем на кнопку компиляции, в результате получаем проект, собранный в виде Python-скрипта, пригодного для запуска отдельно от gnuradio-companion.

. Пространство разрывает звук китайской псевдополифонии. Так что теперь можно зазвонить соседей ровно до того момента, пока они не вытащат батарейки из своего звонка. Использование направленной антенны приветствуется.

Итого

HackRF отлично вписывается в нишу бюджетных приемопередатчиков, да и само комьюнити SDR бурлит и развивается, выходят дешевые гаджеты, пишется софт, жизнь удалась. Уже есть проекты для работы со спутниками, ADS-B, GSM, LTE, Bluetooth, а то, чего еще не придумали, ты можешь реализовать сам в GNU Radio.

Источник

Сказочный портал