GNU/Linux >> LINUX-Kenntnisse >  >> Linux

CSI:Der Fall der fehlenden WAV-Audiodateien auf der FAT32-SD-Karte

Schnallt euch an, Kinder, denn das ist eine Geschichte. Wie Sie vielleicht wissen, habe ich einen schönen Podcast auf https://hanselminutes.com. Du solltest zuhören.

Kürzlich bekam ich durch eine Reihe supercooler zufälliger Ereignisse die Gelegenheit, den Schauspieler Chris Conner zu interviewen, der Poe in Altered Carbon spielt. Ich bin ein großer Fan der Show, aber besonders von Chris. Sie sollten sich die Show ansehen, weil Poe eine Freude ist und Chris jede Szene besitzt, und das mit einer SEHR starken Besetzung.

Normalerweise mache ich meine Interviews für den Podcast aus der Ferne, aber ich wollte Chris treffen und persönlich abhängen, also habe ich mein lokales Podcasting-Rig verwendet, das aus einem Zoom H6-Recorder besteht.

Ich habe zwei XLR-Mikrofone von Shure, einen Mikrofonständer und das Zoom. Der Zoom H6 ist ein sehr gutes Arbeitstier und ich habe ihn schon oft beim Aufnehmen von Shows verwendet. Es ist keine Raketenoperation, aber man sollte seine Sachen immer testen.

Ich wollte kein Risiko eingehen, um ein 5er-Pack hochwertiger 32GIG-SD-Karten zu kaufen. Ich habe eine neue in den Zoom gesteckt, der Zoom hat die SD-Karte sofort erkannt, also habe ich direkt dort eine lokale Aufnahme gemacht und sie abgespielt. Klingt gut. Ich habe es lokal auf dem Zoom abgespielt und konnte die Aufnahme über den lokalen Lautsprecher des Zooms hören. Es nimmt die Datei in Stereo auf, eine Seite für jedes Mikrofon. Merken Sie sich das für später.

Ich ging früh zum Treffen und richtete das gesamte Aufnahme-Setup ein. Ich habe einen lokalen Monitor angeschlossen und erneut getestet. Nimmt lokal auf und gibt sie wieder. Kühl. Chris taucht auf, wir haben eine fantastische Show aufgenommen, er ist verlobt und wir sind jetzt beste Freunde und wir gehen zu Chipotle, Fachsimpeln, Sci-Fi, Schauspiel, KIs usw. Einfach ein rundum toller Nachmittag.

Ich gehe nach Hause und ziehe die SD-Karte heraus und stecke sie in den PC und ich sehe das. Ich erbreche fast. Mir wird schwindelig.

Ich habe die Show über 14 Jahre lang mit über 730 Folgen aufgenommen und ich habe noch nie eine Show verloren. Ich mache meine Hausaufgaben - genau wie du. Ich schwanke. Okay, atmen. Lösen wir das Problem.

Klicken Sie mit der rechten Maustaste auf das Laufwerk, überprüfen Sie die Eigenschaften. Atmen. Dies ist ein 32-GB-Laufwerk, aber Windows sieht, dass 329 MB verwendet werden . 300 MB entspricht der Größe einer 30 Minuten langen WAV-Datei mit zwei Kanälen. Ich weiß das, weil ich mir in den letzten hundert Shows 300 MB Dateien angeschaut habe. So wie Sie ungefähr die Größe eines JPEG kennen, das Ihre Kamera erstellt. Es ist eine Sache, die Sie wissen.

Befehlszeilenzeit. Listen Sie das Root-Verzeichnis auf. Leer. Überprüfen Sie es erneut, aber "alle Dateien anzeigen", seltsam, es gibt dort einen Mac-Ordner, aber vielleicht wurde die SD-Karte auf einem Mac vorformatiert.

Interessanter Handlungspunkt - Ich habe die SD-Karte nicht formatiert. Ich benutze es so wie es aus der Verpackung von Amazon kam. Es kam vorformatiert und ich akzeptierte es. Ich habe es getestet und es hat funktioniert, aber ich habe nicht "meinen eigenen Teppich verlegt". Ich bin in das Haus eingezogen wie es ist.

