У этого роутера 8 Мбайт флеш‑памяти и 64 Мбайт — оперативной. Работает он на чипе MediaTek MT7620A. Этот камень основан на архитектуре MIPS и поддерживается ядром Linux. Загрузка стоковой прошивки происходит через U-Boot. Там есть встроенный TFTP-клиент для восстановления в случае, если залил неудачную прошивку. Главное — не убить бутлоадер, иначе придется паять.
На мой взгляд, отличная железка для экспериментов. Один из минусов — у DIR-806A в оригинальной комплектации нет USB. Однако трассировка USB присутствует на плате, так что при должном уровне знаний и сноровки порт можно распаять самостоятельно.
Мы же начнем с подключения к UART, так что не забудь запастись преобразователем уровней для UART. При подключении нужно не забыть «покрестить» RX и TX. То есть RX-линию подключаем к TX, а TX — к RX. Параметры соединения — 57600 8N1.
Итак, подключились к UART. Попробуем прошить пациента, одновременно поглядывая в консоль. Вдруг там есть какие‑то строки, которые помогут нам найти участки кода, отвечающие за процесс прошивки?
signallin(6) start... mtd: "Linux"libmtd (_mtd_write_ex): to "/dev/mtd6", size: 0x6c4764, offset: 0x0, buffer: 0x2afa6000
Удача! Роутер пишет в консоль сообщение о начале обновления и указывает раздел, на который льется прошивка. При реверсе будем искать строки, а по строкам — место в коде. Классика! Попробуем поискать строку start..
в прошивке:
# grep -nr "start..." /sbin/sbin/fw_updater:12411:(%d) start... mtd: "%s"
Мы нашли утилиту fw_updater
. Попробуем ее запустить:
fw_updater
(6) usage: fwupdater
Похоже, именно она накатывает новую прошивку в раздел Linux
.
info
Если бы никакого текста не было, пришлось бы реверсить саму веб‑морду. Там обязательно есть сообщения, коды ошибок и прочее, что потом можно поискать. Оттуда же можно выйти на утилиты прошивки. Либо наудачу поискать утилиты, в названиях которых будут слова fw
, firmware
, update
и всё в этом духе. Еще можно искать в прошивке строки CRC
, image
и прочее.
Теперь попробуем найти, откуда fw_updater
вызывается в прошивке:
grep -nr "fw_updater" /lib
/lib/libdhal.so:88250:/sbin/fw_updater
/lib/libdhal.so:88254:/tmp/fw_updater
Мы обнаружили, что fw_updater
используется в библиотеке libdhal.
. Это очень любопытно. Попробуем взглянуть, что у нее внутри. Для реверса будем использовать Ghidra. Она позволяет преобразовать бинарный исполняемый файл в код на С. Это очень удобно, и не придется копаться в ассемблерном листинге.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»