-
Inleiding
Unix is ontworpen als een werkomgeving voor programmeurs door
programmeurs.
Unix en derhalve ook Linux bevatten krachtige tools waarmee op
bitniveau in de hardware gekeken kan worden. Nu lijkt dit niet iets
waar de eerste de beste computergebruiker in geinteresseerd is, maar
deze tools bieden wel veel vaak onverwachte mogelijkheden. Vandaar dat
we een aantal commando's uit deze categorie zullen bekijken.
-
devices als files
De /dev directory bevat speciale files die dienen als
aanknopingspunten voor de diverse devices. De devices zoals disks,
diskpartities, diskettes, netwerkkaarten
etc. zijn als files te bereiken.
Er zijn ook twee speciale entries in de dev directory, namelijk: null
en zero.
/dev/null is een zwart gat. Je kunt er van alles naar wegschrijven en
het verdwijnt in een bodemloze put. Lezen van /dev/null geeft direct
een EOF (end of file).
/dev/zero is een leverancier van nullen. Lezen van /dev/zero levert
net zoveel nullen op als je maar wilt.
Bij de uitleg over dd zullen we deze devices toegepast zien.
Met het al eerder genoemde mount commando is een partitie aan een
directory te koppelen. We krijgen een enkele boomstructuur waarin de
diverse devices op hun eigen plek aangekoppeld (gemount) zijn. Een
belangrijke plaats wordt hier ingenomen door het root-device. Dit
heeft als mount-punt het begin van de directory boom. Het mount-punt
heet /.
Indien het mount commando zonder device en directory wordt gegeven,
worden de reeds gemounte devices weergegeven.
-
dd
Met dd kan men byte voor byte van een bestand lezen. Dit bestand kan
ook een entry uit de /dev directory zijn. De volgende voorbeelden gaan uit van de situatie dat er nog een diskettedrive op de computer aanwezig is. Dit is meestal niet meer het geval, maar fd0 kan vervangen worden door een ander device, zoals het device dat staat voor een usb-stick of SD-card. Om een file-image van een
diskette te maken volstaat het volgende commando:
dd if=/dev/fd0 of=floppy.image
Het omgekeerde kan ook:
dd if=floppy.image of=/dev/fd0
zet de image file weer naam een diskette.
Dit werkt onafhankelijk van het filesysteem op de diskette, daar wordt
namelijk helemaal niet naar gekeken.
Wel kun je met dd kijken of alle blokken van een diskette leesbaar
zijn.
Dit geldt ook voor cdroms. Om te voorkomen dat er een grote image
gemaakt wordt kun je met dd van de te testen cdrom lezen en de output
naar /dev/null schrijven.
dd if=/dev/cdrom of=/dev/null
Om te voorkomen dat iemand nog interessante blokken op een disk kan
vinden is een disk of diskette ook vol te schrijven met nullen. Hier
komt /dev/zero van pas. Ideaal voor criminelen, pornobazen,
belastingontduikers en presidenten.
dd if=/dev/zero bs=512 count=2880 of=/dev/fd0
we hebben hier de blocksize en de blockcount als extra parameters aan
dd meegegeven. Blocksize staat op 512 (dit is overigens de default
waarde) en op een 1.44 MByte floppy gaan 2880 blokken van 512 bytes.
-
od
De afkorting od staat voor octal dump. Het is een oud commando dat al
stamt uit de tijd dat Unix op een PDP draaide. Machinetaal van de PDP
van digital was voor kenners bijna als assembly te lezen als de
machinecodes octaal werden weergegeven.
Vandaag de dag wordt od meestal met de optie -x (voor hexadecimale
weergave) of -c (voor character weergave) toegepast.
Stel we hebben een bootblock van een floppy.
Met od zien de eerste 512 bytes er als volgt uit.
dd if=/dev/fd0 count=1 | od -x
000000 3ced 4d90 4453 534f 2335 0030 0102 0001
000020 e002 4000 f00b 0009 0012 0002 0000 0000
....
Wel niet bijster interessant lijkt het.
Met
dd if=/dev/fd0 count=1 | od -c
krijgen we:
0000000 353 < 220 M S D O S 5 . 0 \0 002 001 001 \0
0000020 002 340 \0 @ \v 360 \t \0 022 \0 002 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 ) 374 021 k 1 S T A R T
0000060 U P F A T 1 2 372 3
Hola, grappig dit is dus een 5.0 bootflop of zoiets.
Zo is ook de code van eventuele bootsector virussen te achterhalen.
-
strings
Met het commando strings (gevolgd door de naam van een file) worden
mogelijke ASCII-teksten uit deze file geplukt en naar het scherm
gestuurd. Dit is een mooie tool om uit binaire files eventuele
verborgen teksten te halen.
-
file
Als laatste noemen we het commando file. Hiermee kan onderzocht worden
wat de mogelijke inhoud van een bestand is. Zo lever het commando
file *
in een willekeurige directory de volgende output:
nuke.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM,
8 bit, mono 11025 Hz
patchup: perl commands text
ping: setuid ELF 32-bit LSB executable, Intel 80386,
version 1, dynamically linked (uses shared libs),
stripped
tmp: directory
trans_fact.ppt: data
tweety.gif: GIF image data, version 89a, 98 x 83,
unix.gif: GIF image data, version 87a, 320 x 64,
updates: directory
vipower.gif: GIF image data, version 89a, 88 x 31,
voorwerk.aux: LaTeX auxiliary file
voorwerk.dvi: TeX DVI file (TeX output 1999.12.16:2231‹)
voorwerk.log: TeX transcript text
voorwerk.tex: LaTeX 2e document text
wget-1.5.3-5.i386.html: HTML document text
xfree.gif: GIF image data, version 87a, 208 x 105,
xfree86logo.gif: GIF image data, version 89a, 416 x 210,
xfrees.gif: PC bitmap data, Windows 3.x format, 208 x 105 x 24
xyz: empty
De enige file die niet direct herkend wordt, is de powerpoint
presentatie trans_fact.ppt. De rest van de files worden behoorlijk
nauwkeurig beschreven.
Hier blijkt dat een extensie best wel misleidend kan zijn. Zo is
xfrees.gif geen echte GIF image, maar een PC bitmap file.
|