Wie wäre es mit einer kleinen Aktion "Zeig mir alle Ordner ab hier unten"? So wie ich es im Windows Explorer gesehen habe. Der Stammordner hat einen weiteren Unterordner, der er selbst ist. Es ist der Ordner „Inception“ ohne Kick!

G:\>dir /a
Volume in drive G has no label.
Volume Serial Number is 0403-0201
Directory of G:\
03/12/2020 12:29 PM <DIR>
03/13/2020 12:44 PM <DIR> System Volume Information
0 File(s) 0 bytes
2 Dir(s) 30,954,225,664 bytes free
G:\>dir /s
Volume in drive G has no label.
Volume Serial Number is 0403-0201
Directory of G:\
03/12/2020 12:29 PM <DIR>
0 File(s) 0 bytes
Directory of G:\
03/12/2020 12:29 PM <DIR>
0 File(s) 0 bytes
IT GOES FOREVER

Ok, das Laufwerk glaubt, dass es Daten gibt, aber ich kann sie nicht sehen. Ich stecke die SD-Karte wieder in den Zoom und versuche, sie abzuspielen.

Der Zoom kann Ordner und Dateien UND das Interview selbst sehen. Und der Zoom kann es wiedergeben. Der Zoom ist ein eingebettetes Gerät mit einer Implementierung des FAT32-Dateisystems und kann es lesen, Windows jedoch nicht. Kann Linux? Kann ein Mac?

Kurze Antwort. Nein.

Hacky-Hinweis: Da der Zoom die Datei sehen und abspielen kann und über eine Kopfhörer-/Monitorbuchse verfügt, könnte ich jederzeit ein analoges 1/8-Zoll-Kopfhörerkabel an einen 1/4-Zoll-Eingang meines Peavy PV6-Mixers anschließen und das Audio mit etwas Analogem retten Qualitätsverlust. Warum verwende ich nicht die USB-Audioausgangsfunktion des Zoom H6 und spiele die Datei über ein digitales Kabel ab, fragen Sie? Weil der Zoom-Audioplayer das nicht unterstützt. Es unterstützt drei Modi - SD-Kartenleser (der ein Pass-Through zu Windows ist und mir die rekursiven Verzeichnisse und keine Dateien anzeigt), einen Audio-Pass-Through, der den Zoom wie ein Audiogerät für Windows aussehen lässt, aber die SD nicht anzeigt Karte als Laufwerk verwenden oder die SD-Karte über die digitale Schnittstelle oder ihren Hauptmodus abspielen lassen, in dem sie lokal aufzeichnet.

Es ist Zeit für die Forensik, Kinder.

Wir haben eine 32-SD-Karte – sozusagen ein Laufwerk –, die standardmäßig mit FAT32 formatiert ist und 300–400 MB einer zweikanaligen (Chris und ich hatten zwei Mikrofone) WAV-Datei enthält, die lokal vom Zoom H6 Audio aufgezeichnet wurde neu anordnen und ich möchte es nicht zu sehr verlieren oder durcheinander bringen.

Ich muss ein Byte-für-Byte-Image von dem machen, was sich auf der SD-Karte befindet, damit ich es durchstöbern und "virtuell" damit herumspielen, es ändern, reparieren, es erneut versuchen kann, ohne das Physische zu ändern.

„dd“ ist ein Befehlszeilenprogramm mit einer reichen und bewegten Geschichte, die 45 Jahre zurückreicht. Obwohl es "Datendefinition" bedeutet, wird es in meinem Kopf immer "Festplattenlaufwerk" sein.

So klonen Sie unter Windows ein USB-Laufwerk oder eine SD-Karte in eine IMG-Datei

Ich habe eine Kopie von dd für Windows, mit der ich ein Byte für Byte-Stream/Datei erhalten kann, die diese SD-Karte darstellt. Zum Beispiel könnte ich ein ganzes USD-Gerät bekommen:

dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\usb2.img bs=1M --size --progress

Ich muss die Festplattennummer und die Partitionsnummer kennen, wie Sie oben sehen können. Normalerweise verwende ich dafür diskpart.

>diskpart

Microsoft DiskPart version 10.0.19041.1

Copyright (C) Microsoft Corporation.
On computer: IRONHEART

