Извлечь прошивку из незнакомого устройства обычно проще всего «в лоб» — выпаять микросхему флеш-памяти и вставить её в программатор. Но если попытка всего одна, а рисковать работоспособностью устройства нельзя, физическое удаление чипа выглядит куда менее заманчиво. Чтение микросхемы прямо в схеме (in-circuit) в описанном случае закономерно провалилось — как это часто и бывает. Что же остаётся в такой ситуации?
Здесь на помощь приходит подход инженера по обратной разработке Мэтью Альта, известного под ником wrongbaud: следующим инструментом в руках оказывается не программатор, а логический анализатор. В своём разборе он показывает, как определить, захватить и в итоге декодировать операции чтения по шине SPI, с помощью которых прошивка загружается из распространённой флеш-памяти серии W25Q при старте устройства. Метод не идеален: перехватить удастся лишь то, что реально считывает центральный процессор, а не обязательно всё содержимое чипа. Но для реверс-инжиниринга «вслепую» это большой шаг вперёд.
Как устроен обмен по шине SPI
Прежде чем переходить к декодированию, автор подробно разбирает основы обмена данными по SPI. SPI (Serial Peripheral Interface) — это простой последовательный интерфейс, по которому микроконтроллер общается с периферией: у него есть линия тактового сигнала, отдельные линии для передачи и приёма данных и линия выбора микросхемы. Имея на руках вывод логического анализатора и даташит (техническое описание) флеш-чипа, можно шаг за шагом научиться читать и интерпретировать отдельные сигналы.
Даже если перспектива «вытаскивать» прошивку из загадочных коробочек вас не увлекает, материал остаётся отличным введением в устройство SPI и будет любопытен всем, кто хочет лучше понять, как микросхемы «разговаривают» друг с другом.
Декодирование данных в Scapy
Собрав данные, летящие по шине, автор переходит к их декодированию с помощью Scapy. Этот мощный инструмент на Python чаще всего ассоциируется с манипуляциями над сетевыми пакетами, но, как показывает пример, его можно натравить и на другие типы данных. Немного доработав скрипт, файлы захвата удаётся превратить в образ прошивки, готовый к загрузке в binwalk — популярную утилиту для анализа и извлечения содержимого прошивок.
Но на этом история не заканчивается. В полученном образе обнаружилась странность: в нём есть загрузчик и ядро Linux, но на месте файловой системы зияет большой пробел. Оказалось, что перед её загрузкой процессор переключается на более быстрый режим Quad-SPI, где к обмену добавляются ещё две линии данных. Это означает новый сеанс захвата, дополнительную обработку и однострочную команду dd, которой два образа склеиваются в один. В итоге автор доводит дело до конца.
Почему на это стоит взглянуть
Если вы впервые сталкиваетесь с работами wrongbaud, вас ждёт немало интересного. От общей «дорожной карты» по аппаратному хакингу до глубоких погружений в отдельные техники вроде инъекции сбоев (fault injection) — он создаёт материалы, которые почти наверняка научат вас чему-то новому.











