zImage ARM как распоковать
Есть zImage ARM Debian как его распаковать и посмотреть что в нем? или отредактировать ?
Сильно не пинайте гуглил говорят есть скрипт не нашел еще =(
Это бинраный исполняемый файл. Что именно Вы хотите там редактировать?
Есть планшет zt-180 у него был андройд
Нашел мануал где форматируют флешку на фат и ехт2 на фат закидывают zImage а на ехт2 дистрибутив дебиан + хфсе хочу теперь запихать это не на сд карту а во внутрь планшета у него есть 5 разделов загрузчик пока не нашел где лежит но есть раздел где ложит zImage андройдовский и он запускает его если его подменть на дебиановский то он запускает дебиан ТОКА ЕСЛИ СТОИТ СД КАРТА С разделом ехт2 если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует =(
Возможно я и не так формулирую в понятиях.
Я так понимаю что zImage просто запускает дебиан + хфсе ?
Вы бы не могли расставить знаки препинания во втором абзаце? Я не смог понять его смысл, извините.
если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует =(
_Как именно_ не стартует?
Нашел мануал, где форматируют флешку, на фат и ехт2. На фат закидывают zImage, а на ехт2 дистрибутив дебиан + хфсе. Хочу теперь запихать «это» не на СД карту, а во внутрь планшета(ROM), у него есть 5 разделов (/dev/mmcblk1p0, /dev/mmcblk1p1, . ) (system, data, kernel, cache, user). Cд карту определяет как /dev/mmcblk0p0 (фат) и /dev/mmcblk0p1 (ехт2).
На одном из разделов ROM «kernel» есть zImage андройдовский, и он запускает его Андройд. Если его заменить на дебиановский, то он запускает дебиан. ТОКА ЕСЛИ СТОИТ СД КАРТА С разделом ехт2.
Если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует (Зависает во время загрузки). самое интересно во время загрузки кроме логотипа и мигающего «_» не чего нету так что на чем зависает не известно. Наверно просто не находит дебиан + хфсе, а именно /dev/mmcblk0p1 (ехт2).
А разве zImage (3Mб) это не сжатое ядро?
Да, это сжатое ядро.
Если на планшете создать раздел и туда запихать дебиан + хфсе он все равно не стартует
А если Debian запускается, он видит внутреннюю память тоже как /dev/mmcblk1*?
кажется, нужная тебе программа называется bootimg
А если Debian запускается, он видит внутреннюю память тоже как /dev/mmcblk1*?
А зачем «дебиан + хфс» папка boot если уже есть ядро zImage?
/boot требуется по стандарту (man hier). Именно в него предлагается монтировать файловую систему, доступную загрузчику.
Вам, скорее всего, потребуется найти конфиг загрузчика и заставить его передать ядру правильный параметр root=/dev/mmcblk1pX или подгрузить initrd.
Возможно я и не так формулирую в понятиях.
В Андройд в загрузочную область пишут специально сформатированный образ, который состоит из zimage ядра, образа initrd и строки, которая передается в ядро. Вот эту строку и надо править. Там параметр root=/dev/.
Самое простое, залезть шестнадцатиричным редактором и злобно хаком поправить строку. А еще есть набор инструментов для распаковки и упаковки андройдного образа.
Выходит что zimage для дебиан люди так и сделали просто тупо сменили «Там параметр root=/dev/. » осталось проверить на практике
А еще есть набор инструментов для распаковки и упаковки андройдного образа.
А ссылку не дадите или название =)
Побывал unyaffs.exe и bootimg или что то не так или это не то
G:\Gpad.G10D\Soft.Ware\bootimg_2>bootimg.exe —unpack-bootimg kernel
arguments: [bootimg file]
>bootimg file: kernel >output: kernel[.gz] ramdisk[.gz] second[.gz] >Traceback (most recent call last): >File « », line 932, in >File « », line 716, in unpack_bootimg >File « », line 96, in parse_bootimg >AssertionError: invald bootimg
это же утилита для распаковки этого самого kernel куда его еще распаковывать?
Источник
Извлечь ядро из дампа памяти
Доброе время суток. Снял дамп памяти с одного устройства на базе arm-процессора (dd if=/dev/mem. ). Задача состоит в том чтобы извлечь ядро, initrd и загрузчик. А вопрос в том грузится ли ядро в память целиком? Соответственно можно ли вообще вырезать его из дампа. binwalk видит ядро но извлекает какие-то потоки. Заранее спасибо:) Лог от binwalk будет чуть позже)
Задача состоит в том чтобы извлечь ядро, initrd и загрузчик.
Эм. а не проще скопировать всё это с диска, с которого грузиться это устройство, вместо возни с дампом памяти?
К сожалению, не проще. После попыток дампить встроенную флеш устройство почило.))) Пока не разобрался как получить доступ к флеш, да и вряд ли уже получится. Мы имеем то, что имеем.
Да, «тся». А как дампил? Через dd? Может нужно было просто скопировать через cp -rp ?
через dd.Иначе никак ибо не смонтировано.
Устройство китайский тв-бокс с функцией secureboot. И шифрованой флешкой. Как получить доступ к флешке не понятно. Я видимо, нарушил её целостность. Тв-бокс в бутлупе. Больше доступа к нему не имею.(
Для кого? Нет там никакой файловой системы, чтобы вот так просто.
что для кого? В общем и целом образа ядра в памяти нет?
А вопрос в том грузится ли ядро в память целиком?
Хорошая новость — ядро грузится в память целиком, и оттуда не вытесняется. Плохая новость — часть кода выбрасывается, например код инициализации модулей. Код инициализации никогда больше не вызывается, поэтому нет смысла держать его в памяти. Так что получить дампом работоспособный образ, скорее всего, не получится.
а как бы помогло вам наличие файлов ядра оживить девайс то?
Отлично, ибо модулей небыло. Думаю можно извлечь. Вопрос в том как?
никак. Совсем. Я разве писал, что хочу его оживить?)) Не скрою такие мысли закрадывались. Думаю в этом мне может помочь загрузчик. Если он обращается к флешке за новой прошивкой — круто. Смогу залить прошивку если узнаю как назвать файл. Ядро нужно для эмуляции бокса.
настолько уникальный что «в интернетах» не то, что его «прошивок» (дампов) нет, но и нигде он не обсуждается?
попытались флешку прочитать и устройство «заблокировалось» (или что-то ещё/другое делали)?
настолько уникальный, что нету. Не шучу. Правда нету. Это всё детали. Нужна помощь в извлечении ядра из дампа.)
Попробуй посмотреть с адреса 0x80008000. Я бы ожидал его с этого адреса, сплошным куском.
Нашёл интересные строки в логе binwalk 33554468 0x2000024 Linux kernel ARM boot executable zImage (little-endian), load address: «0x00000000», end address: «0x00634390»
514166784 0x1EA59000 ELF, 32-bit LSB shared object, ARM, version 1 (SYSV) 514318336 0x1EA7E000 ELF, 32-bit LSB executable, ARM, version 1 (SYSV)
попробую. А как вообще найти начало и конец ядра? Может есть сигнатуры?
А, да. Ты ведь в курсе, что в /dev/mem память не обязательно сплошным куском идёт?
Если там был SecureBoot, то скорее всего, ядро было запаковано в Windows portable executable. Начинается с «MZ». Только вот непонятно, будет ли оно в памяти именно так же.
Ну. Нет. А где почитать? Кстати адреса 0x80008000 у меня нет. Дамп 512 мб.
Хм. А причём WPE и линух? o_O
Вот прямо тут: «Память не обязательно сплошная. У процессора и железок бывают регистры, отображаемые в память, поэтому память не обязательно отображается сплошным куском.» По факту, /dev/mem это разреженый псевдофайл, но пустые области не возвращают нули, как в нормальных файлах. Вместо этого функции чтения возвращают ошибки.
Нет, я не знаю как дампить. Думаю, подойдут SEEK_DATA и SEEK_HOLE в lseek(). Но вот какие готовые утилиты так могут, не знаю.
Ну так Microsoft же за Secure Boot стоит.
В продолжении темы. Кто знает как можно проанализировать дамп памяти? К сожалению binwalk толком ничего не нашёл(
По факту, /dev/mem это разреженый псевдофайл, но пустые области не возвращают нули, как в нормальных файлах. Вместо этого функции чтения возвращают ошибки.
Вот ТСу и хинт, в какую сторону копать. Но это долго, больно и скорее всего не принесёт результата.
Человек ответил в тред, не заметив, что ты интересуешься про embedded, и стал писать про диски, файлы.
На остальной вопрос тебе уже ответил i-rinat.
Ок. Может существует способ запустить виртуалку с образом памяти?
Так себе хинт. ТС уже сдампил память с помощью dd. Скорее всего, у него до того места, где ядро находится, dd и не добрался. Завершил работу на первой дыре в адресном пространстве.
Так как теперь устройство не работает, даже со детальными знаниями уже ничего сделать нельзя.
Может существует способ запустить виртуалку с образом памяти?
Может и существует, но вопрос не по адресу. Я вообще попал в этот тред случайно.
Думаю так и было. dd с ошибкой вылетел. Однако в дампе иногда встречается версия ядра в виде строки.
Вот инфа из лога загрузки:
The DDR Layout: Total DDR: 0x00000000 — 0x20000000 [ ] 512MB stack: 0x00000000 — 0x00a00000 [CB] 10MB malloc: 0x00a00000 — 0x00afe000 [CB] 1016KB global: 0x00afe000 — 0x00c00000 [CB] 1.0MB .text: 0x00c00000 — 0x00c1a9fc [CB] 106.49KB .data: 0x00c1a9fc — 0x00d81e40 [CB] 1.40MB pagetable: 0x00e00000 — 0x00e04000 [CB] 16KB irqstack: 0x00e04000 — 0x00e24000 [CB] 128KB DMA: 0x00f00000 — 0x01100000 [ ] 2MB free: 0x01100000 — 0x09100000 [ ] 128MB resmem: 0x1c000000 — 0x20000000 [ ] 64MB
Kernel Name: Linux-3.18.13_s40 Kernel Size: 6553099 Load Address: 0x02000000 Entry Address: 0x02000000
Скорее всего, у него до того места, где ядро находится, dd и не добрался.
Если ТС запускал с noerror , то может и добрался.
Так как теперь устройство не работает, даже со детальными знаниями уже ничего сделать нельзя.
Вот потому я и написал, что
скорее всего не принесёт результата.
Тогда можешь выбросить свой дамп.
И что, похожи эти 6553099 байт по смещению 0x02000000 на ядро?
Вроде похожи. Но gzip compressed data?! Походу поврежден дамп.Возможно озу скремблирована? Или это фантастика?
Никогда не задумывался, что означает z в zImage?
Задумывался. Но если бы был корректный образ он бы был сжат весь. А не так. Насколько я помню)
Не сами же по себе данные распаковываются. Что-то должно код распаковать. Для этого это что-то само по себе должно быть несжатым кодом.
Источник
Linux kernel arm boot executable zimage
Kernel Z-Image Unpack
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
unpack.sh — это простенький скрипт позволяющий работать с Linux Kernel zImage (ARM, Little Endian) от MTK (Mediatek). Предположим что вы вытащили из boot.img или recovery.img образ Linux Kernel’а. В общем случае он состоит из самого бинарника ядра пожатого gzip’ом, dtb, loader’а и возможно некоторой служебной информации.
Возможны несколько вариантов, например:
- По команде file recovery.img-kernel содержимое определяется как Linux kernel ARM boot executable zImage (little-endian).
- Содержимое определяется как gzip compressed data, max compression, from Unix.
В первом случае структура файла следующая, вначале идет код boot executable, затем GZip самого ядра, затем таблица смещений и затем DTB, начинающийся с сигнатуры DTB_MAGIC — D0 0D FE ED (0xEDFE0DD0). Что представляет из себя таблица смещений?
- DWORD (0x0)
- DWORD (0x0)
- DWORD (0x0)
- Указатель на DTB_MAGIC
- Указатель на таблицу смещений (т.е. на первый DWORD из данного списка)
- . (и т.п.)
Во втором случае структура проще, никаких boot executable нет, сразу идет GZip kernel’а, а затем DTB, начинающаяся с dtb-magic.
Скрипт корректно обрабатывает (по-крайней мере на тестовых примерах) оба варианта.
Запуск осуществляется следующим образом:
В результате работы скрипта будут сгенерированы три файла:
Источник
Linux kernel arm boot executable zimage
Этот материал не претендует на абсолютную истину, может быть, что-то можно сделать проще и быстрее. Автор как знает, так и делает. Кроме того он не является большим экспертом в области nix-систем. Всё, что написано ниже, найдено на просторах интернета, в большинстве своём на не русскоязычных форумах, систематизировано и изложено на родном для автора языке — русском.
Коллеги, не задавайте мне вопросы по данной теме в личку, уже несколько лет как я забросил Android и не интересуюсь развитием ядер, как впрочем и самого Android-a.
Сообщение отредактировал PaWill — 08.03.16, 14:54
Часть 1. Необходимые инструменты и исходники
Для компиляции ядра нам потребуется nix-подобная операционная система. Я использовал Ubuntu 10.04 LTS — Long-term support 32-bit, которую установил на виртуальную машину VMware Workstation. Где всё это добро скачать/купить, как установить мы здесь обсуждать не будем. Если вы это не смогли сделать самостоятельно или с помощью гугла, то читать эту статью для вас ещё рано (или уже поздно). 🙂
И так, у нас всё установлено и работает. Теперь проверим все ли необходимые компоненты присутствуют в системе, возможно какие то пакеты придётся доустановить.
Запускаем терминал: