LINUX.ORG.RU

Как вычитать конфиг grub, зашитый в выполняемый файл?

 


0

1

Как известно, можно небольшую часть конфига встроить прямо в выполняемый файл. Думаю, что так и сделано. Как выяснить, что туда записали?

Он навязчиво пытается грузиться с одного избранного устройства, вместо того, чтобы загрузиться с моего.

UPD: записать, вроде, можно командой
grub-mkimage с опцией -c,

Вот тут вычисляется размер конфига:
https://git.savannah.gnu.org/cgit/grub.git/tree/util/mkimage.c#n951
Вот тут конфиг записывается с заголовком:
https://git.savannah.gnu.org/cgit/grub.git/tree/util/mkimage.c#n1097

Тут декомпрессор конкатенируется со сжатым архивом:
https://git.savannah.gnu.org/cgit/grub.git/tree/util/mkimage.c#n1189

Вычитать вроде бы при помощи bootinfoscript
https://lists.gnu.org/archive/html/help-grub/2016-05/msg00010.html
https://github.com/arvidjaar/bootinfoscript
но это неточно

Ещё одна попытка:
https://github.com/msuhanov/grub-unlzma

★★★

Последнее исправление: Shushundr (всего исправлений: 9)

Если это выполняемый elf файл, ты можешь попробовать что-то вроде readelf -x .rodata elf-file-here. Выдаст дамп данных.

PRN
()
Ответ на: комментарий от PRN

Там много вариантов:
case IMAGE_I386_PC_PXE
case IMAGE_I386_PC_ELTORITO
case IMAGE_EFI
case IMAGE_QEMU
case IMAGE_COREBOOT
и другие…

Я не уверен, что все из них ELF (точнее, уверен, что наоборот).

Shushundr ★★★
() автор топика

Как известно, можно небольшую часть конфига встроить прямо в выполняемый файл

Вспомнился пример из личного опыта - grub.exe из архива grub4dos*.7z не хотел работать с iso в вирте. Оказалось, было вшито --ignore-cd в строке find --set-root --ignore-floppies, отредактировал через онлайн-редактор hex (hexed.it).

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 2)
bootx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows, 4 sections

# objdump -h  bootx64.efi

bootx64.efi:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         0000c000  0000000000001000  0000000000001000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00010000  000000000000d000  000000000000d000  0000d000  2**4
                  CONTENTS, ALLOC, LOAD, DATA
  2 mods          00014000  000000000001d000  000000000001d000  0001d000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .reloc        00001000  0000000000031000  0000000000031000  00031000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA

# objdump -s --section=.reloc bootx64.efi

0x1000 = 4096 0xd000 = 53248 0x10000 = 65535 0x31000 = 200704

Дальше как-то не идёт…

/efi/boot # ./grub-guess bootx64.efi 
Nothing was found in "bootx64.efi"!
# dd if=bootx64.efi bs=1 skip=200704 count=4096 of=reloc.bin
...
# ./grub-guess reloc.bin
Nothing was found in "reloc.bin"!
# dd if=bootx64.efi bs=1 skip=53248 count=65536 of=data.bin
...
# ./grub-guess data.bin
Nothing was found in "data.bin"!
# dd if=bootx64.efi bs=1 skip=4096 count=49152 of=text.bin
...
# ./grub-guess text.bin
Nothing was found in "text.bin"!

Другой упаковщик оказался:

# ./grub-guess --lzma2 ./bootx64.efi >core-image.elf
Found a compressed core image in "./bootx64.efi" at offset 8612 bytes.
# file core-image.elf
core-image.elf: data
# xz -d core-image.elf
xz: core-image.elf: File format not recognized

Дальше непонятно что делать.

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 4)
Ответ на: комментарий от Shushundr

Так это elf. Его можно распаковать 7z x bootx64.efi, как правильно собрать назад я не знаю)

PRN
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.