Модификация прошивки DIR-615K1
В моём распоряжении была прошивка версии 1.06. На более поздних прошивках не проверял.
Статья касается распаковки содержимого прошивки маршрутизатора DIR-615K1 c целью модификации её содержимого, дабы этот гнусный девайс стал более юзабельным В частности моей целью было помещение внутрь прошивки некоторого скрипта, выполняемого при включении маршрутизатора (при загрузки UNIX-подобной оси установленной в нём). Расчитанна она на пользователя знакомого с терминалом операционных систем Linux.
Для работы понадобится Linux. В моём распоряжении была Kubuntu 12.10.
Далее понадобится установить программу firmware_mod_kit (скрипт с командами).
Далее переходим в папку со скриптами программы:
cd firmware_mod_kit/firmware-mod-kit-read-only/
В ней находится скрипт распаковывающий прошивку. Вообще то их два. У меня заработал скрипт extract-ng.sh. Помещаем прошивку в папку со скриптом. Пусть файл прошивки называется firmware.bin Тогда для её распаковки выполняем команду:
sudo ./extract-ng.sh firmware.bin dir615k1/
Содержимое прошивки распакуется в папку dir615k1. А в папке dir615k1/rootfs будет распакованое содержимое файловой системы. Для изменения содержимого этой папки понадобятся права root.
Забегу вперёд. При обратной запаковке прошивки в случае если размер файловой системы будет превышать начальный, то скрипт-запаковщик прекратит свою работу, прошивка не запакуется. Поэтому необходимо освободить место в файловой системе. Например можно удалить содержимое папок flags, icons, notifiers, tabs_simple находящихся в rootfs/webs/www/image. Там находятся файлы изображений, которые не так уж важны для работы прошивки.
Далее переходим к папке rootfs/bin. В ней есть файл wps_monitor. О назначении файла думаю можно догадаться по его названию. На мой взгляд WPS это не самая необходимая в маршрутизаторе функция, поэтому принесу её в жертву своим целям. Переименовываем файл wps_monitor не важно как. Вместо него создаём символическую ссылку с таким же названием wps_monitor. Ссылка пусть указывает на файл /root/autorun.sh. Это и будет тот самый скрипт, выполняемый при старте маршрутизатора. Создаём этот файл в папке rootfs/root/. Не забываем в его свойствах разрешить выполнять этот скрипт как программу с правами root. Признаю что это решение не самое удачное. Для нормальной работы скрипта мне понадобилось внести задержку на выполнение написанных в нём команд. То есть в его начало добавить строки:
#! /bin/sh
sleep 20
С содержимым данного файла, то есть с выполняемыми им командами пусть каждый определяется самостоятельно. Можно запустить демон crond, можно применить свои правила к iptables, можно проверять наличие соединения с интернетом и переподключать его.
Для запаковки прошивки понадобится скрипт build-ng.sh. Его придётся немного подредактировать. Если это не сделать то маршрутизатор откажется работать с новой прошивкой. Находим в нём строки:
# Increasing the block size minimizes the resulting image size. Max block size of 1MB.
if [ "$NEXT_PARAM" == "-min" ]
then
BS="-b $((1024*1024))"
else
BS=""
fi
Этот участок скрипта приводит размер блока прошивки к 1 MB в случае если скрипт выполняется с параметром -min. Нам необходимо запаковать прошивку с размером блока 65536 байт. Поэтому заменяем 1024*1024 на 65536. С таким размером блока модифицированная прошивка будет работать. И далее будем выполнять этот скрипт с параметром -min. Сохраняем файл. Переходим в папку со скриптом:
cd firmware_mod_kit/firmware-mod-kit-read-only/
Запаковываем прошивку:
sudo ./build-ng.sh dir615k1/ -min
Теперь прошивка будет запакована с нужным размером блока и поместится в папку dir615k1.
Для автоматического запуска скрипта на странице Wi-Fi/WPS вэб интерфейса поставить галку на включение функции WPS. Далее сохранить изменения и перезагрузить маршрутизатор.