DISKPART> list disk

Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 476 GB 0 B *
Disk 1 Online 1863 GB 0 B *
Disk 2 Online 3725 GB 0 B
Disk 3 Online 2794 GB 0 B *
Disk 8 Online 29 GB 3072 KB

DISKPART> select disk 8

Disk 8 is now the selected disk.

DISKPART> list part

Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 Primary 29 GB 4096 KB

Sieht so aus, als wäre es Disk 8 Partition 1 auf meinem System. Holen wir alles, bevor ich in Panik gerate.

dd if=\\?\Device\Harddisk8\Partition1 of=c:\temp\ZOMG.img bs=1M --size --progress

IF und OF sind Eingabedatei und Ausgabedatei, und ich werde es für die gesamte Größe der SD-Karte tun. Es ist jedoch wahrscheinlich übertrieben, wie wir gleich sehen werden.

Diese Datei war am Ende total massiv und schwer zu bearbeiten. Erinnern Sie sich, dass ich nur die ersten 400 Megabyte benötigte? Ich werde nur diesen Teil hacken.

dd if=ZOMG.img of=SmallerZOMG.img bs=1M count=400

Was ist das aber? Denken Sie daran, dass es sich um ein Abbild eines Dateisystems handelt. Es sind nur Bytes in einer Datei. Es ist keine WAV-Datei oder eine DIESE Datei oder eine DIESE Datei. Ich meine, es ist, wenn wir entscheiden, dass es so ist, aber tatsächlich kann man darüber nachdenken, dass es ein verstümmelter Umschlag ist, der dunkel ist, wenn ich hineinschaue. Wir müssen uns umhören und sehen, ob wir wieder ein Gefühl dafür bekommen, was die Inhalte wirklich sind.

Rohbytes aus einem IMG in Audition oder Audacity importieren

Sowohl Adobe Audition als auch Audacity sind Audio-Apps mit der Funktion „RAW-Daten importieren“. Allerdings muss ich Audition sagen, wie es interpretiert werden soll. Es gibt viele WAV-Dateien da draußen. Wie viele Simples gab es? 1 Kanal? 2 Kanal? 16bit oder 32bit? Viele Fragen.

Kann ich einfach dieses 4-Gig-Byte-Array eines Dateisystems importieren und etwas bekommen?

Sieht aus wie etwas. Sie können sehen, dass der erste Teil dort wahrscheinlich der Anfang der Partitionstabelle, Dateisystem-Header usw. ist, bevor Audiodaten angezeigt werden. Hier wird als 2-Kanal importiert.

Ich kann Stimmen hören, aber sie klingen wie Streifenhörnchen und sind nicht verständlich. Etwas wird „verdoppelt“. Beispielrate? Nein, ich habe es noch einmal überprüft.

Hier ist ein Rohdatenimport für einen Kanal, obwohl ich denke, dass es zwei sind.

Nun, DAS ist interessant. Ich kann Audio mit normaler Geschwindigkeit von uns sprechen hören (nach der Präambel), ABER es ist jeweils nur eine Silbe, und dann wiederholt sich eine leisere Version derselben Silbe. Ich möchte (sprich:kann nicht wirklich) ein 30-minütiges Interview aus Silben neu zusammensetzen, oder?

Erinnern Sie sich, als ich sagte, dass das Zoom H6 eine Zweikanaldatei mit einem Kanal pro Mikrofon aufzeichnet? Nicht wirklich. Es zeichnet EINE DATEI PRO KANAL auf. Ein WhateverL.wav und ein WhateverR.wav. Ich hab es total vergessen!

Diese "Ein-Kanal"-Datei oben sind eigentlich die Bytes, wie sie auf der Festplatte abgelegt wurden, richtig? Es sind eigentlich zwei Dateien gleichzeitig geschrieben , ein paar Kilobyte auf einmal, L,R,L,R,L,R. Und hier sage ich meiner Soundsoftware, dass sie diesen "Byte-für-Byte-Dateisystem-Dump" als eine Datei behandeln soll. Es sind zwei, die gleichzeitig hergestellt wurden.

