Skip to content

re-engr/jn5169-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

JN5169-monitor

Bootloader JN5169 содержит уязвимость которая позволяет получить доступ к прошивке микроконтроллера при установленной защите CRP_LEVEL=1. Подробнее здесь https://re-engr.ru/jn5169-fw-lock/

Бинарный файл /wire/mon5169.bin записывается во FLASH память. В программе реализован командный интерфейс. В качестве канала связи используется USART0.
Скрипт /wire/upload.py записывает прошивку в свободную память и делает ее активной.

История версий

Скрипт

  • 0.3 (Dec 26 2022)
  1. Изменен порядок загрузки монитора. Искажение магического числа действующей прошивки происходит после успешной загрузки монитора;
  2. Добавлена проверка контрольной суммы в ответах JN5169;
  3. Добавлен алгоритм исключающий повреждение действующей прошивки устройства при повторной попытке записи монитора;
  4. Исправлены информационные сообщения;

Монитор

  • Dec 26 2022
  1. Команды 'o' и 'u' (чтение OTP и User data) выводят информацию в консоль в виде читаемых ASCII-символов;
  2. Команда 'e' считывает область EEPROM размером 16380 байт (выходной файл XMODEM имеет размер 16384 байта);
  3. Команда '.e' очищает область EEPROM размером 16380 байт;
  4. Исправлены информационные сообщения;
  5. Добавлен вывод в консоль значений возвращаемых функциями из SDK;

Загрузка

  1. Запустить JN5169 с низким уровнем на контакте /BOOT (пин 22, DO1);
  2. В скрипте /wire/upload.py указать корректный номер COM-порта (например port='COM5');
  3. Выполнить скрипт /wire/upload.py. Сообщение Completed указывает на успешное завершение. Ошибки смотреть здесь;
  4. Запустить JN5169 с высоким уровнем на контакте /BOOT (пин 22, DO1);

Управление

Запустить TeraTerm (рекомендуется). Подключиться к COM-порту с параметрами 115200 8n1, no flow control. Нажать клавишу Enter. Вы увидите приветствие:

Monitor for JN5169
Author: re-engr.ru (Dec 26 2022)
Press key to read:
 'f' - flash (512KB)
 'w' - firmware
 'b' - bootloader
 'r' - RAM
 'e' - EEPROM
 'u' - user data
 'o' - OTP
 'n' - NIB
Input cmd for:
 '.e' - erase EEPROM
 '.p' - erase PDM
 '.r' - recovery FW

Команды f, w, b, r, e для передачи данных используют протокол XMODEM-CRC.

Команды чтения

  • 'f' - flash (512KB) - прочитать FLASH память по физическим адресам;
  • 'w' - firmware - прочитать прошивку устройства. Полученный файл имеет необходимый заголовок и может быть записан в другое устройство;
  • 'b' - bootloader - прочитать сегмент с прошивкой бутлоадера;
  • 'r' - RAM - прочитатать всю RAM;
  • 'e' - EEPROM - прочитать всю EEPROM (16320 байт);
  • 'u' - user data - прочитать данные из области User data;
  • 'o' - OTP - прочитать однократно программируемую область памяти;
  • 'n' - NIB - прочитать информацию о zigbee сети в которой находится устройство (PAN ID, Short Addr, MAC Coord, Key). Так же определяется версия SDK;

Команды исполнения

  • '.e' - erase EEPROM - физическая очистка памяти 16320 байт EEPROM (все байты 0x00);
  • '.p' - erase PDM - все блоки памяти (63 блока по 64 байта каждый = 4032 байта) , со своим ID, помечаются как очищенные. Структура "файловой системы" сохраняется;
  • '.r' - recovery FW - переключиться на прошивку устройства. Сектор памяти с монитором очищается.

XMODEM

Выберите память для чтения. Например EEPROM. Нажмите 'e'. Сообщение говорит об ожидании приемника:

e Receiver waiting (XMODEM-CRC)...

В TeraTerm перейдите: File > Transfer > XMODEM > Receive... Укажите имя файла. В поле "Option" выбрать CRC и галочку Binary. Нажмитре "Save", начнется прием данных и сохранения их в файл. Сообщение об успешной передаче данных:

Receiver waiting (XMODEM-CRC)... Done

Ошибки смотреть здесь;

Ошибки

Скрипт

  • " CS bad" - конрольная сумма ответа JN5169 не совпадает. Проверьте соединение и повторите попытку;
  • " Writable sector not found" - не удалось определить сектор доступный для записи программы Монитор. Свяжитесь с разработчиком;
  • " Flashing error" - JN5169 ответил ошибкой при записи программы. Проверьте соединение и повторите попытку;

Монитор

  • "PDM Initialization status: PDM_E_STATUS_INTERNAL_ERROR" - функция PDM_eInitialise(0) вернула ошибку. Что-то пошло не так;
  • "0xF000 record found. Length error: " - попытка определить версию SDK через размер структры с ID 0xF000 не удалась. Неизвестная длина;
  • "0xF000 record not found" - структуры с ID 0xF000 нет в памяти. Возможно EEPROM очищена;
  • "0xF100 record found. No network information" - устройство не содержит информации о ZigBee сети;
  • "0xF100 Data structure error" - структура с ID 0xF100 имеет неизвестный формат;
  • "Failure. Segment 0x12" - при стирании EEPROM произошла ошибка на блоке 0x12;
  • "Initialization PDM: PDM_E_STATUS_INTERNAL_ERROR" - при инициализации драйвера PDM произошла ошибка;
  • "Firmware recovery failed" - маловероятная ошибка при восстановлении рабочей прошивки устройства;
  • "No firmware for recovery" - не удалось обнаружить в памяти прошивку для восстановления. Возможны различные причины. Свяжитесь с разработчиком;

About

Read flash when CRP_LEVEL=1

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages