Что такое инженерное меню и зачем оно нужно? Позволю себе процитировать из wiki:
Недокументи́рованные возмо́жности (англ. undocumented features), НДВ — возможности технических устройств и/или программного обеспечения, не отраженные в документации. Чаще всего недокументированные возможности сознательно закладываются разработчиками в целях тестирования, дальнейшего расширения функциональности. Недокументированные возможности обнаруживаются, обычно, в процессе обратной разработки, но могут быть обнаружены и случайно.
Далее в статье, описание моей попытки подобрать коды к инженерному меню радиостанции.
Введение
Приобрел я однажды радиостанцию KYD-IP620 китайского производства, но под отечественным «брендом». Рекламировать бренд не буду, гугл подскажет. Покрутил в руках, поиграл и забросил. Но недавно наткнулся на нее снова и решил уделить побольше внимания этому чуду техники. Скупое меню на настройки, вынудило меня поискать ПО для работы с этой станцией. Мне казалось, что софт даст больше настроек, чем доступно через меню.
Зайдя на сайт производителя нашел свою модель радиостанции, но софт не обнаружил. Написал письмо в техподдержку, ответили быстро и прислали ПО. Установил, запустил и первое, что бросилось в глаза, это большее количество поддерживаемых диапазонов. Они меня и подтолкнули на поиски возможности записать требуемую мне частоту (в разумных пределах от текущего диапазона). Но тут меня ждал облом.
Официальный софт перед записью проверял введенную частоту на попадание в выбранный диапазон и запрещал запись вне диапазона. Ладно, запустил сниффер, разобрался с протоколом записи-чтения, набросал на коленке Delphi свою утилиту. Но тут появилась другая бяка. Записать частоту, которую хотел, у меня получилось, но радиостанция на ней тупо молчала. Прием или передача-тишина. Видимо, проверка имеется еще и в МК станции.
Разобрал станцию. На плате нашлась кроме всего прочего 24C64. Это микросхема i2c EEPROM. Ее выпаял, снял дамп, запаял обратно. В дампе не нашлось ничего кроме моих настроек и мною записанных частот. Прицепил сниффер i2c к памяти, гонял запись/чтение официальным софтом, своей утилитой, ничего. Все, что бегало по i2c шине, было в EEPROM, ничего лишнего не читалось и не писалось. Все данные в EEPROM только те, что я записал. Позже уже я доработал протокол записи/чтения и смог читать/писать по всем адресам памяти.
О чем это все?
Предвидя вопрос «зачем мне все это нужно, про что я тут пишу?» попробую описать свою мысль. Гугл дал несколько схем предыдущих и следующих моделей радиостанции. Принципиальную схему своей подопытной, которую описываю в статье, я не нашел, но она на 70% совпадает с ними (выяснил, пока вызванивал нужные ноги). По схеме различия не существенны. Отсюда напрашивается вывод, что для удешевления продукции заказчику, производитель, особенно Китай (с его массовым производством) не будет снова проектировать глобально схемы, писать софт под МК радиостанции и т.д. Зачем когда уже есть готовое, которое нужно немного скорректировать — и отдать. ИМХО легче всего скорректировать программно, причем без применения программатора. Это позволит сделать большую кучу заготовок, которые потом доведут под требования заказчика наименьшими усилиями. После этой мысли я начал искать вход в инженерное меню, и нашел. Сложного ничего не было: требовалось зажать 2-е кнопки и включить радиостанцию.
Вот оно!
Перед входом в меню пишется надпись «SET».
Для дальнейшего доступа к функциям требуется пароль из 6-ти цифр. Перебор вручную утомителен и отпадает. В случае неверного пароля выводится опять надпись «SET». Гугл дал один пароль, который ведет к сбросу на заводские настройки. При его вводе надпись меняется на «ERASE». Вот он-то мне потом при отладке и пригодился. Появилась мысль организовать перебор на МК. Пусть потихоньку крутит себе пароли, а я буду своими делами заниматься.
Приступим
Для ввода пароля на радиостанции имеется: кнопочная клавиатура и энкодер.
Отображение введенных данных: LCD экран. Прикручивать камеру ко всему этому делу и анализировать снимки или видео с нее, мне не хотелось. У нас есть экран, будем использовать его. Изучив чуть подробней внутренности станции, обнаружил, что за LCD дисплей отвечает драйвер HT1621B. Погуглив даташит на драйвер и его распиновку, выяснил необходимые мне пины. Это CS, WR и DATA. Кратко CS – начало передачи, WR-«синхронизация», DATA- данные.Пробуем с этим взлететь. Вызваниваем и подпаиваемся на выводы МК станции, ведущие к ножкам драйвера LCD экрана.
Подключаем логический анализатор и смотрим передаваемые данные на драйвер для надписи «SET» и для надписи «ERASE». Понятно, что данные разные, они нам и понадобятся. Далее подпаиваемся к «органам» ввода. Нам нужно 2-е кнопки с клавиатуры (MENU и F), и энкодер. Ардуины у меня нет, буду делать на том что под рукой. Под рукой оказалась Pinboard с AtMega16, от камрада DiHalt.
Техническое задание
Пишем эмулятор энкодера и эмулятор нажатия кнопок «MENU» и «F» (они нужны для ввода и подтверждения пароля). Анализируем данные, которые отобразились на LCD экране. Считывать данные драйвера LCD будем через прерывания AtMega16. При различных данных драйвера от «эталона» («SET») будем выводить по UART на текущий пароль.В формат данных для драйвера можно не углубляться. Нам нужно отличить, когда не высветилась надпись «SET» после нажатия кнопки «MENU» и когда она светится. Логично, что данные будут разные. Поэтому я буду сравнивать строку полученных байт после последней введенной цифры пароля и нажатия кнопки «MENU». Отловив несколько посылок драйвера LCD для надписи «SET», убедился что они одинаковы, взял эту посылку за эталон. Сравнивая с ней, я откидываю те, которые совпадают, другие передаю в UART, для дальнейшего анализа. Данный алгоритм я проверил с паролем, который ведет к сбросу на заводские настройки, он оправдал мои надежды. Вообще алгоритм ввода пароля выглядит так: горит надпись «SET», приглашение в инженерное меню. Нажимаем кнопку «MENU» и вводим 1-й символ пароля. Далее опять нажимаем кнопку «MENU» для ввода следующего символа. Так повторяем до последнего символа. Когда введен последний символ, нажимаем опять кнопку «MENU». И вот тут или загорится надпись «SET» или что-то другое. Если светится «SET» топаем в начало проведя итерацию пароля, если другое, передаем пароль по UART для анализа. Скрин программы для управления перебором.
Реальность
Реальность такова, что я рассчитывал на большую скорость перебора, но жизнь внесла коррективы. В радиостанции МК обрабатывает энкодер и нажатия клавиш так, как и полагается, с «анти-дребезгом» контактов, с задержками реакции пользователя. Потому в код брутфорса внесены задержки. Да он весь построен на задержках. Набросал утилиту для управления перебором. В случае считывания данных драйвера, отличных от «эталона», в утилиту на компьютер по UART передается пароль при котором это возникло.
Итог
Перебор запустил, и тикает. На данный момент ничего еще не сбрутил. Но я не сдаюсь. Буду терпеливо ждать окончания. Понятно, что с таким подходом могут быть «ложные» срабатывания. Но на общем фоне будущего количества перебранных паролей — это капля в море. Эти «ложные» пароли в дальнейшем можно быстро перепроверить через утилиту. По окончанию перебора обязательно сообщу, чем весь этот брутфорс закончился и что в итоге получилось.
Исходники утилиты, прошивка AtMega16 доступны на гитхабе.
Автор: Lepik_stv