Es ist wie die Brundlefly. Wie necke ich es auseinander? Nun, ich kann das Array nicht mehr als Rohdatei behandeln, das ist es nicht. Und ich möchte (ich habe wirklich noch nicht die Energie) meine eigene kleine App schreiben, um dieses Bild effektiv zu deinterlacen. Ich weiß auch nicht, ob die Segmentgröße vollkommen zuverlässig ist oder ob sie je nach aufgezeichnetem Zoom variiert.

HINWEIS: Pete Brown hat über RIFF/WAV-Dateien von Sound Devices-Aufzeichnungen mit einem falschen FAT32-Bitsatz geschrieben. Dies ist nicht das, aber es gehört zur selben Familie und ist erwähnenswert, wenn Sie jemals ein Problem mit einer Broadcast-Wave-Datei haben, die beschädigt wird oder verschlüsselt aussieht.

Um mir bei der Lösung dieses Problems zu helfen, hat Pete Brown einen Hexdump der Verzeichnistabelle getwittert, sodass Sie die Verzeichnisse Zoom0001, Zoom0002 usw. dort im Bild sehen können.

Lassen Sie mich auf meinem Windows-Computer, auf dem WSL ausgeführt wird, zu Ubuntu wechseln. Hier kann ich fdisk ausführen und mir ein Bild davon machen, was dieses Bild der schlechten SD-Karte ist. Denken Sie auch daran, dass ich die ersten 0-400 MB gehackt habe, aber diese IMG-Datei denkt, dass es sich um ein 32-GB-Laufwerk handelt, weil es so ist. Es wurde nur aggressiv gekürzt.

$ fdisk -u -l SmallerZOMG.img
Disk SmallerZOMG.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
SmallerZOMG.img1 8192 61157375 61149184 29.2G c W95 FAT32 (LBA)

Vielleicht kann ich diesen IMG "mounten"? Ich erstelle einen Ordner auf Ubuntu/WSL2 namens ~/recovery. Huch, ok, da ist nichts. Ich kann die Sektorgröße 512 mal den Startblock von 8192 nehmen und das als Offset verwenden.

sudo mount -o loop,offset=4194304 SmallerShit.img recover/
$ cd recover/
$ ll
total 68
drwxr-xr-x 4 root root 32768 Dec 31 1969 ./

Ali Mosajjal denkt, dass sie vielleicht „die FAT32-Strukturdefinition neu geschrieben und keine Standardbibliothek verwendet und einen Fehler gemacht haben“, und Leandro Pereria postuliert, „was passieren könnte, ist, dass die LFN-Prüfsumme (langer Dateiname) ungültig ist, und sie haben es getan machen Sie sich nicht die Mühe, den 8.3-Dateinamen einzugeben ... damit konforme Implementierungen von VFAT versuchen, den Fallback-8.3-Namen zu sehen, es sind alles Leerzeichen und finden heraus, "es ist alles Auffüllen, weitermachen."

Ali schlug vor, dosfsck auszuführen auf dem gemounteten Image und man sieht wieder, dass die Dateien da sind, aber da sind etwa 3 Root-Einträge? Beachten Sie, dass ich einen cat von /proc/mounts gemacht habe, um die Schleife zu sehen, auf der mein img gemountet ist, damit ich im dosfsck-Befehl darauf verweisen kann.

