На сказочном Бали выпал снег или как же легко обмануть GPS.
Нам необходимо:
1. Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом USB 3.0. На порту 2.0 я не тестировал, но должно заработать.
2. Плата USRP b210 (возможны и другие варианты).
3. Сгенерированный файл с сигналом, либо программа для его генерации GPS-SDR-SIM от проф. Эбинумы.
Блог профессора (немного не по-русски)
Порядок установки
Для запуска всего этого добра на компьютер надо неторопясь и аккуратно установить от производителя платы набор софта. Хотя, может, это и не обязательно. Но пусть будет. При установке под виндуз оно иногда жалуется, что не может добавить себя в PATH, но это не мешает, так как из всего этого добра мне понадобилась только утилитка uhd_find_devices.exe, которая позволила понять, увидела ли вообще система эту плату. Найти утилиту можно по адресу:
C:/UHD/bin/uhd_find_devices.exe
Затем втыкаем плату и открываем диспетчер устройств. Где можно обнаружить, что драйверов под устройство автоматом не установилось. Что же – бывает. Вручную с помощью программки zadig указываем системе, что под плату надо использовать драйвера libusb, т.е. winusb.
После того, как система подцепила стандартный драйвер, можно запустить uhd_find_devices из набора софта от производителя платы. Эта утилита должна найти плату и прошить её контроллер (там стоит FX3 от Cypress). Кажется, после этого устройство изменит свой PID и надо будет рассказывать системе (с помощью zadig), что и под это устройство можно использовать стандартные драйвера winusb.
Конечно же оно с первого раза не заработает. И конечно же это можно вылечить путем отсоединения платы и подсоединения обратно. Вот подробная инструкция.
Необходимо установить гнурадио, которое внутри себя содержит пайтон-питон. Я взял отсюда последнюю версию под AVX2 процессоры.
Мне было лень настраивать правильным образом окружение, поэтому я воспользовался скриптом, входящим в комплект: C:/GNURadio-3.7/bin/run_gr.bat
Через него я буду запускать скрипт для посылки сгенерированного файла в плату b210.
Для удобства путь до этого скрипта надо добавить в переменную окружения PATH.
Генерация сигнала
Исходники берем тут. Что приятно удивило, так это легкость и простота сборки. Никаких зависимостей, никаких дополнительных действий. Все бы так.
Сборка под линукс
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Сборка под виндуз
1 Start Visual Studio. Запустить студию (я использовал 2015)
2 Create an empty project for a console application. Создать пустой консольный проект. Именно пустой!
3 On the Solution Explorer at right, add "gpssim.c" and "getopt.c" to the Souce Files folder. Добавить два сишных файла в проект.
4 Select "Release" in Solution Configurations drop-down list. Изменить тип сборки на релизный, выбрать архитектуру x86 / amd64.
5 Build the solution. Собственно, собрать.
Я под линукс не собирал, т.к. была необходимость запустить всё на конкретной машине, а на ней стояла десятка.
Подробное описание параметров генератора есть в ридми. Для начала можно не разбираться, а сделать очень просто, сгенерировать сигнал таким образом:
gps-sdr-sim.exe — это файл, который вы собрали студией.
brdc3540.14n — это файл с эфемеридами спутников.
2500000 — это частота дискретизации
30.286502,120.032669 — координаты
100 — высота
8 — это разрядность чисел в выходном файле (один отсчет — это IQ, два числа).
300 — это длительность в секундах.
-v — это чтобы побольше писало в лог
sim.bin — имя выходного файла.
Вы можете взять строчку из ридми, но она сгенерирует сигнал с ЧД=2,6 МГц, тогда и b210 надо будет настраивать на ту же ЧД (частота дискретизации). Если сгенерировать с одной частотой, а на плату выдавать с другой, то, конечно же, ничего не заработает.
Сигнал на плату я подавал с помощью такой команды:
run_gr.bat gps-sdr-sim-uhd.py -t sim.bin -s 2500000 -x 40
40 — это уровень. 2500000 — это ЧД. Подробное описание настроек можно увидеть в файле gps-sdr-sim-uhd.py, он очень прост для понимания.
Для b210 значение ЧД должно нацело делить частоту внутреннего генератора, а он там, кажется 40 МГц.
А теперь самое интересное.
Отключаем плату.
Подключаем плату.
Запускаем uhd_find_devices
Если не определилось, то goto 1.
Запускаем transmit.bat, следим за логом.
В определенный момент на плате загорится второй диод, что будет означать, что всё уже начало излучаться.
Если в логах постоянно выводится буква U, значит, ваша система не успевает подсовывать данные в плату. Вам стоит проверить, не работает ли что-то на фоне и не указали ли вы очень высокую ЧД.
Через некоторое время (до 3 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.
З.Ы. Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту. Данный прием можно использовать как для развлечения так и во вред. К примеру координаты шавермы подменить на свои и всё, все девушки ваши.
Честно не представляю зачем это может понадобиться ) Но если очень надо, под андроидом GPS положение меняется через системные настройки и включение режима дебага )
Как то очень сложно. Я ложные GPS данные в мобильное приложение через Nox передавал, выглядит как обычная виртуалка на компе, чем она по сути и есть.
Хотя, если вы под домашним арестом, а погулять очень хочется, то наверное для обмана браслета метод в самый раз
ТС, если ты еще живой, ответь, за год платок дешевле хакрф не появилось ?
@moderator, в теги добавить "habrahabr"