Когда завтрак уже давно... В смысле, когда распаковщик был уже написан, а упаковщик еще нет, стало возможным исследовать, что же за неонка унутре прошивки.
Пожалуй, по самим телефонам Cisco будет отдельная статья, а сейчас основные моменты по прошивке.
Структура основного пакета прошивки
Итак, вы держите в руках новенькую, еще в упаковке, прошивку, ну, скажем, cmterm-7941_7961-sip.8-3-1.zip.
После распаковки получается такой вдохновляющий список файлов:
- apps41.8-3-0-50.sbn
- cnu41.8-3-0-50.sbn
- cvm41sip.8-3-0-50.sbn
- dsp41.8-3-0-50.sbn
- jar41sip.8-3-0-50.sbn
- SIP41.8-3-1S.loads
- term41.default.loads
- term61.default.loads
Не знаю как у вас, а у меня вид этих названий вызывает желание немедленно открыть их в любимом текстовом редакторе Microsoft Word и дампить, дампить, дампить.
Далее я полагаю, что вы ознакомились с распаковщиком прошивок Cisco CNU и знаете, с какой стороны подходить к бабе. Я опишу первые результаты анализа компонентов прошивки в примерном порядке важности этих файлов для устройства. Моя классификация назначения этих компонентов может быть неверной, но на данный момент это не имеет значения.
Назначение файлов прошивки
term41.default.loads и term61.default.loads
Думаю, из названия понятно, что это файлы, указывающие телефонам соответствующих моделей, какие файлы грузить при загрузке прошивки с TFTP-сервера, так как прошивка одна для двух телефонов. Собственно, в тех прошивках, которые мне встречались, файлы все одинаковые для обеих моделей, так как телефоны отличаются цветностью экрана, количеством софт-кнопок, поддержкой POE или еще какой-нибудь непринципиальной ерундой. Файлы подписаны, как и все остальные, но по умолчанию можно в телефон загрузить и неподписанный файл.
cnu41.8-3-0-50.sbn
Это основная часть операционной системы телефона, так называемый CNU - Cisco Native Unix. Похоже, там ядро, загрузчик и несколько trc-файлов, похоже, для включения-выключения отладки или логгинга каких-то компонентов ОС. Именно с этим файлом в первой версии распаковщика были проблемы, так как он содержит выбивающийся из структуры архива файл без имени, который было непонятно как правильно распаковывать. Текущая версия распаковщика распаковывает такие файлы в .raw1, .raw2 и т. д. в основном каталоге распакованной прошивки, на случай если таких файлов будет несколько. Но пока такие прошивки мне не встречались, ну и вообще это было бы странно.
apps41.8-3-0-50
В этом файле лежат программы UNIX-окружения, работающего на телефоне, в виде набора файлов. Каким образом они распаковываются на mtd-устройства внутри телефона и каков формат ФС я еще не выяснял, для их распаковки и модификации это неважно. Для нас они обычные файлы с именем в виде полного пути от корня ФС телефона.
cvm41sip.8-3-0-50.sbn
Если кто еще не знает, пользовательское окружение этих телефонов построено на Java. Наверное поэтому они такие дорогие :) В этом компоненте, похоже, находится образ, который загружается специальной утилитой, находящейся в другом компоненте прошивки. Тоже интересный файл makahacvm.cnz, который на поверку оказывается обычным gzip-ом, упакованным из FAT на Windows, как сообщает утилита file. После распаковки получается не менее интересный файл с сигнатурой DEADBEEF 1.0 (0.1) default, в котором лежат всякие высокоуровневые функции телефона - загрузка и парсинг конфигов, ну и вообще все то, что мы называем Cisco 79xx. Я в Java не специалист, то ли это VM для встраиваемых устройств, то ли специальным образом скомпилированная программа, но есть еще один файл.
jar41sip.8-3-0-50.sbn
Это странный файл, тут лежит Makaha.jar, видимо, предназначенный для VM, но, по странной логике, здесь же лежат inetd.conf, модули ядра, init-скрипт, картинки, отображаемые телефоном при загрузке и разных операциях c прошивкой. Почему оно лежит здесь, а не в apps или еще где-то, я не знаю. Собственно, это самый интересный файл для тех, кто хочет получить рута на телефоне, потому что именно здесь лежит passwd ;) Еще там валяются файлы с разными параметрами для DSP.
dsp41.8-3-0-50.sbn
Тут, видимо, прошивка и лоадер для DSP, и trc-файл, аналогичный тем, что хранятся в файле с ядром.
