Сейчас на форуме: -Sanchez- (+8 невидимых) |
eXeL@B —› Основной форум —› Модификация прошивки OpenWRT |
Посл.ответ | Сообщение |
|
Создано: 05 января 2018 06:22 · Поправил: murder · Личное сообщение · #1 Имеется Кроме того нужно поменять версию ПО, производителя и модель устройства - расположены в самом начале файла. После редактирования файл не проходит проверку. Тут назревает самый главный вопрос: по каким смещениям хранятся контрольные суммы и как их считать? |
|
Создано: 05 января 2018 06:49 · Личное сообщение · #2 http://192.168.1.1/ Справа сверху кликнуть Administration Network->Interfaces->Wlan wan->кнопка edit В поле -- Additional Field -- выбрать MAC-Address Кнопка [Add] | Сообщение посчитали полезным: Gideon Vi |
|
Создано: 05 января 2018 08:55 · Личное сообщение · #3 |
|
Создано: 05 января 2018 09:07 · Личное сообщение · #4 |
|
Создано: 05 января 2018 09:15 · Поправил: murder · Личное сообщение · #5 Так мне в стоковой надо поправить. Стоковая это и есть OpenWRT, только допиленная производителем. Когда через telnet на неё заходишь - видно приветствие OpenWRT. Добавлено спустя 2 минуты Вот сам девайс - ZISA op151S Добавлено спустя 45 минут Вывод binwalk Code:
В первом килобайте тоже есть контрольная сумма и данные, которые нужно отредактировать, но binwalk их не распознал. |
|
Создано: 05 января 2018 10:34 · Поправил: carver · Личное сообщение · #6 |
|
Создано: 05 января 2018 10:42 · Личное сообщение · #7 |
|
Создано: 05 января 2018 10:42 · Личное сообщение · #8 С микротиком работает. Задёшево не видел. Пытаюсь повторить опыт Добавлено спустя 1 час 20 минут Продублировал на наге и на форуме OpenWRT. |
|
Создано: 05 января 2018 14:16 · Личное сообщение · #9 а что испанцы, морозятся ? просто попроси пересобрать тебе прошивку. обычно не отказывают же, и для них это проще, чем писать мануал. если самому пересобирать, то кроме опенврт, нужно вникать в формат от ZISA, хотя там вроде и не сложно, но если не разберешся, и никто не поскажет, предложи на каком-то frelancer.com. по идее, работа будет дешевлее чем этот SFP. |
|
Создано: 05 января 2018 21:09 · Личное сообщение · #10 carver пишет: а задешево бывает, или как на амазоне, 109 баксов + ship ? например https://www.olx.ua/obyavlenie/prodam-moduli-gpon-olt-c-huawei-i-zte-IDw4dro.html | Сообщение посчитали полезным: carver |
|
Создано: 11 января 2018 13:49 · Личное сообщение · #11 На наге подсказали, что контрольная сумма подсчитывается где-то в недрах /usr/local/bin/web. На js подсчёт вызывается строчкой. Code:
Скачал IDA, открыл файл, поиском нашёл строку "cgi/get_imgcrc", точнее там таблица указателей на строки с разными cgi. Как теперь найти в каком месте кода идёт обращение к этой строке (Xrefs graph from ничего не даёт)? Испанцы не отвечают. 8a67_11.01.2018_EXELAB.rU.tgz - web |
|
Создано: 11 января 2018 19:05 · Поправил: LinXP · Личное сообщение · #12 попробуй забить на проверку... function verifyImageResult(s) { ret = evalJSON(s); if (ret == 1) { burnImage(); } else { burnImage(); } } https://d.radikal.ru/d23/1801/0d/d5db06034eff.png похоже | Сообщение посчитали полезным: murder |
|
Создано: 12 января 2018 05:48 · Личное сообщение · #13 LinXP Отключать проверку не буду, чтобы не получить кирпич. За наводку на 00403DB0h спасибо - буду изучать. Кстати как ты вышел на этот код? Добавлено спустя 53 минуты Как нашёл код я понял - там массив структур в котором хранятся указатели на строки cgi и указатели на функции. Добавлено спустя 2 часа 4 минуты Потихоньку въезжаю в MIPS-ассемблер branch delay slot выглядит непривычно... Похоже эта функция ничего толком не делает - она тупо выводит переменную g_CGIVerifyImageResult через printf. А так как g_CGIVerifyImageResult экспортируемая переменная, то она ведь может изменяться из другого процесса, я правильно понимаю? Нашёл место, где обрабатывается массив строк - https://a.radikal.ru/a07/1801/f5/d2e34e3b034a.png | Сообщение посчитали полезным: Rio |
|
Создано: 15 января 2018 22:42 · Личное сообщение · #14 |
|
Создано: 16 января 2018 06:52 · Поправил: murder · Личное сообщение · #15 Похоже проверка проходит при загрузке файла (cgi/upload_image). Вышел на библиотеку "\usr\local\lib\libinfra.so", функция VOS_ImageVerify, которая в свою очередь обращается к функции UTIL_Crc32. Будем искать... Добавлено спустя 4 часа 5 минут Кто-нибудь пробовал отлаживать через quemu? https://www.exploit-db.com/docs/english/36806-developing-mips-exploits-to-hack-routers.pdf Может закинуть этот веб-сервер в debian и запустить для удалённой отладки? А то так в иде сложновато понять как там всё работает - там ещё и crc рассчитывается двумя разными алгоритмами. Добавлено спустя 6 часов 35 минут А вот |
|
Создано: 20 января 2018 06:40 · Личное сообщение · #16 Зря потратил время на запуск в Debian через QEMU - ничего не получилось, выдаёт input/output error. Выяснил, что контрольная сумма CRC32 для всего файла расположена по смещению 0x68, перед расчётом контрольной суммы эти 4 байта обнуляются. Интересная особенность: перед рассчётом CRC32 рассчитываются 2 16-битные контрольные суммы, но они не совпадают и выдаётся warning "WARNING: %s: vos_chkZteImgCrc() failed". Казалось бы при чём тут |
|
Создано: 24 января 2018 15:18 · Личное сообщение · #17 |
|
Создано: 25 января 2018 09:36 · Поправил: murder · Личное сообщение · #18 Изменение заголовка ничего не даёт - нужно менять файлы в squashfs. Я не знаю чем паковать обратно - в исходной прошивке есть расхождения с файлами, которые создаёт mksquashfs. Отличается поле comp_opts (идёт сразу после заголовка squashfs), оно больше на 4 байта и вообще не соответствует исходникам mksquashfs. Подробности моих изысканий Добавлено спустя 8 минут Ну ещё выяснилось, что оригинальное название модуля TW2362H-CDEL, на официальном сайте T&W такого нет, но есть |
|
Создано: 25 января 2018 15:31 · Личное сообщение · #19 |
|
Создано: 25 января 2018 16:08 · Личное сообщение · #20 |
|
Создано: 25 января 2018 21:50 · Поправил: sefkrd · Личное сообщение · #21 Попробуй проверить: Поменял только MAC адрес.. Пройдет проверку.. Еще был такой выхлоп: Code:
|
|
Создано: 26 января 2018 13:41 · Личное сообщение · #22 sefkrd Посмотри: по смещению 140260h в оригинальном файле видим 0С 80, а в твоём 08 80. Первый байт - это размер структуры comp_opts, в исходниках squashfs она определена как 8 байтовая, но в оригинальном файле там 12 непонятных байт. Думаю они там не спроста и если просто запаковать squashfs и прошить, то получим кирпич, который непонятно как потом восстанавливать. По |
|
Создано: 26 января 2018 14:32 · Поправил: sefkrd · Личное сообщение · #23 murder пишет: изменить в исходниках mksquashfs структуру comp_opts, чтобы она была размером в 12 байт (уже сделано) Собрал его, пробовал? По смещению 140260h в собранном файле есть 0С 80 ? Разобрав это(флаг -stat): Code:
Думаю можно будет найти инфу о компрессии.. |
|
Создано: 26 января 2018 16:19 · Личное сообщение · #24 В исходниках squashfs смотреть бесполезно, т.к. опции компрессора в файле нестандартные, распаковку делает liblzma. Инфу о компрессии можно получить только из LZMA2-блока. В В принципе если бы я точно знал размер словаря и порядок фильтров я бы рискнул перепрошить. |
|
Создано: 26 января 2018 16:44 · Поправил: sefkrd · Личное сообщение · #25 murder пишет: В принципе если бы я точно знал размер словаря Code:
Это размер моего словаря.. Он равен Code:
Посмотрел бинари по маске: 262144 (little endian), нашел по три совпадения.. Могу предположить, что у них словарь == блоку.. Code:
|
|
Создано: 27 января 2018 06:07 · Личное сообщение · #26 В Добавлено спустя 21 минуту Не получается собрать - процесс останавливается на этом Code:
Добавлено спустя 32 минуты Скачал lzmainfo.exe, при попытке подсунуть xz-поток выдаёт "Not a .lzma file". Теперь нужно как-то выдрать lzma-поток из xz. |
|
Создано: 27 января 2018 15:47 · Личное сообщение · #27 |
|
Создано: 28 января 2018 05:42 · Поправил: murder · Личное сообщение · #28 Кажется я начинаю сильно тупить: взял xz-поток, убрал stream-header и block-header и подаю то, что получилось на вход lzmainfo.exe. В ответ получаю "File is too small to be a .lzma file". Запускаю отладчик - fread пытается считать 13 байт с начала файла, но возвращает 4 и, конечно, выходит ошибка. Я в ступоре, размер подаваемого файла 1344 байта. Добавлено спустя 9 минут Короче втупую в отладчике запихал в буфер 13 байт из файла, изменил eax на 13 и получил "Not a .lzma file". Добавлено спустя 15 минут Понял - lzmainfo не декодирует фильтры и работает только для LZMA1 Code:
Добавлено спустя 4 часа 53 минуты Вот написал простенькую прогу - она берёт первый блок из xz-потока и выдаёт фильтры и размер словаря для этого блока. Для проверки взял кусок первого xz-потока из оригинала и из перепакованного файла и скормил программе. Вероятнее всего в оригинале используется простой LZMA2 и размер словаря 256Kb. Но это не точно, т.к. mksquashfs перебирает все фильтры из командной строки и подставляет лучший для каждого блока. Если фильтр не даёт улучшения сжатия, то он не будет использоваться. 5478_28.01.2018_EXELAB.rU.tgz - xzinfo.7z Добавлено спустя 10 часов 24 минуты Хорошая новость - в SFP модуле 2 имейджа, так что можно лить туда всякое говно без риска. 1) Отредактировал файлы: version, show_version, eeprom_a0_info, /etc/config/network. 2) Пропатчил mksquashfs - там увеличил размер структуры comp_opts до 12 байт и закомментировал строки Code:
В файле xz_wrapper.c, чтобы опции записывались даже тогда, когда размер словаря равен размеру блока. 3) Запаковал Code:
В оригинале файл выровнен по границе 256Кб причём в заголовке суперблока эти байты тоже учитываются да и выровнено символами 0xFF. Я не стал заморачиваться с выравниванием - оставил как есть (-nopad). 4) В hex-редакторе вставил полученный файл в прошивку, скопировал структуру comp_opts из оригинала, пересчитал CRC32 по смещению 0x68. 5) Шил через telnet имейдж b, затем активировал его Code:
6) После ребута проверяю - имейдж b не валидный Code:
sefkrd Твою прошивку тоже пробовал - она даже верификацию не проходит. Добавлено спустя 10 часов 32 минуты Думаю размер должен быть таким же как в оригинале байт в байт. По крайней мере у Valero&Torres это так. У меня же получается файл большего размера. |
|
Создано: 29 января 2018 01:22 · Личное сообщение · #29 |
|
Создано: 29 января 2018 06:19 · Поправил: murder · Личное сообщение · #30 Не знаю, что изменилось, но сегодня линк поднялся. IP-адрес от провайдера получил без указания vlan, что странно, т.к. интернет там на vlan40. Пока всё работает как надо и перепрошивка отменяется. Не знаю надолго ли. А как сквош в прошивку лил, dd? Не - я к Windows привык, использую Добавлено спустя 10 минут Кстати сегодня уже успел попробовать удалить пару "лишних" файлов - /www/register_banner.gif и /www/register_content.gif. После этого сквош получился приемлемого размера. Паковал без nopad. Затем выровнял по границе 256K символами 0xFF и заменил выравнивающие нули. Насчёт того, что в заголовке суперблока указывается размер с выравниванием я ошибся, так что оставил как есть. Однако после прошивки не взлетело. |
eXeL@B —› Основной форум —› Модификация прошивки OpenWRT |