7 Bitjes vlooien 7

 
  • 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.

     

 

Wat heb je geleerd?

  • Je hebt de speciale files /dev/null en /dev/zero leren kennen en het commando mount.
  • Je kunt iets meer aan de weet komen over files en hun inhoud met de commando's dd, od, strings en file.

 

Opdrachten thema 7

  1. Welke devices zijn gemount op jouw linux systeem?
  2. Met welk commando kan je een exacte kopie van een SD-card maken?

 

Aangemaakt 18 december 1999
Laatst bijgewerkt januari 2016