Forum: PC Hard- und Software Kernelimage untersuchen/extrahieren


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Dergute W. (derguteweka)


Lesenswert?

Moin,

In einem Linuxkernel kann ja allerhand an "Zusatzdaten" stecken, z.b. 
die eigene .config, Kernelheaderfiles, Firmwareblobs, initramfs, etc. 
bla.
Was fuer tools gibt's denn, um aus so einem Kernelimage (also dem 
bzImage) diese Zusatzdaten zu extrahieren, ohne z.b. den Kernel zu 
booten?

Gruss
WK

von Steve van de Grens (roehrmond)


Lesenswert?

Was möchtest du konkret machen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Steve van de Grens schrieb:
> Was möchtest du konkret machen?

In Kernelimages gucken und sehen koennen, was drinnen ist.

Gruss
WK

von Norbert (der_norbert)


Lesenswert?

Dergute W. schrieb:
> In einem Linuxkernel kann ja allerhand an "Zusatzdaten" stecken, z.b.
> die eigene .config, Kernelheaderfiles, Firmwareblobs, initramfs, etc.
> bla.

Hier hat das Eine nichts mit dem Anderen zu tun.
Ein Kernel ist ein Kernel.
Headerfiles sind Headerfiles.
Ein initramfs ist noch einmal etwas völlig Anderes.

von Dergute W. (derguteweka)


Lesenswert?

Norbert schrieb:
> Hier hat das Eine nichts mit dem Anderen zu tun.
> Ein Kernel ist ein Kernel.
> Headerfiles sind Headerfiles.
> Ein initramfs ist noch einmal etwas völlig Anderes.

Klar sind das alles unterschiedliche Dinge. Sind aber letztendlich alles 
irgendwelche (komprimierten) Haufen/Archive mit Daten.
Und das hat insofern miteinander zu tun, als das ich das alles in ein 
Kernelimage reinmanschen kann. Und wenn ich's schon reinmanschen kann, 
waer's schick, es auch aus fertigen Kernelimages wieder rausmanschen zu 
koennen. Der Kernel selbst kanns ja auch.

Gruss
WK

von Hmmm (hmmm)


Lesenswert?


von Thomas F. (tommf)


Lesenswert?

Du kannst mit
1
file $dateiname
 schauen, was das für eine Datei ist. Dann ist auch relativ klar, wie 
weiter zu verfahren ist.

Bei "bzImage" würde ich bunzip bzw. bunzip2 als Entpacker vermuten.

von Steve van de Grens (roehrmond)


Lesenswert?

Dergute W. schrieb:
> In Kernelimages gucken und sehen koennen, was drinnen ist.

Dort wirst du nur ausführbaren Maschinencode finden, nichts was man ohne 
den Quelltext irgendwie lesen könnte.

Dergute W. schrieb:
> Sind aber letztendlich alles
> irgendwelche (komprimierten) Haufen/Archive mit Daten.

Nein. Der Kernel ist ein komprimiertes Binary. In dem "Archiv" befindet 
sich nur eine einzige Datei. Nackter Maschinencode, der am Stück in den 
Speicher geladen und ausgeführt wird.

Die initial Ramdisk ist was anderes, das ist ein komplettes Filesystem, 
in das man rein gucken kann.

https://www.kernel.org/doc/html/v5.0/admin-guide/initrd.html

Auf der Seite findest du sicher auch Antworten auf viele weitere Fragen 
zum Kernel.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Merci fuer den Link von/an Hmmm.
Die machen das zwar hemdsaermelig mit binwalk, dd usw., aber handeln 
ungefaehr das ab, was ich suche.
Scheint also kein tool ootb fuer alles zu geben.

An den Universalexperten:
Es ist ja keine Schande, wenn man von was keine Ahnung hat. Wie z.b. 
ich, wenn ich was aus Kernelimages extrahieren will.
Aber wenn ich schon im Eingangspost ziemlich genau schreibe, was ja 
alles in einem Kernel so an "Extragimmicks" drinnensein kann, und dann 
kommt so was:

Steve van de Grens schrieb:
> Nein. Der Kernel ist ein komprimiertes Binary. In dem "Archiv" befindet
> sich nur eine einzige Datei. Nackter Maschinencode, der am Stück in den
> Speicher geladen und ausgeführt wird.

oder ich schreibe was von initramfs und dann kommt sowas:
> Die initial Ramdisk ist was anderes, das ist ein komplettes Filesystem,
> in das man rein gucken kann.

Da kann ich nur sagen: Seit mal alle ganz leise und horcht - das 
kirschende Geraeusch kommt von mir, ich rolle mit den Augen ;-)

scnr,
WK

von Jack V. (jackv)


Lesenswert?

