Итак, работа по расшифровке прошивки завершена! Ключ будет в конце, но сначала - общий обзор.
Как известно, прошивка в Валкеровских изделиях меняется с помощью программы 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. Все дешифрование/шифрование делалось с помощью маленькой программки, правильный ключ уже встроен.