$ sudo dosfsck -w -r -l -a -v -t /dev/loop3
fsck.fat 4.1 (2017-01-24)
Checking we can access the last sector of the filesystem
Boot sector contents:
System ID " "
Media byte 0xf8 (hard disk)
512 bytes per logical sector
32768 bytes per cluster
1458 reserved sectors
First FAT starts at byte 746496 (sector 1458)
2 FATs, 32 bit entries
3821056 bytes per FAT (= 7463 sectors)
Root directory start at cluster 2 (arbitrary size)
Data area starts at byte 8388608 (sector 16384)
955200 data clusters (31299993600 bytes)
63 sectors/track, 255 heads
8192 hidden sectors
61149184 sectors total
Checking file /
Checking file /
Checking file /
Checking file /System Volume Information (SYSTEM~1)
Checking file /.
Checking file /..
Checking file /ZOOM0001
Checking file /ZOOM0002
Checking file /ZOOM0003
Checking file /ZOOM0001/.
Checking file /ZOOM0001/..
Checking file /ZOOM0001/ZOOM0001.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0001/ZOOM0001_LR.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0002/.
Checking file /ZOOM0002/..
Checking file /ZOOM0002/ZOOM0002.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0002/ZOOM0002_Tr1.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0002/ZOOM0002_Tr2.WAV (ZOOM00~2.WAV)
Checking file /ZOOM0003/.
Checking file /ZOOM0003/..
Checking file /ZOOM0003/ZOOM0003.hprj (ZOOM00~1.HPR)
Checking file /ZOOM0003/ZOOM0003_Tr1.WAV (ZOOM00~1.WAV)
Checking file /ZOOM0003/ZOOM0003_Tr2.WAV (ZOOM00~2.WAV)
Checking file /System Volume Information/.
Checking file /System Volume Information/..
Checking file /System Volume Information/WPSettings.dat (WPSETT~1.DAT)
Checking file /System Volume Information/ClientRecoveryPasswordRotation (CLIENT~1)
Checking file /System Volume Information/IndexerVolumeGuid (INDEXE~1)
Checking file /System Volume Information/AadRecoveryPasswordDelete (AADREC~1)
Checking file /System Volume Information/ClientRecoveryPasswordRotation/.
Checking file /System Volume Information/ClientRecoveryPasswordRotation/..
Checking file /System Volume Information/AadRecoveryPasswordDelete/.
Checking file /System Volume Information/AadRecoveryPasswordDelete/..
Checking for bad clusters.

Wir können sie sehen, aber mit dem vfat-Dateisystemtreiber unter Linux oder Windows nicht erreichen.

Das Dienstprogramm DUMP.exe als Teil von mtools für Windows ist erstaunlich, aber ich kann nicht herausfinden, was in der FAT32-Dateitabelle falsch ist. Ich kann mininfo auf dem Linux-Befehl land ausführen und ihm mit dem @@offset-Modifikator befehlen, 8192 Sektoren zu überspringen:

$ minfo -i ZOMG.img@@8192S
device information:
===================
filename="ZOMG.img"
sectors per track: 63
heads: 255
cylinders: 3807

mformat command line: mformat -T 61149184 -i ZOMG.img@@8192S -h 255 -s 63 -H 8192 ::

bootsector information
======================
banner:" "
sector size: 512 bytes
cluster size: 64 sectors
reserved (boot) sectors: 1458
fats: 2
max available root directory slots: 0
small size: 0 sectors
media descriptor byte: 0xf8
sectors per fat: 0
sectors per track: 63
heads: 255
hidden sectors: 8192
big size: 61149184 sectors
physical drive id: 0x80
reserved=0x0
dos4=0x29
serial number: 04030201
disk label=" "
disk type="FAT32 "
Big fatlen=7463
Extended flags=0x0000
FS version=0x0000
rootCluster=2
infoSector location=1
backup boot sector=6

Infosector:
signature=0x41615252
free clusters=944648
last allocated cluster=10551

Ok, jetzt haben wir noch einen ANDEREN Weg gefunden, dieses beschädigte Dateisystem zu mounten. Bei mtools verwenden wir mdir, um das Root-Verzeichnis aufzulisten. Beachten Sie, dass etwas falsch genug ist, dass ich mtools_skip_check=1 auf ~/.mtoolsrc setzen und fortfahren muss.

$ mdir -i ZOMG.img@@8192S ::
Total number of sectors (61149184) not a multiple of sectors per track (63)!
Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
$ pico ~/.mtoolsrc
$ mdir -i ZOMG.img@@8192S ::
Volume in drive : is
Volume Serial Number is 0403-0201
Directory for ::/

<DIR> 2020-03-12 12:29
1 file 0 bytes
30 954 225 664 bytes free

Gleiches Ergebnis. Ich kann mdu ausführen und sehe nur ein paar Ordner. Beachten Sie, dass die ZOOMxxxx hier fehlen

$ mdu -i ZOMG.img@@8192S ::
::/System Volume Information/ClientRecoveryPasswordRotation 1
::/System Volume Information/AadRecoveryPasswordDelete 1
::/System Volume Information 5
::/ 6

