Процедура извлечения Bootloader из процессоров Xiegu G90

Привет всем радиолюбителям и любителям крутых китайских трансиверов. В этой статье я расскажу о процедуре извлечения кастомного бутлоадера из процессоров трансивера Xiegu G90.

Все что вы прочтете ниже представлено только для ознакомления! Любые манипуляции со своим трансивером вы делаете на свой страх и риск! Все процедуры проводились на трансиверах с процессорами STM!

Зачем это нужно?

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

Ознакомиться со схемами и бутлоадером можно здесь.

А также если не видели этот ролик — посмотрите. Я старался.

И, как правило, единственный способ чинить подобные вещи, это реверс-инженерия.

Для чего нам нужен Bootloader?

Bootloader в процессорах Xiegu служит двум целям:

  • Цель первая – это начальная инициализация процесса загрузки основной программы.
  • Цель вторая – это расшифровка прошивки и обновление микропрограммы процессора.

Дело в том, что прошивки для трансиверов Xiegu производителем зашифрованы, дабы их никто не смог дезассемблировать, проанализировать и украсть.

Одинаковы ли бутлоадеры для процессоров STM и GD?

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

Подробнее этот вопрос разбирали на стриме.

Как обновить прошивку трансиверов Xiegu?

Механизм обновления или перепрошивки трансивера выглядит следующим образом.

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

Xiegu G90

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

Важно! В параметрах настройки кабеля для прошивки обязательно выставите правильный порт и скорость 115200! Иначе ничего не получится.

tera term

Если в течение этих пары секунд на экране терминала вы видите Hit a key to abort bootting.. 5-4-3-2-1… это говорит нам о том, что подпрограмма бутлоадера стартовала и ждет пока вы дадите какую-нибудь команду в терминал, чтобы прервать процесс загрузки и войти в режим обновления прошивки. Если ничего не нажимать, то по прошествии пары секунд стартует основная программа процессора.

А вот если вы нажали любую клавишу, то увидите это.

xiegu g90

Далее жмем 1, и подпрограмма бутлоадера начинает процесс очистки памяти процессора от старой прошивки.

xiegu firmware

Как только процесс закончится, вам нужно будет отправить в трансивер файл прошивки:

File → Transfer → XMODEM → Send и выбираем файл прошивки.

Важно! Не забываем поставить галочку 1К, иначе прошивка встанет криво!

xiegu firmware update

Далее жмем кнопку «Открыть» и дожидаемся окончания процесса.

Xiegu firmware

Физически отключаем трансивер от питания. Ждем 5-10 секунд и включаем трансивер. Если все сделано верно, то аппарат должен запуститься.

Так зачем же нам Bootloader?

Дело в том, что иногда прошивки имеют дурацкое свойство — слетать по непонятным причинам. Так происходит, например, с новыми китайскими процессорами GD32F450ZIT6 (GigaDevice, идут в новых Xiegu G90) и не только. Если, вы, например, упороли свой процессор статикой и хотите его поменять, без оригинального XG Bootloader, поменяв процессор на новый, не сможете загрузить в него заводскую прошивку. Короче говоря, подпрограмма бутлоадера – это важная и нужная составляющая в жизни любого Xiegu-вода. Поэтому ее обязательно нужно иметь под руками.

Как извлечь XG Bootloader?

Увы, не все так просто, но ключи к этой части инженерии Xiegu у нас есть! Вот они. Этот продукт напряженной работы человеческого гения называется G90Tools. Это пакет исходных кодов и готовых программ, при помощи которых можно добыть из памяти Xiegu G90 код бутлоадера, при этом ничего не разрушая, не рискуя процессором, здоровьем трансивера, своими нервными клетками, и т.д. Автором этого инструментария является Konrad Beckmann можете выразить ему свое восхищение на GitHub.

Далее я буду описывать исключительно свой опыт. Если кто сможет сделать более изящно, пишите в комментариях!

Итак, для извлечения бутлоадера нам понадобится:

  • Компьютер под управлением Windows. Это основная рабочая машина, на ней будем делать все основные операции.
  • Компьютер под управлением Linux c установленным Python и Arm GNU Toolchain (arm-none-eabi). В моем случае это был Debian 11 и он у меня просто был. Он нужен для некоторых моментов, например на нем я компилировал прошивку и проводил операции преобразования. Его можно просто поставить на виртуальную машину. Либо, если вы знаете как выполнить такие же операции под Windows, напишите в комментариях.
  • Отладчик ST-LINK V2. Можно купить на AliExpress. Стоит не дорого.
  • Штатный кабель для прошивки трансивера.
  • Терминальная программа Tera Term 4.96.
  • Пакет программ G90Tools (ссылка выше).
  • Пакет программ для отладки OpenOCD.

