Прошивка расшифрована! (записей: 2)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 7 мес. назад

    Итак, работа по расшифровке прошивки завершена! Ключ будет в конце, но сначала - общий обзор.

    Как известно, прошивка в Валкеровских изделиях меняется с помощью программы SerialAngel. И исходно предполагалось что именно она занимается расшифровкой, поэтому первой под нож пошла она. Однако в ней не было обнаружено никакого шифрования - она просто сливает бинарник прошивки построчно (по 16 байт) в порт. 

    А это означает что расшифровкой занимается загрузчик - а значит и алгоритм должен быть очень простым, и ключ очень маленьким. Что дало надежду его просто подобрать.

    Для подбора помимо прошивки был взят Ардукоптер версии 3.1.5, превращенный в бинарный вид, и оба бинарника открыты в виде 16-чного дампа. 

    Ардукоптер

    и Валкера

    Что мы видим в самом начале файла - правильно, векторы прерываний, ибо структура определена. В валкеровской прошивке код команды от строки к строке не меняется - что означает что расшифровывается строка независимо от остальных. Это просто чудо какая удача! Предполагаем, что для шифрования используется любимый всеми XOR, пытаемся определить ключ. Значения для байт с командами у нас уже есть - а это уже половина ключа, осталось найти остальное. Ключ первой попытки берем как XOR между Валкеровской и Ардукоптеровской 5-ой строкой (с дреса 50), так как в ней все векторы совпадают.

     XOR-им прошивку по этому ключу и смотрим что у нас получилось. Но перед этим внимательно просматриваем Ардукоптер и изучаем что должно получиться: видны заметные массивы читаемого текста и нулей.

    Теперь ищем нечто похожее на текст в XOR-еной Валкеровской прошивке

    Не правда ли, похоже на текст  - нет старшего бита и буквы те самые.  А что это за регулярный паттерн - 00 00 52 0с ? Это случаем не нули между текстом? 

    Быстренько исправляем ключ, и проверяем: 

    Ну вроде похоже на правду - по крайней мере коптер после ручной правки прошивки и зашифровки обратно летает как ни в чем не бывало :)

    Теперь обращаем внимание - срока с адреса 1370 содержит нули, а значит в зашифрованой прошивке с этого адреса лежит собственно ключ шифрования: 

    00001370: 33 47 59 8B 13 64 87 95 56 2D BB 85 0C 5B 48 79

    Вуаля!

    Теперь руки развязаны полностью: можно прошить в коптер настоящий Ардукоптер без сноса загрузчика, зашифровав и скормив полученное SerialAngel, а затем вернуться на оригинальную прошивку.  Можно заменить загрузчик и залить расшифрованную Валкеровску прошивку через любой программатор. Ура товарищи!

    PS. Все дешифрование/шифрование делалось с помощью маленькой программки, правильный ключ уже встроен.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 7 мес. назад

    Как говорится, аппетит приходит во время еды :) Вот и я вошел во вкус, и научил мою маленькую программульку угадывать ключ шифрования валкеровского загрузчика просто анализом бинарника прошивки. По крайней мере на той прошивке что я пробовал ключ она угадывает верно. Пользуйтесь :)

     

← Форум группы   Все форумы К последней записи
Постов на странице:

Вы автоматически вступите в эту группу, когда ответите в теме.

Добавить ответ:

-
Рейтинг@Mail.ru