Хак для DJI Mavic Mini CE
Sergei SПрямо в браузере
Теперь хак можно применить ещё проще, чем описано ниже, без Python во втором шаге, а прямо в браузере с компьютера. Видео, инструкция на русском и сам хак в браузере: mavic-mini-ce-boost.github.io/ru/
Вариант, описанный ниже, тоже совершенно рабочий.
* * *
Дискриминация
Правила по допустимой мощности радиоустройств и используемым частотам в разных странах отличаются. Например, в США разрешена большая мощность передатчиков и можно использовать частоту 5.8 GHz. В Европе разрешенная мощность раз в 10 меньше, но используется частоты и 2.4 GHz и 5.8 GHz. В России вне зданий можно использовать только частоту 2.4 GHz.
DJI Mavic Mini выпускается в разных версиях, отличающихся железом: американо-китайская FCC, японская совсем-лёгкая, и европейская CE. Новый дрон DJI Mini 2 вышел в единственном вариате железа и все ограничения в нём софтверные.
Если у вас европейская "CE" версия Mavic Mini, а только такие продают в России официальные дилеры, то мощность сигнала оставляет желать лучшего и дальность полёта невелика. По российским стандартам мощность не на максимуме (источник инфы не найти) и доступна только частота 2.4 GHz. Это частоты бытового WiFi и поэтому в городе для дрона много радио помех.
Яги
Чуть улучшить ситуацию можно насадками на антенны – «Яги» (Yagi Uda) – их печатают на 3D-принтерах умельцы и продают на Авито. Я себе купил пару и эффект был ощутимый: связь стала надёжнее, мини стал отлетать дальше прежде, чем связь терялась и дрон начинал автоматический возврат «домой». Яги просто фокусируют сигнал с пульта в одном направлении, как луч фар. И пульт нужно держать так, чтобы антенны Яги всегда смотрели на дрон.
Хак
Ещё один трюк, чтобы использовать возможности своего железа по максимуму — хак, который заставляет дрон и пульт думать, что они в другой стране, где можно всё. Появляются каналы 5.8 GHz и повышается (перестаёт занижаться) мощность передатчика.
Как сделать хак
Хак делается один раз и дроном потом пользуетесь как обычно. Два шага:
- заставить дрон думать, что он в США или Боливии;
- хакнуть пульт, чтобы он не переключил дрон обратно на российские стандарты.
Что понадобится
- мобильник с Android, т.к. для Apple сложнее подсунуть левые координаты GPS и установить старую версию DJI Fly;
- один раз, для хака, понадобится старая версия DJI Fly:
1.1.2. Можно её скачать с сайта APK Mirror. Удалите с телефона современную версию DJI Fly, скачайте файл apk с APK Mirror и установите, открыв скачанный файл в Проводнике. На всякий случай, сразу отключите Автообновление для этого приложения. После применения хака можно удалить старую версию, установить свежую из Google Play и возобновить автообновления. - установить на телефон апп Fake GPS Location он подскажет, как перевести телефон в режим Разработчика и в качестве приложения координат указать этот апп;
- компьютер под Windows или Mac OS X или Linux. На нём понадобится язык программирования Python (на маке и linux, скорее всего, уже стоит по умолчанию);
- провод USB от компа к пульту дрона;
- дом, крыша над головой: все следует проделывать в месте, где дрон не поймает сигнал спутников GPS.
Шаг 1: ваш дрон летит в Боливию
Запускаем на телефоне апп Fake GPS Location. Если это в первый раз, надо будет зайти в Настройки Android, Система, О Телефоне, найти там фразу "Build number" и 7 раз тыкнуть по ней. Это шаманство включит режим разработчика на телефоне и появятся дополнительные меню. В этом новом меню Расширенные настройки – Для Разработчиков найдите пункт «Приложение для фиктивных местоположений» – и выберите там приложение "Fake GPS Location".
Теперь в этом приложении прокрутите карту мира на Южную Америку, найдите там Боливию и тыкните где-то на её территории. И нажмите кнопку с треугольником ▶️. Ваш телефон начнёт всерьёз полагать, что вы находитесь в Боливии. Откройте, например, карты Яндекс – он должен вас показать среди лесов этой страны.
Подключите телефон к пульту дрона и включите пульт. Запустите DJI Fly 1.1.2
Включите дрон. Под крышей, чтобы он не поймал GPS. Взлетать мы не будем.
В приложении DJI Fly появится сообщение, что обновились настройки подключения, чтобы соответствовать местному законодательству и дрон сейчас будет переподключён.
Дрон теперь думает, что он в Боливии. Прекрасно!
Выключаем дрон, выключаем пульт, закрываем DJI Fly, отключаем телефон от пульта.
Шаг 2: как два байта отослать
Подключаем пульт к компьютеру USB-шнуром. Включаем пульт.
На компе понадобится командная строка: под Windows это Command Prompt (Командная строка), под Mac OS и Linux – Terminal.
Проверьте, что у вас установлен и работает Python, наберите команду:
python --version и нажмите Enter. Должен будет вывести версию установленного питона, например, Python 3.7.3
Установите модуль питона для работы с серийным портом pySerial. Скорее всего, это получится сделать командой pip install pyserial
Если нет, попробуйте python -m pip install pyserial
Проверим, как он работает, пусть покажет все порты:
python -m serial.tools.list_ports -v
На Mac OS X у меня показало два порта:
/dev/cu.Bluetooth-Incoming-Port
desc: n/a
hwid: n/a
/dev/cu.usbmodemFA131
desc: Gadget Serial v2_4
hwid: USB VID:PID=2CA3:0008 LOCATION=250-1.3
2 ports found
Первый, видимо, какой-то BlueTooth, а вот второй похож на искомый пульт. Значит, название моего порта /dev/cu.usbmodemFA131
Под Windows порты будут иметь названия COM1, COM2, ..
Вот весь код хака. Он просто отправляет в порт пульта короткую последовательность байт:
import serial
comport = "COM5"
ser = serial.Serial(comport, 9600)
command1 = b'\x55\x0e\x04\x66\x2a\x1b\x07\x27\x40\x06\xfb\x02\xac\x35'
ser.write(command1)
print ('You have hacked Your Mini')
Скопируйте этот код, замените в нём в кавычках имя порта "COM5" на имя, которое мы узнали выше – например, станет "/dev/cu.usbmodemFA131" – и сохраните файл с названием MiniBoost.py
Теперь выполните этот файл: python MiniBoost.py
Если всё в порядке, выведет сообщение, что ваш Mini хакнут!
Дивный новый мир
Теперь в выборе каналов появятся, помимо 1–11, ещё и трёхзначные из диапазона 5.8 Ghz:

Как всё вернуть?
Чтобы откатить назад внесённые изменения, есть похожий файл, с другими байтами и другим сообщением в конце:
import serial
comport = "COM5"
ser = serial.Serial(comport, 9600)
command1 = b'\x55\x0e\x04\x66\x2a\x1b\x25\xf9\x40\x06\xfb\x03\x9c\x37'
ser.write(command1)
print ('Your Mini is in initial stock state')
Тоже, замените COM5 из примера на название вашего порта. Оно должно быть в кавычках. Сохраните файл с названием MiniStock.py И выполните его:
python MiniStock.py
Нужна помощь?
Присоединяйтесь к чату владельцев DJI Mavic Mini и Mini 2 в России: @mavicminirus
Что ещё почитать?
FAQ по Mavic Mini: https://t.me/mavic_mini_FAQ
Инструкция по увеличению мощности для FCC и CE, все варианты.
Благодарности
За идею и код хака благодарим @SkyhackRu сайт SkyHack.ru и можно угостить автора хака чашечкой кофе виртуально.