Важно! Если вы решите залезть в прошивку напрямую через ST-Link и случайно снимите галочку защиты от чтения, то получите  полностью чистый процессор без бутлоадера и прошивки! Трансивер перейдет в состояние — кирпич, с которым вы ничего уже не сделаете. Короче, press F to pay respects! :-) Поэтому вытащить бутлоадер из процессора — приоритетная задача!

На чем сделан Xiegu G90?

  • Сердцем главного блока (Main Unit), или тушки, служит процессор STM32F429ZGT6, либо GD32F450ZIT6.
  • Сердцем передней панели (Display Unit), или морды, служит процессор STM32F103RCT6, либо GD32F103RCT6.

Добываем ключ шифрования из прошивки

Как я уже писал, прошивки у Xiegu зашифрованы. Зашифрованы они при помощи алгоритма AES256. Взломать такой шифр без ключей практически невозможно, и поэтому добыть ключ очень важно. Далее поймете почему. К счастью для нас, разработчики Xiegu оставили дыры в защите, благодаря которым можно практически беспрепятственно забрать ключик из памяти трансивера во время процесса перепрошивки.

Процесс извлечения ключа сводится к следующему.

Подключаем ST-LINK к трансиверу. GND (черн), SWCLK (бел), SWDIO (желт), 3.3V (син).

XIEGU G90

На компьютере в папке с отладчиком OpenOCD создаем BAT файл, в который пишем следующее:

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c “init; dump_image ramdump.bin 0x20000000 0x50000” (для слива дампа из тушки)

openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c “init; dump_image ramdump.bin 0x20000000 0x50000” (для слива дампа из морды)

Его мы будем запускать в процессе заливки прошивки в процессор трансивера.

Далее инициализируем процесс прошивки при помощи программы Tera Term (как описано выше) и пока бежит полоска, показывающая прогресс загрузки прошивки, запускаем наш ранее созданный BAT файл с отладчиком OpenOCD. Прошивка останавливается (это нормально), а взамен мы получаем файл ramdump.bin, из которого мы будем добывать ключ!

ramdump.bin — это дамп памяти процессора, в котором хранится нужная нам последовательность для расшифровки или зашифровки прошивки трансивера.

Для извлечения ключа шифрования необходимо скачать утилиту [findaes]. Она есть как под Linux так и под Windows. Я использовал верcию под Windows. Cкармливаем этой программе наш дамп.

findaes ramdump.bin

На что программа должна выдать следующее

Searching ramdump.bin Found AES-256 key schedule at offset 0x488: 43 51 58 49 45 47 55 2d 58 49 45 59 49 20 20 20 59 41 4e 48 55 41 4e 20 4d 4f 55 4c 49 41 4e 5a

Все что после двоеточия – это и есть наш ключ шифрования.

По идее он у всех должен быть одинаковый. Кстати, если кто будет пробовать, отпишитесь какой ключ получился у вас?

Для его использования нужно убрать из него все пробелы приведя к такому виду: 435158494547552d584945594920202059414e4855414e204d4f554c49414e5a

Это важный момент! Далее выходим на финишную прямую. Копируем ключик на флешку, он нам скоро пригодится.

Расшифровка прошивки

Для этих целей в пакете G90Tools есть скрипт encryption.py, запускается он при наличии у вас установленного языка Python. Формат командной строки следующий:

Расшифровать: python encryption.py <ключ> decrypt fw_encrypted.xgf fw_plaintext.bin

Зашифровать: python encryption.py <ключ> encrypt fw_plaintext.bin fw_encrypted.xgf

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

Извлечение бутлоадера из процессора

Для извлечения кода бутлоадера из процессора трансивера нам потребуется прошивка — троянский конь! Суть в следующем: мы собираем особую версию прошивки, которую загружаем в процессор трансивера через штатный бутлоадер. Если прошивка будет зашифрована при помощи извлеченного нами ключа, то расшифровка и обновление прошивки пройдет штатно. Задача этой кастомной прошивки – при загрузке считать память процессора, в которой хранится бутлоадер, и выдать его нам через UART в терминальную программу. Будем для этого использовать ту же Tera Term.

Далее, я перешел на комп с Debian Linux 11. Если знаете, как все это сделать под Windows – пишите в комментариях.

Устанавливаем инструменты разработчика.

apt install build-essential git cmake

Скачиваем себе в домашнюю папку репозиторий G90Tools

git clone https://github.com/OpenHamradioFirmware/G90Tools.git

