Попытка компиляции неудачна…
Мой роутер - NetGear WNR512v3, дешевая модель начала 2010-х годов; я беспокоился о его безопасности в течение 5 лет, пока в 2022 году у меня не появилось время и опыт, чтобы взломать его.
Я начал с исследований и нашел на GitHub репозитории с прошивкой и приложенным README-файлом, который объясняет, как подключиться к роутеру. План был прост:
Но что если возникнет… Препятствие
Это было легко. Просто telnet 192.168.1.1 с вводом имени пользователя и пароля, которые используют одно и то же слово “root”. После проверки всех директорий я нашел очень интересную вещь - мой роутер использует UClibC в качестве стандартной системной библиотеки языка C. Это и многие другие вещи усложнили поиск информации и компиляторов, а архитектура MIPS тоже не помогла.
К счастью, в версии роутера есть утилита tftp из Busybox, что делает процесс простым. Чтобы передавать данные с моего ПК и на роутер, мне просто нужен работающий на ПК сервер tftp.
Я очень старался и нашел на GitHub репозитории с MIPS бинарными файлами. Результат запуска этих файлов сводится к одному - segmentation fault или SIGSEGV (коротко, ошибка сегментации), что означает, что они пытались получить доступ к памяти, которая им не принадлежала.
<> Я нашел список компиляторов, собранных для Linux и Windows. Сначала я попробовал компилятор Green Hills MIPS, потратив 12 минут на распаковку 3ГБ архива, а затем на компиляцию простой программы. Я понял - он не работает для MIPS v1 (программа падает с ошибкой недопустимой инструкции). Затем я попробовал старый компилятор Phillips, он тоже не сработал. Ни один из компиляторов из этого списка не работает.
Я поискал на сайте UClibC и нашел… Полностью рабочий компилятор MIPS v1 UClibC! Я подумал “Наконец-то!”, но затем возникла ошибка сегментации при запуске скомпилированного Lua. Я был так измотан и выгорел к концу, что не смог закончить свой план.
Я потратил больше 14 дней на поиск рабочего компилятора… Мой роутер не позволяет получить внешний доступ к панели администратора, а мой провайдер не перенаправляет порты telnet протокола.