Reverse Engineering...
Mar. 20th, 2007 12:37 pmПо работе пришлось столкнуться с неким поделием китайского PC-прома. Суть проблемы в разбирательстве, как на этом поделии (один из вариантов ноутбуков) работает т.н. кнопка запуска медиа-центра - это то, что на лэйбе звучит как "просмотр DVD без запуска ОС Windows".
Надо сказать, что занятие было не для слабонервных и ещё пока не вышло на финишную прямую.
Товарищи с лэйбой в принципе даже правы оказались. Точнее в слове Windows, так как фирменная программа от InterVideo представляет собой ничто иное, как Linux + LinDVD с красивой обёрткой для загрузки.
При установке эта гадость ставится на NTFS из-под Windows, занимая каталог C:\InstantON + два файла в корне: kernel.pam и initrd.pam, содержащие текст с путями к соответствующим файлам и параметрами загрузки ядра.
Какой-то мудрённый BIOS умудряется грузить эти файлы с NTFS (по крайней мере записей в boot.init про неё ничего нет, может быть подменяется ntldr?). Подменить на что-то своё казалось бы очевидно, но не тут-то было.
Ядро подставляется любое другое без проблем, а вот с initrd полная засада.
Попытки подсунуть обычный initrd заканчиваются тем, что ядро не видит вообще файл, а при попытке подсунуть ivi-fs (так называется оригинальный initrd) не может его смонтировать.
Убитые пару дней показали интересные факты:
- initrd представляет собой ext2fs.gz
- оригинальный initrd в начале содержит набор логотипов длинной 1572880 байт
- и самое интересное - первые 29582 байта файла для "защиты от честных людей" засекречена таким образом: обменяны местами младшие и старшие полубайты каждого байта. Причём бит наличия комментария в заголовке gzip установлен в 1, а почти весь этот кусок (без нескольких байт в начале) представляет собой мусор, засунутый в поле комментария gzip.
Вот такое вот расследование.
Попытка подсунуть initrd с установленной на винчестере Linux пока не увенчалась успехом. Ядро уже видит и монтирует initrd, но не видит диска!
Честно говоря, пока творческий застой...
Надо сказать, что занятие было не для слабонервных и ещё пока не вышло на финишную прямую.
Товарищи с лэйбой в принципе даже правы оказались. Точнее в слове Windows, так как фирменная программа от InterVideo представляет собой ничто иное, как Linux + LinDVD с красивой обёрткой для загрузки.
При установке эта гадость ставится на NTFS из-под Windows, занимая каталог C:\InstantON + два файла в корне: kernel.pam и initrd.pam, содержащие текст с путями к соответствующим файлам и параметрами загрузки ядра.
Какой-то мудрённый BIOS умудряется грузить эти файлы с NTFS (по крайней мере записей в boot.init про неё ничего нет, может быть подменяется ntldr?). Подменить на что-то своё казалось бы очевидно, но не тут-то было.
Ядро подставляется любое другое без проблем, а вот с initrd полная засада.
Попытки подсунуть обычный initrd заканчиваются тем, что ядро не видит вообще файл, а при попытке подсунуть ivi-fs (так называется оригинальный initrd) не может его смонтировать.
Убитые пару дней показали интересные факты:
- initrd представляет собой ext2fs.gz
- оригинальный initrd в начале содержит набор логотипов длинной 1572880 байт
- и самое интересное - первые 29582 байта файла для "защиты от честных людей" засекречена таким образом: обменяны местами младшие и старшие полубайты каждого байта. Причём бит наличия комментария в заголовке gzip установлен в 1, а почти весь этот кусок (без нескольких байт в начале) представляет собой мусор, засунутый в поле комментария gzip.
Вот такое вот расследование.
Попытка подсунуть initrd с установленной на винчестере Linux пока не увенчалась успехом. Ядро уже видит и монтирует initrd, но не видит диска!
Честно говоря, пока творческий застой...
no subject
Date: 2007-03-20 06:26 pm (UTC)В данном случае надо подумать, как воссоздать образ ram-диска, чтобы он грузился нормально.