Создание фейковой домашней точки локальным GPS спуффингом с помощью HackRF
1 По идеологии DJI, домашняя точка или Homepoint дрона, должна как можно точнее соответствовать точке его взлета. Компания DJI программно ограничивает высоту полета 30 метрами, если на момент взлета не произошло определение и записи координат домашней точки дрона. Скорее всего, это делается в целях безопасности, чтобы в случае взлета до определения домашней точки дрон не улетал далеко, пока не будет поймано достаточное количество спутников и записана домашняя точка. Если дрон далеко улетит и Homepoint будет определена вдали от места старта, дрон будет возвращаться в автоматическом режиме не к месту взлета, а к этой далекой от пилота домашней точке. Однако, в некоторых случаях при осознанных действиях пилота это может сильно ограничить его возможности.
3 Одним из путей решения проблемы может быть создание ложной домашней точки с помощью имитации сигналов от ГНСС спутников. Создать фейковую Home Point можно с помощью устройства HackRF. Напомню, что HackRF это комбинация всеволнового программно определяемого приемника и передатчика малой мощности, способного работать в диапазоне от 1 до 6 гигагерц. Хотя заявленная выходная мощность не велика, около 18мВт, ее должно хватить для передачи сигналов похожих на спутниковые при близком расположении антенн HackRF и GPS приемника дрона. HackRF существует в виде модуля с USB интерфейсом, через который можно управлять модулем, а так же в комплекте с интерфейсным модулем имеющим свой собственный экран и органы управления, плюс микроконтроллер с набором утилит, позволяющих работать с HackRF автономно, в рамках ряда типовых задачь, в число которых входит и подмена GPS координат. Такая комплектация называется PortaPack. Существуют несколько способов работы с HackRF – непосредственно через компьютер, через Android устройство и через модуль PortaPack. Я опишу только опробованный мною метод с использованием HackRF и PortaPack, как наиболее компактный и пригодный к полевому применению.
4 Давайте посмотрим, как вообще происходит процесс создания фейковой домашней точки для снятия ограничения в 30 метров. Для того, чтобы дрон записал домашнюю точку, его GPS приемник должен получить от спутников согласованный набор данных, который переведет его из состояния Float (нет точных координат) в состояние 3D Fix (известны координаты с достаточной точностью по осям XYZ). Состояние 3D Fix для GPS модуля дрона возможно при использовании данных минимум от 7 спутников. Меньшее количество спутников задействованных в вычислении местоположения, дает менее точные координаты по осям X и Y (широта и долгота), и не обеспечивает определение высоты (ось Z). Такое состояние называется 2D Fix. Чтобы понять дальнейшее, нужно вспомнить как происходит определение координат GPS приемника. Каждый спутник непрерывно передает пакеты данных, в которых содержится информация о расположении спутников на орбите относительно земли (эфемериды спутников), и сигналы точного времени от атомных часов установленных на спутнике. Проходя расстояние от спутника до GPS приемника, сигналы точного времени отстают от эталонного времени тем больше, чем спутник дальше от приемника GPS. Таким образом, зная скорость распространения радиоволн и величину задержки передаваемых сигналов времени, можно вычислить расстояние до спутника, а зная местоположения и расстояния до нескольких спутников, можно методом триангуляции высчитать координаты GPS приемника на поверхности земли. Таким образом, нам нужно подделать данные от минимум 7, а лучше большего количества спутников. Для этого, нам нужно не только имитировать сигналы точного времени с задержками от более чем 7 источников, но и передавать актуальные эфемериды. Задача не очень простая, но выполнимая.
5 Теперь о том, как все это реализовать. Нам потребуется скачать актуальные эфемериды, из которых с помощью программы gps-sdr-sym.exe можно сгенерировать файл фейковых спутниковых сигналов. После генерации файла, его загружают в HackRF с PortaPack, который и передаст ложные сигналы GPS-спутников в эфир. Если все сделано правильно, GPS-приемник дрона должен принять и обработать эти сигналы, в результате чего перейти в состояние 3D Fix и задать местоположение домашней точки с заданными нами координатами.
В теории все выглядит не особенно сложно. Я нашел в сети несколько разрозненных статей про генерацию файла сигналов с помощью gps-sdr-sym.exe. Эта программа управляется из командной строки, где мы задаем в качестве параметров файл с эфемеридами и координаты будущей домашней точки. При помощи буквенных ключей можно настраивать выходной файл под разные задачи. Примеров командной строки тоже было несколько, причем они заметно отличались. К примеру, в одной из статей большое внимание уделялось заданию правильного промежутка времени для генерации файла сигналов, в другой же статье приводится пример командной строки где параметры времени вовсе не задавались. Чтобы не утомлять вас лишней информацией, ниже я опишу проверенный мной метод создания домашней точки, который увенчался успехом, и расскажу о тех сложностях с которыми столкнулся. Файл эфемерид можно скачать с сайта NASA по ссылке https://cddis.nasa.gov/archive/gnss/data/daily/2023/brdc/ Потребуется пройти простую бесплатную процедуру авторизации. Вы попадете в каталог файлов эфемерид за разные даты. Пролистайте в самый низ и скачайте последний файл с вашей сегодняшней датой.
Скачиваем последний файл в списке с сегодняшней датой
Это архив в формате TAR GZ. Он открывается любым архиватором. Программу gps-sdr-sym.exe можно скачать у меня на сайте. Теперь нужно поместить программу и файл эфемерид в общую папку на диске, я использовал такой путь — С:\GPS-SYM. В эту папку нужно поместить конфигурационный текстовый файл (его имя может быть любым, но оно должно совпадать с именем будущего файла спутниковых сигналов). Я назвал его data.txt. В файле всего две строки:
sample_rate=2600000
center_frequency=1575420000
Я рекомендую тоже скачать этот файл у меня. Теперь про командную строку. Предлагаю воспользоваться проверенным мною вариантом:
c:\GPSsym\gps-sdr-sim -e c:\GPSsym\brdc1660.23n -s 1250000 -b 8 -o c:\GPSsym\data.C8 -l 55.75370218935547, 37.61987082788826,100 -d 100
Чтобы командная строка сработала, нужно чтобы у вас папка с файлами и их имена были как в моем примере. Имя файла с эфемеридами должно быть таким, какое вы извлечете из архива скачанного с сайта NASA. Координаты вы можете вставить свои, или оставить те что у меня, если нам важен сам факт создания домашней точки а не ее координаты. Если хотите вставить свои координаты, то они должны быть в системе WGS84, в десятичных градусах. Широта долгота и высота над уровнем моря в метрах разделены запятыми без пробелов, в качестве десятичного знака используется точка. Можно взять их прямо из Google Maps и дописать любую высоту. Для запуска программы из командной строки Windows (я пользовался 10 версией Windows, установленной как виртуальная машина на компьютере Mac) в строке поиска вводим “cmd” без кавычек.
Строка поиска и командная строка Windows
У нас должно открыться черное окно с командной строкой. Копируем и вставляем туда нашу строку, и жмем ENTER. Если мы все сделали верно, у нас произойдет генерация файла сигналов. Теперь нужно записать файл GPS сигналов sym.C8 и конфигурационный файл sym.txt в папку на MicroSD карточке, которую мы вставляем в PortaPack. И теперь, запускаем PortaPack и в меню Transmit выбираем утилиту GPSSym, открываем на карте памяти файл который мы создали, и если мы все сделали правильно, то увидим частоту излучения 1575.4MHz, битрейт 2600MHz. Если так, включаем в чекбоксом трансляцию данных в эфир по кругу (Loop) и включаем модуль на передачу данних в эфир.
1. Включение трансляции по кругу 2. Включение HackRF на излучение
Сейчас самое время включить питание дрона и пульта управления. Процедура «обмана» дрона происходит не так быстро как работа с реальными спутниками на улице, так что не спешите огорчаться, если за 5 минут ничего не происходит. По времени она будет примерно 5-10 минут, как «холодный старт» GPS модуля, когда вы очень долго им не пользовались или переехали в другую часть планеты. Признаком, что все идет по плану, будет показ 10 спутников в полетном приложении дрона. Лично я использовал дополнительный усилитель сигнала для HackRf, но источники в Сети утверждают, что и мощности HackRF должно хватить. Примерно через 10 минут программа сообщила об обновлении точки “Home”.
Экран DJI Fly с отметками фактического положения пульта и домашней точкой дрона
На карте полетного ПО появилась позиция дрона не в том месте где он находился, но и не в том месте которое я обозначил в командной строке. Широта совпадала, а по долготе дрон оказался в Северном море, у берегов Великобритании. Тем не менее, я считаю эксперимент успешным, так как домашняя точка была создана и ограничения в 30 метров преодолены.
6 Теперь расскажу о проблемах с которыми я столкнулся. Сначала я не мог запустить программу gps-sdr-sym.exe, так как Windows не находила ее, не смотря на то, что программа находилась в каталоге System32, путь к которому прописан в системном Path. Решить это удалось расположив программу в каталоге С:\GPS-SYM и явно прописав путь к нему прямо в командной строке. Аналогично пришлось добавлять путь и к имени файла эфемерид и к имени выходного файла.
Следующая проблема была с картой MicroSD для PrtaPack. Некоторые карты памяти устройство не обнаруживало, некоторые папки и файлы на карте памяти не читало. Причину я установить не смог, просто подобрал карту памяти которая нормально читалась и записал файлы которые тоже читались нормально.
Если у вас возникнут вопросы или захотите поделиться своими открытиями — напишите в комментариях к статье, я постараюсь вам помочь.