Nun möchte ich hier idealerweise zwei Dinge erreichen.

  • Wissen Sie, WARUM es kaputt ist und WAS genau falsch ist.
    • Hier gibt es ein namenloses Root-Verzeichnis und mir fehlt die Geduld und das Geschick, es manuell zu hexdumpen und zu patchen.
  • Sie können die Dateien "normal" herauskopieren, indem Sie das IMG mounten und, nun ja, herauskopieren.

AKTUALISIERUNG Nr. 1 - Ich bin nach ein paar Minuten des Nachdenkens wieder zurück.

Wenn ich mmls von Sleuthkit verwende, kann ich das sehen.

$ mmls HolyShit.img
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

Slot Start End Length Description
000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
001: ------- 0000000000 0000008191 0000008192 Unallocated
002: 000:000 0000008192 0061157375 0061149184 Win95 FAT32 (0x0c)

Wenn ich den 512 * 8192-Offset erneut mache und die FAT32-Tabelle in Hexdump / xxd wie folgt visualisiere:

xxd -seek 4194304 ZOMG.img  | more
00400000: eb00 9020 2020 2020 2020 2000 0240 b205 ... ..@..
00400010: 0200 0000 00f8 0000 3f00 ff00 0020 0000 ........?.... ..
00400020: 0010 a503 271d 0000 0000 0000 0200 0000 ....'...........
00400030: 0100 0600 0000 0000 0000 0000 0000 0000 ................
00400040: 8000 2901 0203 0420 2020 2020 2020 2020 ..)....
00400050: 2020 4641 5433 3220 2020 0000 0000 0000 FAT32 ......
00400060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00400090: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
004000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................

Ich kann sehen, dass ich an der richtigen Stelle gesucht habe, da die Zeichenfolge FAT32 gerade heraushängt. Vielleicht kann ich diese Tabelle ausschneiden und in einem besseren grafischen Tool visualisieren.

Ich könnte einen vernünftigen (sprich:beliebigen) Teil von diesem Offset nehmen und ihn in eine sehr kleine überschaubare Datei stecken:

dd if=ZOMG.img ibs=1 skip=4194304 count=64000 > another.img

Und dann laden Sie es in dump.exe unter Windows, was wirklich ein verdammt gutes Tool ist. Es scheint zu denken, dass es mehrere FAT-Root-Einträge gibt (was vielleicht der Grund ist, warum ich diesen seltsamen Ghost-Root sehe). Beachten Sie auch die "sollte"-Teile.

FAT Root Entry (non LFN) (0x00000000)
Name: ···
Extension:
Attribute: 0x00
FAT12:reserved: 02 40 B2 05 02 00 00 00 00 F8
FAT32:reserved: 02
FAT32:creation 10th: 0x40
FAT32:creation time: 0x05B2
FAT32:creation date: 0x0002
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0xF800
Time: 0x0000 (00:00:00) (hms)
Date: 0x003F (1980/01/31) (ymd)
Starting Cluster: 0x00FF (0xF80000FF)
File Size: 8192

FAT Root Entry (non LFN) (0x00000020)
Name: ····'···
Extension: ···
Attribute: 0x00
FAT12:reserved: 02 00 00 00 01 00 06 00 00 00
FAT32:reserved: 02
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0001
FAT32:last accessed: 0x0006
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT Root Entry (non LFN) (0x00000040)
Name: ··)····
Extension:
Attribute: 0x20 Archive
FAT12:reserved: 20 20 20 20 20 20 46 41 54 33
FAT32:reserved: 20
FAT32:creation 10th: 0x20
FAT32:creation time: 0x2020
FAT32:creation date: 0x2020
FAT32:last accessed: 0x4146
FAT32:hi word start cluster: 0x3354
Time: 0x2032 (04:01:18) (hms)
Date: 0x2020 (1996/01/00) (ymd)
Starting Cluster: 0x0000 (0x33540000)
File Size: 0

