HEX schrijven naar locatie in bestand (patching) (Linux)

file patch icon

In dit voorbeeld gaan we HEX gegevens (bytes) wegschrijven naar een “locatie” in een bestand, in dit voorbeeld voeren we dit uit op een Linux systeem.

1) Maak een bestand aan, bijvoorbeeld hallo.txt, op Linux kan dat met een eenvoudig commando:

printf 'Hallo Wereld!\r\n' | dd of=hallo.txt

printf = een methode om tekst weer te geven.
\r\n = dit wordt op :inux verwerkt als \n (newline) and \r (carriage return) (zoals als LF (linefeed) en CR (carriage return) op Windows)
| (pipe) = Met “pipes” kunnen afzonderlijke processen communiceren zonder expliciet ontworpen te zijn om samen te werken.
dd = (dd = “convert and copy a file” in Linux, of = output file)

2) je kan dit controleren door de inhoud van het bestand weer te geven met “cat”

cat hallo.txt

cat = print de inhoud van een bestand op het scherm.

patch op linux 01

Ps. Zie je ook staan: 15 bytes gekopieerd?, dit zijn de 13 bytes (karakters) van “Hallo Wereld!” en 2 bytes dus van de “\r\n”!

Okee, nu een voorbeeld, stel dat we de ll’en in “Hallo” willen vervangen door “LL”
3) De HEX code van “L” is 0x4C, voor de printf commando in Linux is dit: x4c
4) We gebruiken hiervoor ook het dd programma, dan is het Linux commando:

printf '\x4c\x4c' | dd of=hallo.txt bs=1 seek=2 count=2 conv=notrunc

printf = een methode om tekst weer te geven.
‘\x4c\x4c’ = dit zijn de HEX codes (0x4C & 0x4C) van “LL”.
| (pipe) = Met “pipes” kunnen afzonderlijke processen communiceren zonder expliciet ontworpen te zijn om samen te werken.
dd = (dd = “convert and copy a file” in Linux, of= output file, bs= bytestep, seek=startposition (in decimal), conv=conversion)

Voor de situatie hierboven:
of=hallo.txt, in dit geval het bestand waarnaartoe we gegevens willen schrijven.
bs=1, 1 byte per keer
seek=2, begin vanaf de 2e byte
count=2, het aantal bytes dat we willen schrijven (vanuit de printf commando)
conv=notrunc, trunceer het bestand niet na afloop! (dit doet dd standaard na het bewerken)

patch op linux 02

Wil je meer byte’s schrijven?, dan kun je de printf commando uitbreiden, hier als voobeeld 4 bytes: ‘\[HEXCODE]\[HEXCODE]\[HEXCODE]\[HEXCODE]’, neem dan ook count=4 mee!

Linux: Hexdump
Met Hexdump kun je de inhoud van een bestand weergeven als HEX, decimaal of octaal getallen, meer infomatie hier (ENG)
Met het voorbeeld hierboven kun je dus kijken wat de HEX codes zijn voor het bestand hallo.txt.

Er zijn meerdere weergaves mogelijk met hexdump, hieronder in het groen aangegeven met het commando:

cat hallo.txt | hexdump -C

patch op linux 03

Bronnen: StackoverflowWikipedia ENGLinux QuestionsLinux About