An die Konfiguration des Kernels kommt man mit extract-ikconfig, sofern 
der Kernel mit der entsprechenden Option gebaut worden ist. Bei 
Arch-Kerneln ist das der Fall (hab grad zur Sicherheit nachgeschaut).

Und ja, das initramfs ist nur ein Archiv, kein Image. Kann man 
reingucken, wenn man mag.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Wenn es für ein ARM Embedded Gerät ist halte Ausschau nach dem DTB, der 
kann sehr aufschlussreich sein. Ja nach System ist der zusammen mit dem 
Kernel Image zusammen gepackt, allerdings gerne in einem proprietären 
Format (z.B. bei Rockchip).

von Jens G. (jensig)


Lesenswert?

Dergute W. schrieb:
> In einem Linuxkernel kann ja allerhand an "Zusatzdaten" stecken, z.b.
> die eigene .config, Kernelheaderfiles, Firmwareblobs, initramfs, etc.
> bla.
> Was fuer tools gibt's denn, um aus so einem Kernelimage (also dem
> bzImage) diese Zusatzdaten zu extrahieren, ohne z.b. den Kernel zu
> booten?

Naja, DER Kernel ist eigentlich nur ein Binary, bzw. Set of Binaries.
Aber warum fragst Du nicht Google? Z.B.:

https://github.com/dnezamaev/bzImage-unpacker
https://github.com/torvalds/linux/blob/master/scripts/extract-vmlinux

binwalk gibt schon bei Kernel 5 und 6 unterschiedliche Strukturen aus, 
da kann das Inspizieren der Kernel-Files schon etwas herausfordernder 
werden.
Ich habs nicht getestet - kannst ja mal berichten ...

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Dergute W. schrieb:
> Aber wenn ich schon im Eingangspost ziemlich genau schreibe, was ja
> alles in einem Kernel so an "Extragimmicks" drinnensein kann

Was du dort geschrieben hast stimmt aber nicht!

von Jens G. (jensig)


Lesenswert?

Steve van de Grens schrieb:
> Dergute W. schrieb:
>> Aber wenn ich schon im Eingangspost ziemlich genau schreibe, was ja
>> alles in einem Kernel so an "Extragimmicks" drinnensein kann
>
> Was du dort geschrieben hast stimmt aber nicht!

Zumal ich auch bezweifeln würde, daß der Kernel Headerfiles oder sowas 
beinhaltet, also reiner Text-Kram ... aber "das gute W" vermischt das 
vermutlich mit dem initrd-Kram ...

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jens G. schrieb:
> Zumal ich auch bezweifeln würde, daß der Kernel Headerfiles oder sowas
> beinhaltet, also reiner Text-Kram ... aber "das gute W" vermischt das
> vermutlich mit dem initrd-Kram ...

Nee, derguteweka scheint nur im Gegensatz zu dir und Anderen diese 
Kernelkonfigurationsoptionen zu kennen:

CONFIG_FW_LOADER
CONFIG_IKCONFIG
CONFIG_IKHEADERS
CONFIG_INITRAMFS_SOURCE

Und er hat auch niemals was von initrd gefaselt oder vermischt. Das tun 
nur die Eggsberrdn von hier.

scnr,
WK

von Steve van de Grens (roehrmond)


Lesenswert?

Dergute W. schrieb:
> Und er hat auch niemals was von initrd gefaselt oder vermischt.

Im Eröffnungsbeitrag steht

Dergute W. schrieb:
> In einem Linuxkernel kann ja allerhand an "Zusatzdaten" stecken, z.b.
> die eigene .config, Kernelheaderfiles, Firmwareblobs, initramfs, etc.
> bla.

Anm.: Initramfs ist der Nachfolger von Initrd

Die Einbettung der Sourcen in den Kernel ist ein ganz spezieller 
Sonderfall. Deine Frage war hingegen allgemein formuliert. Erinnerst du 
dich?: Ich habe in der ersten Antwort nachgehakt, was du vor hast. Wenn 
es um ein ganz speziellen Fall geht, dann schreibe das!

PS: Warum schreibst du über dich selbst, als gehe es um eine andere 
Person? Du erhärtest so den Eindruck, absichtlich Verwirrung zu stiften. 
Du weißt das das zu Stunk führt. Willst du Stunk?

: Bearbeitet durch User
von Steve van de Grens (roehrmond)


Lesenswert?

Dergute W. schrieb:
> wenn ich was aus Kernelimages extrahieren will.

Was willst du aus welchem Kernel extrahieren?

von Np R. (samweis)


Lesenswert?

@Steve van de Grens (roehrmond)

Interessante Lektüre:
https://docs.kernel.org/filesystems/ramfs-rootfs-initramfs.html

(Nur um die Wogen etwas zu glätten...)

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.