FAT Root Entry (non LFN) (0x00000060)
Name: ········
Extension: ···
Attribute: 0x00
FAT12:reserved: 00 00 00 00 00 00 00 00 00 00
FAT32:reserved: 00
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0000
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT Root Entry (non LFN) (0x00000080)
Name: ········
Extension: ···
Attribute: 0x00
FAT12:reserved: 00 00 00 00 00 00 00 00 00 00
FAT32:reserved: 00
FAT32:creation 10th: 0x00
FAT32:creation time: 0x0000
FAT32:creation date: 0x0000
FAT32:last accessed: 0x0000
FAT32:hi word start cluster: 0x0000
Time: 0x0000 (00:00:00) (hms)
Date: 0x0000 (1980/00/00) (ymd)
Starting Cluster: 0x0000 (0x00000000) <--- should be 0x0002 or higher.
File Size: 0

FAT32 Info Block (0x00000000)
sig: 0x209000EB (' ···') [1] <--- should be 0x41615252.
reserved:
00000004 20 20 20 20 20 20 20 00-02 40 B2 05 02 00 00 00 .........@......
00000014 00 F8 00 00 3F 00 FF 00-00 20 00 00 00 10 A5 03 ....?...........
00000024 27 1D 00 00 00 00 00 00-02 00 00 00 01 00 06 00 '...............
00000034 00 00 00 00 00 00 00 00-00 00 00 00 80 00 29 01 ..............).
00000044 02 03 04 20 20 20 20 20-20 20 20 20 20 20 46 41 ..............FA
00000054 54 33 32 20 20 20 00 00-00 00 00 00 00 00 00 00 T32.............

Der verwirrendste Teil ist, dass die FAT32-Signatur - die magische Zahl immer 0x41615252 sein soll. Google das. Du wirst sehen. Es ist eine fest codierte Signatur, aber vielleicht habe ich den falschen Offset und an diesem Punkt sind alle Wetten ungültig.

Also habe ich das? Ich kann eine Binärdatei mit einer Kombination aus xxd und grep nach Hex-Werten durchsuchen. Beachten Sie den Byte-Swap:

xxd another.img  | grep "6141"
00000200: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............
00000e00: 5252 6141 0000 0000 0000 0000 0000 0000 RRaA............

Direkt davor ist 55 AA, was die letzten beiden Bytes der 64-Byte-Partitionstabelle sind. mm

Habe ich jetzt zwei FAT32-Infoblöcke und drei Root-Einträge? Ich bin verloren. Ich möchte die Verzeichniseinträge ausgeben.

Was sagt fsstat über das Root-Verzeichnis?

File System Layout (in sectors)
Total Range: 0 - 61149183
* Reserved: 0 - 1457
** Boot Sector: 0
** FS Info Sector: 1
** Backup Boot Sector: 6
* FAT 0: 1458 - 8920
* FAT 1: 8921 - 16383
* Data Area: 16384 - 61149183
** Cluster Area: 16384 - 61149183
*** Root Directory: 16384 - 16447

Ich werde diesen Teil aktualisieren, wenn ich mehr erfahre. Ich bin erschöpft. Jemand wird dies wahrscheinlich lesen und sagen:"Du Idiot, suche HIER", und da ist das Byte, das im Dateisystem falsch ist. Dieser LFN (langer Dateiname) hat keinen kurzen, etc" und dann weiß ich es.

AKTUALISIERUNG #2:

Ich habe mit Ali geskypt und wir glauben, wir wissen, was los ist. Er schlug vor, die SD-Karte zu formatieren, die gleichen 3 Shows aufzunehmen (zwei Test-WAVs und eine aktuelle) und dann ein Image der GOOD-Diskette zu erstellen, um Variablen zu entfernen. Kluger Kerl!

Wir haben dann die ersten 12 MB von GOOD.img und BAD.img genommen und sie durch xxd in HEX geleitet und dann Visual Studio Code verwendet, um sie zu unterscheiden.

Wir können nun links visualisieren, wie eine gute Verzeichnisstruktur aussieht und rechts, wie eine schlechte aussieht. Scheint, als hätte ich zwei rekursive Stammverzeichnisse mit einem Leerzeichen für den Namen.

Wenn wir wollten, könnten wir jetzt manuell einen komplett neuen Verzeichniseintrag neu schreiben und ihm unsere verwaisten Dateien zuweisen.

Das würde ich tun, wenn ich mit der Wiederherstellung von Daten beauftragt würde.

7zip alle Sachen

