Voor iedereen die wat met computers doet is het bijna een bekend probleem, een kennis heeft een digitale camera en om een of andere reden zijn alle foto’s van zijn geheugenkaartje verdwenen, of je ze even terug wilt halen.
Met de juiste tools is dit vaak vrij gemakkelijk. Het kaartje is bijvoorbeeld geformatteerd en dan lijkt het leeg, maar gelukkig staan alle bestanden er nog gewoon op.
Soms komen ook de standaard tools er niet uit en dan zijn er voor Linux altijd nog een aantal speciale forensische programma’s die je kan proberen. Een daarvan is foremost een programma dat het medium in kwestie afscant op bekende headers, footers en data structuren en vervolgens de bijbehorende bestanden weer terughaalt. Foremost is ontwikkeld door Air Force Office of Special Investigations en The Center for Information Systems Security Studies and Research.
Normaliter staat op een opslagmedium zoals harddisk of smartcard een zogenaamde “File Allocation Table”, in deze FAT is te vinden welke bestanden er op het medium staan en waar ze te vinden zijn (vergelijk het met een kaartenbak). Als de FAT afwezig of corrupt is, kan het besturingssysteem geen bestanden meer vinden en biedt het meestal aan om het medium te formatteren zodat het weer bruikbaar wordt.
Foremost kijkt niet naar de FAT maar begint het medium byte voor byte te lezen en vergelijkt de informatie met bekende headers. Zo begint een jpg bestand bijvoorbeeld met:
FF D8 FF
en eindigt het met:
FF D9
Ook (bijna) alle andere bestanden hebben dit soort unieke headers. In Linux gebruikt b.v. het file commando deze informatie om terug te geven wat voor soort bestand het is, dus zonder te kijken naar de extensie.
Om het xD kaartje te kunnen uitlezen op mijn fedora core 5 laptop sloot ik een Medion USB2 16-card reader aan van de aldi. Helaas ging dat niet onmiddelijk goed, de blauwe leesled bleef maar knipperen en dmesg | tail gaf foutmeldingen als:
usb 1-7: new high speed USB device using ehci_hcd and address 11 usb 1-7: device descriptor read/all, error -71
Dit lijkt een of andere bug te zijn is het USB2 subsysteem van linux. Onder Windows zou dit meteen einde oefening zijn, maar met Linux kan je b.v. het USB2 gedeelte uit de kernel verwijderen met:
rmmod ehci_hcd
en dan komt het kaartje alsnog netjes via USB1 beschikbaar:
[super@zorax ~]# fdisk -l /dev/sdd Disk /dev/sdd: 65 MB, 65536000 bytes 8 heads, 32 sectors/track, 500 cylinders Units = cylinders of 256 * 512 = 131072 bytes Device Boot Start End Blocks Id System /dev/sdd1 * 1 500 63972+ 1 FAT12
mounten wilde niet lukken (bekende melding:
mount: wrong fs type, bad option, bad superblock on /dev/sdd1, )
dus heb ik eerst maar eens een kopie gemaakt op harddisk om alle info
veilig te stellen:
dd if=/dev/sdd1 of=m-xd-card.iso
Met:
hexview -C m-xd-card.iso | less
kan je een indruk krijgen of er nog wat te redden valt. Als je allemaal 00 ziet dan is er niets meer van te maken. Of:
strings m-xd-card.iso | grep -i jpg
Foremost stond nog niet op mijn systeem, dus ik heb het eerst geinstalleerd met:
yum install foremost
en daarna was het een kwestie van:
foremost -t jpg m-xd-card.iso
en alle jpg plaatjes kwamen boven water in de directory output/jpg
[super@zorax ~]# ls output/jpg/ 00000105.jpg 00006729.jpg 00013225.jpg 00018665.jpg 00024073.jpg 00029737.jpg 00035113.jpg 00001449.jpg 00008041.jpg 00014601.jpg 00019881.jpg 00025417.jpg 00031081.jpg 00036457.jpg 00002857.jpg 00010665.jpg 00016009.jpg 00021321.jpg 00026857.jpg 00032425.jpg 00037737.jpg 00005609.jpg 00012041.jpg 00017449.jpg 00022729.jpg 00028297.jpg 00033833.jpg