GNU/Linux >> Linux Esercitazione >  >> Linux

CSI:Il caso dei file audio WAV mancanti sulla scheda SD FAT32

Allacciate i bambini, perché questa è una favola. Come forse saprai, ho un delizioso podcast su https://hanselminutes.com. Dovresti ascoltare.

Recentemente, attraverso una serie di fantastici eventi casuali, ho avuto l'opportunità di intervistare l'attore Chris Conner che interpreta Poe in Altered Carbon. Sono un grande fan dello show, ma soprattutto Chris. Dovresti guardare lo spettacolo perché Poe è una gioia e Chris possiede ogni scena, e questo è con un cast MOLTO forte.

Di solito faccio le mie interviste a distanza per il podcast, ma volevo incontrare Chris e uscire di persona, quindi ho usato il mio impianto di podcasting locale che consiste in un registratore Zoom H6.

Ho due microfoni Shure XLR, un supporto per microfono e lo Zoom. Lo Zoom H6 è un ottimo cavallo di battaglia e l'ho usato molte volte prima durante la registrazione di spettacoli. Non è un intervento chirurgico a razzo, ma si dovrebbe sempre testare le proprie cose.

Non volevo correre il rischio di prendere una confezione da 5 di schede SD da 32GIG di alta qualità. Ne ho inserito uno nuovo nello Zoom, lo Zoom ha immediatamente riconosciuto la scheda SD, quindi ho fatto una registrazione locale proprio lì e l'ho riprodotta. Suona bene. L'ho riprodotto localmente sullo Zoom e ho potuto ascoltare la registrazione dall'altoparlante locale dello Zoom. Sta registrando il file in stereo, un lato per ogni microfono. Ricordalo per dopo.

Sono andato presto all'incontro e ho impostato l'intera configurazione della registrazione. Ho collegato un monitor locale e ho provato di nuovo. Registra e riproduce localmente. Freddo. Chris si presenta, abbiamo registrato uno spettacolo fantastico, è fidanzato e ora siamo migliori amici e andiamo a Chipotle, parliamo, fantascienza, recitazione, IA, ecc. Solo un pomeriggio assassino tutto intorno.

Torno a casa, estraggo la scheda SD e la inserisco nel PC e vedo questo. Quasi vomito. mi viene la testa leggera.

Ho registrato lo spettacolo per oltre 730 episodi in 14 anni e non ho mai perso uno spettacolo. Faccio i compiti, come dovresti. Sto vacillando. Ok, respira. Risolviamo il problema.

Fare clic con il pulsante destro del mouse sull'unità, controllare le proprietà. Respirare. Questa è un'unità da 32 GB, ma Windows vede che ha 329 MB utilizzati . 300 ish mega è la dimensione di un file WAV a due canali lungo 30 minuti. Lo so perché ho esaminato file da 300 mega negli ultimi centinaia di spettacoli. Proprio come potresti conoscere all'incirca le dimensioni di un JPEG che produce la tua fotocamera. È una cosa che sai.

Ora della riga di comando. Elenca la directory principale. Vuoto. Controllalo di nuovo ma "mostra tutti i file", strano, c'è una cartella Mac lì ma forse la scheda SD è stata preformattata su un Mac.

Punto interessante della trama - Non ho formattato la scheda SD. Lo uso appena uscito dalla confezione da Amazon. È arrivato preformattato e l'ho accettato. L'ho provato e ha funzionato ma non ho "installato il mio tappeto". Mi sono trasferito a casa così com'è.

Che ne dici di una piccola azione "mostrami tutte le cartelle da qui in basso"? Come ho visto in Esplora risorse. La cartella principale ha un'altra sottocartella che è essa stessa. È la cartella "Inception" senza 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, l'unità pensa che ci siano dati ma non riesco a vederli. Rimetto la scheda SD nello Zoom e provo a riprodurla.

Lo Zoom può vedere cartelle e file E l'intervista stessa. E lo Zoom può riprodurlo. Lo Zoom è un dispositivo incorporato con un'implementazione del file system FAT32 e può leggerlo, ma Windows no. Linux può? Può un Mac?

Risposta breve. No.

Nota hacker: Poiché lo Zoom può vedere e riprodurre il file e ha un jack per cuffie/monitor, potrei sempre collegare un cavo per cuffie analogico da 1/8" a un ingresso da 1/4" sul mio mixer Peavy PV6 e salvare l'audio con un po' di analogico perdita di qualità. Perché non uso la funzione di uscita audio USB dello Zoom H6 e non riproduco il file su un cavo digitale, chiedi? Perché il lettore audio Zoom non lo supporta. Supporta tre modalità:lettore di schede SD (che è un pass-through per Windows e mi mostra le directory ricorsive e nessun file), un pass-through audio che consente allo Zoom di sembrare un dispositivo audio per Windows ma non mostra la SD scheda come unità o consentire la riproduzione della scheda SD tramite l'interfaccia digitale o la sua modalità principale in cui sta registrando localmente.

È l'ora della scientifica, ragazzi.

Abbiamo una scheda SD da 32 - un'unità disco per così dire - che è formattata FAT32 standard, che ha 300-400 mega di un file WAV a due canali (Chris e io avevamo due microfoni) che è stato registrato localmente dall'audio Zoom H6 riordina e non voglio perderlo o rovinarlo.

Ho bisogno di prendere un'immagine byte per byte di ciò che è sulla scheda SD in modo da poterlo toccare e "praticamente" pasticciare con esso, cambiarlo, aggiustarlo, riprovare, senza cambiare il fisico.

"dd" è un'utilità da riga di comando con una storia ricca e ricca di storie che risale a 45 anni fa. Anche se significa "Definizione dei dati", sarà sempre "unità disco" nella mia testa.

Come clonare un'unità USB o una scheda SD in un file IMG su Windows

Ho una copia di dd per Windows che mi consente di ottenere un byte per flusso/file di byte che rappresenta questa scheda SD. Ad esempio, potrei ottenere un intero dispositivo USD:

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

Ho bisogno di conoscere il numero del disco rigido e il numero della partizione come puoi vedere sopra. Di solito uso diskpart per questo.

>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

Sembra che sia la partizione 1 del disco 8 sul mio sistema. Prendiamo tutto prima che vada nel panico.

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

IF e OF sono file di input e file di output e lo farò per l'intera dimensione della scheda SD. Probabilmente è eccessivo, come vedremo tra un secondo.

Questo file ha finito per essere totalmente enorme e difficile da lavorare. Ricordi che avevo bisogno solo dei primi 400 ish mega? Io taglierò solo quella parte.

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

Cos'è questo però? Ricorda che è un'immagine di un File System. Semplicemente byte in un file. Non è un file WAV o un file QUESTO o un file QUEL. Voglio dire, lo è se decidiamo che lo è, ma in realtà, un modo per pensarci è che è una busta maciullata che diventa scura quando ci guardo dentro. Dovremo sentirci in giro e vedere se riusciamo a ricostruire un senso di ciò che sono veramente i contenuti.

Importazione di byte grezzi da un IMG in Audition o Audacity

Sia Adobe Audition che Audacity sono app audio che hanno una funzione "Importa dati RAW". Tuttavia, devo dire ad Audition come interpretarlo. Ci sono molti file WAV là fuori. Quanti semplici c'erano? 1 canale? 2 canali? 16 bit o 32 bit? Molte domande.

Posso semplicemente importare questo array di byte da 4 giga di un file system e ottenere qualcosa?

Sembra qualcosa. Puoi vedere che la prima parte è probabilmente l'inizio della tabella delle partizioni, le intestazioni del file system, ecc. Prima che i dati audio vengano visualizzati. Stiamo importando come 2 canali.

Riesco a sentire delle voci ma suonano come scoiattoli e non sono comprensibili. Qualcosa è "raddoppiato". Frequenza di campionamento? No, l'ho ricontrollato.

Ecco l'importazione di dati grezzi di 1 canale anche se penso che siano due.

Ora QUESTO è interessante. Riesco a sentire l'audio a velocità normale mentre parliamo (dopo il preambolo) MA è solo una sillaba alla volta, e quindi una versione più silenziosa della stessa sillaba si ripete. Non voglio (leggi:non posso davvero) riassemblare un'intervista di 30 minuti dalle sillabe, giusto?

Ricordi quando ho detto che Zoom H6 registra un file a due canali con un canale per microfono? Non proprio. Registra UN FILE PER CANALE. Un qualunqueL.wav e un qualunqueR.wav. mi sono completamente dimenticato!

Questo file "un canale" sopra è in realtà i byte come sono stati depositati su disco, giusto? In realtà sono due file scritti simultaneamente , pochi kilobyte alla volta, L,R,L,R,L,R. E qui sto dicendo al mio software audio di trattare questo "byte per byte file system dump" come un file. Sono due che sono state fatte allo stesso tempo.

È come il Brundlefly. Come faccio a separarlo? Bene, non posso più trattare l'array come un file non elaborato, non lo è. E voglio (davvero non ho ancora l'energia) scrivere la mia piccola app per deinterlacciare efficacemente questa immagine. Inoltre non so se la dimensione del segmento sia perfettamente affidabile o se varia in base allo Zoom registrato.

NOTA: Pete Brown ha scritto di file RIFF/WAV da record Sound Devices con un set di bit FAT32 errato. Non è quello, ma appartiene alla stessa famiglia e vale la pena notare se si verifica un problema con un file Broadcast Wave che viene danneggiato o sembra crittografato.

Aiutandomi a risolvere questo problema, Pete Brown ha twittato un hexdump della Directory Table in modo da poter vedere le directory Zoom0001, Zoom0002, ecc. nell'immagine.

Fammi passare a Ubuntu sulla mia macchina Windows che esegue WSL. Qui posso eseguire fdisk e avere un'idea di cosa sia questa immagine della scheda SD difettosa. Ricorda anche che ho hackerato i primi 0-400 Mega, ma questo file IMG pensa che sia un'unità da 32 GB, perché lo è. È solo che è stato troncato in modo aggressivo.

$ 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)

Forse posso "montare" questo IMG? Creo una cartella su Ubuntu/WSL2 chiamata ~/recovery. Yikes, ok non c'è niente lì. Posso prendere la dimensione del settore 512 volte il blocco Start di 8192 e usarlo come offset.

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 pensa che forse "hanno riscritto la definizione della struttura FAT32 e non hanno utilizzato una libreria standard e hanno commesso un errore", e Leandro Pereria postula "quello che potrebbe accadere è che il checksum LFN (nome file lungo) non è valido e lo hanno fatto non preoccuparti di compilare il nome del file 8.3... in modo che le implementazioni conformi di VFAT provino a guardare il nome di fallback 8.3, sono tutti gli spazi e capiscono "è tutto padding, vai avanti".

Ali ha suggerito di eseguire dosfsck sull'immagine montata e puoi vedere di nuovo che i file ci sono, ma ci sono come 3 voci di root? Nota che ho eseguito un cat di /proc/mounts per vedere il ciclo su cui è montato il mio img in modo da poter fare riferimento ad esso nel comando dosfsck.

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

Possiamo vederli, ma non possiamo ottenerli con il driver del file system vfat su Linux o con Windows.

L'utility DUMP.exe come parte di mtools per Windows è incredibile ma non riesco a capire cosa c'è che non va nella tabella dei file FAT32. Posso eseguire minfo sulla terra dei comandi di Linux dicendogli di saltare 8192 settori con il modificatore @@offset:

$ 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, ora abbiamo trovato ancora UN ALTRO modo per montare questo file system danneggiato. Con mtools useremo mdir per elencare la directory principale. Nota che c'è qualcosa di abbastanza sbagliato che devo impostare mtools_skip_check=1 su ~/.mtoolsrc e continuare.

$ 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

Stesso risultato. Posso eseguire mdu e vedere solo alcune cartelle. Nota che qui mancano quelli ZOOMxxxx

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

Ora, idealmente voglio ottenere due cose qui.

  • Sapere PERCHÉ è rotto ed esattamente COSA è sbagliato.
    • C'è una directory radice senza nome qui e non ho la pazienza e l'abilità per eseguire manualmente l'hexdump e la patch.
  • Potete copiare i file "normalmente" montando l'IMG e, beh, copiandoli.

AGGIORNAMENTO N. 1 - Sono tornato dopo qualche minuto di ripensamento.

Se uso mmls da Sleuthkit, posso vederlo.

$ 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)

Se eseguo nuovamente l'offset 512*8192 e visualizzo la tabella FAT32 in Hexdump/xxd in questo modo:

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

Vedo che ho cercato il posto giusto, dato che la stringa FAT32 è appena uscita. Forse posso ritagliare questa tabella e visualizzarla in uno strumento grafico migliore.

Potrei prendere un pezzo ragionevole (leggi:arbitrario) da questo offset e inserirlo in un file gestibile molto piccolo:

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

E poi caricalo in dump.exe su Windows, che è davvero uno strumento eccezionale. Sembra pensare che ci siano più voci di radice FAT (che potrebbe essere il motivo per cui vedo questa strana radice fantasma). Nota anche le parti "dovrebbero essere".

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

La parte più confusa è che la firma FAT32:il numero magico dovrebbe sempre essere 0x41615252. Google quello. Vedrai. È una firma codificata, ma forse ho sbagliato offset ea quel punto tutte le scommesse sono annullate.

Quindi ce l'ho? Posso cercare in un file binario valori esadecimali con una combinazione di xxd e grep. Nota lo scambio di byte:

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

Poco prima c'è 55 AA che sono gli ultimi due byte della tabella delle partizioni da 64 byte. mm

Ora ho due blocchi di informazioni FAT32 e tre voci di root? Mi sono perso. Voglio scaricare le voci della directory.

Cosa dice fsstat sulla directory principale?

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

Aggiornerò questa parte man mano che imparo di più. Sono esausto. Qualcuno probabilmente leggerà questo e dirà "idiota, cerca QUI" e c'è il byte che è sbagliato nel file system. Quel LFN (nome file lungo) non ne ha uno corto, ecc." e poi lo saprò.

AGGIORNAMENTO N. 2:

Ho telefonato con Ali e pensiamo di sapere cosa sta succedendo. Mi ha suggerito di formattare la scheda SD, registrare gli stessi 3 spettacoli (due WAV di prova e uno effettivo) e quindi creare un'immagine del disco BUONO per rimuovere le variabili. Ragazzo intelligente!

Abbiamo quindi preso i primi 12 mega circa di GOOD.img e BAD.img e li abbiamo inviati tramite pipe tramite xxd in HEX, quindi abbiamo utilizzato Visual Studio Code per differenziarli.

Ora possiamo visualizzare a sinistra come appare una buona struttura di directory ea destra come appare una cattiva struttura. Sembra che io abbia due directory radice ricorsive con uno spazio per il nome.

Ora, se volessimo, potremmo riscrivere manualmente una nuova voce di directory completa e assegnarvi i nostri file orfani.

È quello che farei se fossi assunto per recuperare i dati.

7comprimi tutte le cose

Qui è dove diventa strano ed è diventato così strano che sia io che Pete Brown abbiamo pensato, BENE. È INCREDIBILE.

Per capriccio ho fatto clic con il pulsante destro del mouse sul file IMG e l'ho aperto in 7zip e ho visto questo.

Vedi quella directory lì che non è niente? Uno spazio? Un qualcosa. Non ha un nome breve. È una voce non valida ma 7zip va bene con esso. Entriamo. Guarda il percorso e il \\. Questo è un separatore di percorso, niente e un altro separatore di percorso. Questo non è consentito o OK, ma ancora una volta, 7zip è tranquillo.

Ho trascinato fuori i file e vanno bene! Il giorno è salvato.

La morale? Ce ne sono alcuni che posso vedere.

  • Riformatta le schede SD casuali che ricevi da Amazon in modo specifico sul dispositivo su cui le utilizzerai.
  • FAT come specifica ha un sacco di cose che diversi "driver" (Windows, VFAT, ecc.) possono ignorare o elidere o semplicemente non implementare.
  • Ho l'85% delle conoscenze di cui ho bisogno per scrivere qualcosa di simile, ma l'ultimo 15% è un muro di mattoni. Avrei bisogno di più pazienza e di leggere di più su questo.
  • Sapere come farlo è utile per qualsiasi ingegnere. È l'equivalente di sapere come guidare un cambio manuale in caso di emergenza anche se di solito usi Lyft.
    • Chiaramente non sono un esperto ma ho un modello mentale che include (ma non limitato a) byte sul supporto fisico, il file system stesso, tabelle di file, tabelle di directory, tabelle di partizione, come funzionano Linux e Windows.
    • Ho chiaramente colpito un muro perché so cosa voglio fare ma non sono sicuro del prossimo passo.
      • C'è una voce tabella directory errata. Voglio rinominarlo e assicurarmi che sia completo e conforme alle specifiche.
  • 7zip è fantastico. Provalo prima praticamente per tutto.

Idealmente sarei in grado di aggiornare questo post esattamente con quale byte è sbagliato e come risolverlo. Grazie ad Ali, Pete e Leandro per aver giocato con me!

I vostri pensieri? (Se sei arrivato così lontano, l'IMG troncato della SD da 32 giga è qui (500 mega) ma potresti doverlo riempire con zeri per creare alcuni strumenti come questo.

Oh, e ascolta https://hanselminutes.com/ perché l'intervista è stata fantastica e ora è finita!

Sponsor: Hai già provato a sviluppare in Rider? Questo IDE multipiattaforma veloce e ricco di funzionalità migliora il codice per le applicazioni .NET, ASP.NET, .NET Core, Xamarin e Unity su Windows, Mac e Linux.


Linux
  1. Copia i file nel terminale Linux

  2. Sposta i file nel terminale Linux

  3. Trova i file e le directory più grandi in Linux

  4. Installazione del modulo mcrypt mancante per PHP 7.2

  5. 5 modi per usare il comando move in Linux

Esplorazione del filesystem Linux /proc

Come trovare file con il comando fd in Linux

Come stampare il nome dei file mancanti in una cartella?

15 fantastici esempi per manipolare file audio utilizzando Sound eXchange (SoX)

Qual è lo scopo di cd ` (backtick)?

Definizione della variabile TEXINPUTS