Hier wird es seltsam und es wurde so seltsam, dass sowohl Pete Brown als auch ich dachten:NUN. DAS IST ERSTAUNLICH.

Aus einer Laune heraus habe ich mit der rechten Maustaste auf die IMG-Datei geklickt und sie in 7zip geöffnet und das hier gesehen.

Sehen Sie das Verzeichnis dort, das ein Nichts ist? Ein Leerzeichen? Ein Etwas. Es hat keinen Kurznamen. Es ist ein ungültiger Eintrag, aber 7zip ist cool damit. Gehen wir hinein. Beobachten Sie den Pfad und das \\. Das ist ein Pfadtrennzeichen, nichts und ein weiteres Pfadtrennzeichen. Das ist nicht erlaubt oder OK, aber 7zip ist cool.

Ich habe die Dateien herausgezogen und sie sind in Ordnung! Der Tag ist gerettet.

Die Moral? Es gibt ein paar, die ich sehen kann.

  • Formatieren Sie die zufälligen SD-Karten, die Sie von Amazon erhalten, speziell auf dem Gerät neu, auf dem Sie sie verwenden werden.
  • FAT als Spezifikation enthält eine Reihe von Dingen, die verschiedene "Treiber" (Windows, VFAT usw.) möglicherweise ignorieren oder übergehen oder einfach nicht implementieren.
  • Ich habe 85 % des Wissens, das ich brauche, um so etwas zu spelunken, aber die letzten 15 % sind eine Mauer. Ich würde mehr Geduld brauchen und mehr darüber lesen.
  • Zu wissen, wie das geht, ist für jeden Ingenieur nützlich. Es ist das Äquivalent zu wissen, wie man im Notfall einen Schaltknüppel fährt, auch wenn Sie normalerweise Lyft verwenden.
    • Ich bin eindeutig kein Experte, aber ich habe ein mentales Modell, das (aber nicht beschränkt auf) Bytes auf den physischen Medien, das Dateisystem selbst, Dateitabellen, Verzeichnistabellen, Partitionstabellen und wie sie irgendwie funktionieren Linux und Windows.
    • Ich bin eindeutig an eine Wand gestoßen, da ich weiß, was ich tun möchte, aber ich bin mir nicht sicher, was der nächste Schritt ist.
      • Es gibt einen fehlerhaften Verzeichnistabelleneintrag. Ich möchte es umbenennen und sicherstellen, dass es vollständig ist und den Spezifikationen entspricht.
  • 7zip ist erstaunlich. Probieren Sie es zuerst für im Grunde alles aus.

Im Idealfall wäre ich in der Lage, diesen Beitrag mit genau dem zu aktualisieren, welches Byte falsch ist und wie es behoben werden kann. Danke an Ali, Pete und Leandro, die mit mir gespielt haben!

Ihre Gedanken? (Wenn Sie es bis hierher geschafft haben, ist das verkürzte IMG der 32-GB-SD hier (500 MB), aber Sie müssen es möglicherweise mit Nullen auffüllen, um einige Tools wie es zu erstellen.

Oh, und hör dir https://hanselminutes.com/ an, denn das Interview war großartig und es ist jetzt online!

Sponsor: Haben Sie schon versucht, in Rider zu entwickeln? Diese schnelle und funktionsreiche plattformübergreifende IDE verbessert Ihren Code für .NET-, ASP.NET-, .NET Core-, Xamarin- und Unity-Anwendungen unter Windows, Mac und Linux.


Linux
  1. Kopieren Sie Dateien im Linux-Terminal

  2. Verschieben Sie Dateien im Linux-Terminal

  3. Installation des fehlenden mcrypt-Moduls für PHP 7.2

  4. PHP-FFMpeg:Mehrere Eingabedateien zulassen (Audio zum Video hinzufügen)

  5. Die Dateien auflisten, auf die ein Programm zugreift?

Untersuchen des Linux /proc-Dateisystems

So finden Sie Dateien mit dem fd-Befehl in Linux

Wie kann der Audioeingang immer das Webcam-Mikrofon sein?

15 fantastische Beispiele zur Manipulation von Audiodateien mit Sound eXchange (SoX)

Was ist der Zweck von cd ` (Backtick)?

Definition der TEXINPUTS-Variablen