Устанавливаем Python последней версии. Если пайтон у вас установился в директорию отличную от /usr/bin/python то выполните следующую команду

ln -s /usr/bin/python3 /usr/bin/python

Последняя версия на данный момент 3.9.2, а для работы скрипта Make этот параметр важен.

Также вам потребуется установить Arm GNU Toolchain. Пакеты с названием arm-none-eabi.

apt install gcc-arm-none-eabi

Это перекрестный компилятор GCC для процессоров ARM Cortex-A/R/M. Без него вы ничего не скомпилируете, и у вас будет вот такая картина.

xiegu bootloader

Для сборки прошивки идем в папку extract_bl или extract_bl_main, в зависимости от того, из какого процессора вы собираетесь добывать bootloader,

  • extract_bl – STM32F103RCT6, либо GD32F103RCT6 стоит в передней панели.
  • extract_bl_main – STM32F429ZGT6, либо GD32F450ZIT6 стоит в основном блоке.

В папке extract_bl есть уже скомпилированная и зашифрованная версия прошивки firmware.enc, можно использовать ее, но лучше все сделать самостоятельно. В папке extract_bl_main такой прошивки нет и ее в любом случае придется делать. Выполняем команды

cd extract_bl (или extract_bl_main)

make KEY=ключ шифрования TTYUSB=/dev/ttyUSB0 flash-encrypted

Если все прошло успешно, то у вас в папке, где вы проводили сборку прошивки, появятся 3 файла.

firmware.bin – скомпилированная прошивка троянский конь.

firmware.elf – собранная прошивка для загрузки через отладчик.

firmware.enc – зашифрованная прошивка для загрузки через штатный бутлоадер.

По большому счету нам нужна только firmware.enc, копируем ее на флешку и идем дальше.

Дополнение: скрипт Makefile, который находится в папке с исходниками, также способен после сборки прошивки запустить процесс обновления через утилиту g90updatefw, но лично я этим не воспользовался, забрал файлы на основной компьютер под управлением Windows и остальную работу делал там.

Установка прошивки для извлечения бутлоадера

Следующий этап это прошивка в трансивер той микропрограммы, которую мы с вами только что скомпилировали и зашифровали ранее добытым ключом. Это нужно, чтобы бутлоадер принял нашу кастомную прошивку за настоящую и записал ее в память процессора. Процесс прошивки кастомной микропрограммы не отличается от обычного обновления. Повторяем все тоже самое, что мы делали в пункте «Как обновить прошивку трансиверов Xiegu?» при помощи обычной программы Tera Term.

Добываем код бутлоадера

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

Переведите Tera Term в режим Log.

tera term

Обязательно поставьте галочку Binary. Файл, в который будет записываться hex код, назовите bl.hex. Можно и по-другому, это не так важно.

tera term

Включаете трансивер и ждете пока на экране Tera Term закончится движение. После этого закрываете файл bl.hex, выключаете трансивер и идете изучать, что же нам выдала кастомная прошивка.

Из начала файла bl.hex необходимо удалить строки «Hit any key to abort…» и так далее, чтобы в итоге ваш файл приобрел вот такой вид.

xiegu bootloader

Копируем файл на флешку и опять идем на компьютер с Linux. Там копируем файл в свою домашнюю папку и выполняем следующую команду.

xxd -g 1 -r < bl.hex > bl.bin

На выходе у нас получится файл bl.bin, который и будет нашим бутлоадером, который можно прошивать в процессор. Собственно все. Дело сделано.

А как же авторские права?

Это не простой вопрос. Компания Xiegu наотрез отказывается общаться со своими основными потребителями, то есть с радиолюбителями. Они не отвечают на письма и игнорируют любые обращения в их адрес. Нам не остается ничего другого, кроме как делиться этой информацией друг с другом и широкой общественностью. Делаем мы это не ради того, чтобы досадить компании Xiegu, которая делает действительно неплохие трансиверы, а для выживания в условиях тотального отсутствия поддержки производителя!

Всем удачи, 55, 73!

Оцени статью
( 14 оценок, среднее 5 из 5 )
Denis Dubov
Денис Дубов/ автор статьи

✅ Автор и создатель журнала RADIOCHIEF.RU Радиолюбитель (позывной R3XCR). Более 10 лет в сфере гражданской и профессиональной радиосвязи. Пишу и снимаю обзоры на технику связи, а также занимаюсь ремонтом и доработками радиостанций.

Хотите поддержать автора? Поделитесь ссылкой на статью с друзьями!
RADIOCHIEF.RU
Комментарии: 1
  1. Эдуард

    Получается я остался без трансивера.я сам не смогу так научно востановить сей аппарат,мозгов маловато. :cry:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: