GNU/Linux >> Tutoriales Linux >  >> Linux

CSI:El caso de los archivos de audio WAV que faltan en la tarjeta SD FAT32

Abróchense el cinturón niños, ya que esto es un cuento. Como sabrán, tengo un podcast encantador en https://hanselminutes.com. Deberías escuchar.

Recientemente, a través de una serie de eventos aleatorios geniales, tuve la oportunidad de entrevistar al actor Chris Conner, que interpreta a Poe en Altered Carbon. Soy un gran admirador del programa, pero especialmente de Chris. Deberías ver el programa porque Poe es una alegría y Chris es dueño de cada escena, y eso es con un elenco MUY fuerte.

Por lo general, hago mis entrevistas de forma remota para el podcast, pero quería conocer a Chris y pasar el rato en persona, así que usé mi equipo de podcasting local, que consta de una grabadora Zoom H6.

Tengo dos micrófonos Shure XLR, un soporte de micrófono y el Zoom. El Zoom H6 es un caballo de batalla muy bueno y lo he usado muchas veces antes cuando grababa programas. No es una cirugía de cohetes, pero uno siempre debe probar sus cosas.

No quería arriesgarme a comprar un paquete de 5 tarjetas SD de 32 GIG de alta calidad. Puse uno nuevo en el Zoom, el Zoom reconoció inmediatamente la tarjeta SD, así que hice una grabación local allí mismo y la reproduje. Suena bien. Lo reproduje localmente en Zoom y pude escuchar la grabación del altavoz local de Zoom. Está grabando el archivo en estéreo, un lado para cada micrófono. Recuerda esto para más adelante.

Fui temprano a la reunión y preparé toda la configuración de grabación. Conecté un monitor local y probé de nuevo. Graba y reproduce localmente. Enfriar. Chris aparece, grabamos un espectáculo fantástico, está comprometido y ahora somos mejores amigos y vamos a Chipotle, charlas, ciencia ficción, actuación, inteligencia artificial, etc. Fue una tarde increíble.

Me dirijo a casa y saco la tarjeta SD y la pongo en la PC y veo esto. Casi vomito. Me mareo.

He estado grabando el programa durante más de 730 episodios durante 14 años y nunca he perdido un programa. Yo hago mi tarea, como deberías hacer tú. Estoy tambaleándome. Está bien, respira. Trabajemos el problema.

Haga clic derecho en la unidad, verifique las propiedades. Respirar. Esta es una unidad de 32 gigabits, pero Windows ve que usó 329 MB . 300 megas es el tamaño de un archivo WAV de dos canales de 30 minutos de duración. Lo sé porque he mirado archivos de 300 megas de los últimos cientos de programas. Al igual que puede saber aproximadamente el tamaño de un JPEG que hace su cámara. Es algo que sabes.

Tiempo de línea de comando. Muestra el directorio raíz. Vacío. Compruébalo de nuevo, pero "muestra todos los archivos", extraño, hay una carpeta de Mac allí, pero tal vez la tarjeta SD se haya formateado previamente en una Mac.

Punto interesante de la trama - No formateé la tarjeta SD. Lo uso tal como salió del empaque de Amazon. Venía preformateado y lo acepté. Lo probé y funcionó, pero no "instalé mi propia alfombra". Me mudé a la casa tal como está.

¿Qué tal una pequeña acción de "muéstrame todas las carpetas desde aquí hacia abajo"? Lo mismo que vi en el Explorador de Windows. La carpeta raíz tiene otra subcarpeta que es ella misma. ¡Es la carpeta "Inception" sin 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, la unidad cree que hay datos, pero no puedo verlos. Vuelvo a colocar la tarjeta SD en Zoom e intento reproducirla.

Zoom puede ver carpetas y archivos Y la entrevista misma. Y Zoom puede reproducirlo. El Zoom es un dispositivo integrado con una implementación del sistema de archivos FAT32 y puede leerlo, pero Windows no. ¿Puede Linux? ¿Puede una Mac?

Respuesta corta. No.

Nota secreta: Dado que Zoom puede ver y reproducir el archivo y tiene un conector para auriculares/monitor, siempre puedo conectar un cable de auriculares analógico de 1/8" a una entrada de 1/4" en mi mezcladora Peavy PV6 y rescatar el audio con algo de audio analógico. pérdida de calidad. ¿Por qué no uso la función de salida de audio USB del Zoom H6 y reproduzco el archivo a través de un cable digital? Porque el reproductor de audio Zoom no es compatible con eso. Admite tres modos:Lector de tarjetas SD (que es un paso a través de Windows y me muestra los directorios recursivos y no los archivos), un paso de audio que permite que Zoom parezca un dispositivo de audio para Windows pero no muestra el SD tarjeta como una unidad o permitir que la tarjeta SD se reproduzca a través de la interfaz digital, o su modo principal donde está grabando localmente.

Es hora de análisis forense, niños.

Tenemos una tarjeta SD 32, una unidad de disco por así decirlo, que tiene un formato FAT32 estándar, que tiene 300-400 megas de un archivo WAV de dos canales (Chris y yo teníamos dos micrófonos) que fue grabado localmente por el audio Zoom H6 reordenarlo y no quiero perderlo ni estropearlo.

Necesito tomar una imagen byte por byte de lo que hay en la tarjeta SD para poder pincharlo y "virtualmente" jugar con él, cambiarlo, arreglarlo, intentarlo de nuevo, sin cambiar el físico.

"dd" es una utilidad de línea de comandos con una rica historia que se remonta a 45 años. Aunque significa "Definición de datos", siempre será "unidad de disco" en mi cabeza.

Cómo clonar una unidad USB o una tarjeta SD en un archivo IMG en Windows

Tengo una copia de dd para Windows que me permite obtener un byte por flujo de bytes/archivo que representa esta tarjeta SD. Por ejemplo, podría obtener un dispositivo USD completo:

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

Necesito saber el número de disco duro y el número de partición como puede ver arriba. Usualmente uso diskpart para esto.

>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

Parece que es el Disco 8 Partición 1 en mi sistema. Consigámoslo todo antes de que entre en pánico.

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

IF y OF son archivos de entrada y de salida, y lo haré para todo el tamaño de la tarjeta SD. Sin embargo, es probable que sea una exageración, como veremos en un segundo.

Este archivo terminó siendo totalmente masivo y difícil de trabajar. ¿Recuerdas que solo necesitaba los primeros 400 megas? Cortaré solo esa parte.

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

¿Qué es esto? Recuerde que es una imagen de un sistema de archivos. Solo bytes en un archivo. No es un archivo WAV o ESTE archivo o AQUEL archivo. Quiero decir, lo es si decidimos que lo es, pero de hecho, una forma de pensarlo es que es un sobre destrozado que está oscuro cuando miro dentro. Tendremos que tantear y ver si podemos reconstruir una idea de cuáles son realmente los contenidos.

Importación de bytes sin procesar de un IMG a Audition o Audacity

Tanto Adobe Audition como Audacity son aplicaciones de audio que tienen la función "Importar datos RAW". Sin embargo, SÍ necesito decirle a Audition cómo interpretarlo. Hay muchos archivos WAV por ahí. ¿Cuántas simples había? ¿1 canal? 2 canales? 16 bits o 32 bits? Muchas preguntas.

¿Puedo simplemente importar esta matriz de bytes de 4 gigas de un sistema de archivos y obtener algo?

parece algo Puede ver que la primera parte es probablemente el inicio de la tabla de particiones, los encabezados del sistema de archivos, etc. antes de que aparezcan los datos de audio. Aquí está la importación como 2 canales.

Puedo escuchar voces pero suenan como ardillas listadas y no son comprensibles. Algo está "doblado". tasa de muestreo? No, lo verifiqué dos veces.

Aquí hay una importación de datos sin procesar de 1 canal, aunque creo que son dos.

Ahora ESTO es interesante. Puedo escuchar el audio a la velocidad normal de nosotros hablando (después del preámbulo) PERO es solo una sílaba a la vez, y luego se repite una versión más tranquila de la misma sílaba. No quiero (léase:realmente no puedo) volver a armar una entrevista de 30 minutos a partir de sílabas, ¿verdad?

¿Recuerdas cuando dije que Zoom H6 graba un archivo de dos canales con un canal por micrófono? Realmente no. Graba UN ARCHIVO POR CANAL. A lo que sea L.wav y a lo que sea R.wav. ¡Lo olvidé totalmente!

Este archivo de "un canal" de arriba son en realidad los bytes tal como se colocaron en el disco, ¿verdad? En realidad son dos archivos escritos simultáneamente , unos cuantos kilobytes a la vez, L,R,L,R,L,R. Y aquí le estoy diciendo a mi software de sonido que trate este "volcado del sistema de archivos byte por byte" como un solo archivo. Son dos que se hicieron al mismo tiempo.

Es como la mosca Brundle. ¿Cómo lo desarmo? Bueno, ya no puedo tratar la matriz como un archivo sin procesar, no lo es. Y quiero (realmente no tengo la energía todavía) escribir mi propia pequeña aplicación para desentrelazar esta imagen de manera efectiva. Tampoco sé si el tamaño del segmento es perfectamente confiable o si varía según lo registrado por Zoom.

NOTA: Pete Brown ha escrito sobre los archivos RIFF/WAV de los registros de Sound Devices que tienen un conjunto de bits FAT32 incorrecto. Esto no es eso, pero pertenece a la misma familia y vale la pena señalarlo si alguna vez tiene un problema con un archivo Broadcast Wave que se corrompe o se ve encriptado.

Para ayudarme a resolver este problema, Pete Brown tuiteó un volcado hexadecimal de la tabla de directorios para que pueda ver los directorios Zoom0001, Zoom0002, etc. en la imagen.

Permítanme pasar a Ubuntu en mi máquina con Windows que ejecuta WSL. Aquí puedo ejecutar fdisk y tener una idea de qué es esta imagen de la tarjeta SD defectuosa. Recuerde también que corté los primeros 0-400 Megas, pero este archivo IMG cree que es una unidad de 32 gigas, porque lo es. Es solo que se ha truncado agresivamente.

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

¿Tal vez pueda "montar" este IMG? Hago una carpeta en Ubuntu/WSL2 llamada ~/recovery. Vaya, está bien, no hay nada allí. Puedo tomar el tamaño del sector 512 veces el bloque de inicio de 8192 y usarlo como compensación.

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 piensa que quizás "reescribieron la definición de la estructura FAT32 y no usaron una biblioteca estándar y cometieron un error", y Leandro Pereria postula que "lo que podría pasar es que la suma de verificación LFN (nombre de archivo largo) no es válida y no No se moleste en completar el nombre de archivo 8.3... para que las implementaciones compatibles de VFAT intenten ver el nombre alternativo 8.3, son todos espacios y se da cuenta de que "todo es relleno, avance".

Ali sugirió ejecutar dosfsck en la imagen montada y puede ver nuevamente que los archivos están allí, pero ¿hay como 3 entradas raíz? Tenga en cuenta que hice un gato de /proc/mounts para ver el bucle en el que está montado mi img para poder consultarlo en el 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.

Podemos verlos, pero no acceder a ellos con el controlador del sistema de archivos vfat en Linux o Windows.

La utilidad DUMP.exe como parte de mtools para Windows es increíble, pero no puedo averiguar qué está mal en la tabla de archivos FAT32. Puedo ejecutar minfo en el comando de Linux diciéndole que omita 8192 sectores con el modificador @@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, ahora hemos encontrado OTRA forma de montar este sistema de archivos corrupto. Con mtools usaremos mdir para listar el directorio raíz. Tenga en cuenta que algo está tan mal que tengo que configurar mtools_skip_check=1 en ~/.mtoolsrc y continuar.

$ 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

Mismo resultado. Puedo ejecutar mdu y ver solo algunas carpetas. Tenga en cuenta que los ZOOMxxxx faltan aquí

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

Ahora, idealmente quiero lograr dos cosas aquí.

  • Sepa POR QUÉ está roto y exactamente QUÉ está mal.
    • Hay un directorio raíz sin nombre aquí y no tengo la paciencia ni la habilidad para realizar un volcado hexadecimal manual y parchearlo.
  • Podrá copiar los archivos "normalmente" montando la IMG y, bueno, copiándolos.

ACTUALIZACIÓN #1 - Estoy de vuelta después de unos minutos de pensar de nuevo.

Si uso mmls de Sleuthkit, puedo ver esto.

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

Si vuelvo a hacer el desplazamiento 512*8192 y visualizo la tabla FAT32 en Hexdump/xxd así:

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

Puedo ver que busqué el lugar correcto, ya que la cadena FAT32 simplemente está colgando. Tal vez pueda recortar esta tabla y visualizarla en una mejor herramienta gráfica.

Podría tomar un trozo razonable (léase:arbitrario) de este desplazamiento y ponerlo en un archivo manejable muy pequeño:

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

Y luego cárguelo en dump.exe en Windows, que es realmente una gran herramienta. Parece estar pensando que hay múltiples entradas FAT Root (que podría ser la razón por la que estoy viendo esta extraña raíz fantasma). Tenga en cuenta las partes "debería ser" también.

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 más confusa es que la firma FAT32:el número mágico siempre se supone que es 0x41615252. Googlea eso. Verás. Es una firma codificada pero tal vez tengo la compensación incorrecta y en ese momento todas las apuestas están canceladas.

Entonces, ¿tengo eso? Puedo buscar valores hexadecimales en un archivo binario con una combinación de xxd y grep. Tenga en cuenta el intercambio de bytes:

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

Justo antes de esto está 55 AA, que son los dos últimos bytes de la tabla de particiones de 64 bytes. mm

Ahora, ¿tengo dos bloques de información FAT32 y tres entradas raíz? Estoy perdido. Quiero volcar las entradas del directorio.

¿Qué dice fsstat sobre el directorio raíz?

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

Actualizaré esta parte a medida que aprenda más. Estoy agotado. Es probable que alguien lea esto y diga "tonto, busca AQUÍ" y está el byte que está mal en el sistema de archivos. Ese LFN (nombre de archivo largo) no tiene uno corto, etc." y luego lo sabré.

ACTUALIZACIÓN #2:

Hablé por skype con Ali y creemos que sabemos qué pasa. Me sugirió formatear la tarjeta SD, grabar los mismos 3 programas (dos WAV de prueba y uno real) y luego hacer una imagen del disco BUENO para eliminar las variables. chico inteligente!

Luego tomamos los primeros 12 megas de GOOD.img y BAD.img y los canalizamos a través de xxd hacia HEX, luego usamos Visual Studio Code para diferenciarlos.

Ahora podemos visualizar a la izquierda cómo se ve una buena estructura de directorios ya la derecha cómo se ve una mala. Parece que tengo dos directorios raíz recursivos con un espacio para el nombre.

Ahora, si quisiéramos, podríamos reescribir manualmente una nueva entrada de directorio completa y asignarle nuestros archivos huérfanos.

Eso es lo que haría si me contrataran para recuperar datos.

7comprime todas las cosas

Aquí es donde se pone raro y se volvió tan raro que tanto Pete Brown como yo dijimos, BUENO. ESO ES INCREÍBLE.

Por capricho, hice clic derecho en el archivo IMG, lo abrí en 7zip y vi esto.

¿Ves ese directorio que no es nada? ¿Un espacio? un algo No tiene nombre corto. Es una entrada inválida, pero 7zip está de acuerdo. Entremos. Mire el camino y el \\. Eso es un separador de caminos, nada, y otro separador de caminos. Eso no está permitido o está bien, pero de nuevo, 7zip es relajado.

¡Arrastré los archivos y están bien! El día está guardado.

¿La moral? Hay algunos que puedo ver.

  • Vuelve a formatear las tarjetas SD aleatorias que obtienes de Amazon específicamente en el dispositivo que vas a usar.
  • FAT como especificación tiene un montón de cosas que diferentes "controladores" (Windows, VFAT, etc.) pueden ignorar o eludir o simplemente no implementar.
  • Tengo el 85 % del conocimiento que necesito para espeleología de algo como esto, pero ese último 15 % es una pared de ladrillos. Necesitaría más paciencia y leer más sobre esto.
  • Saber cómo hacer esto es útil para cualquier ingeniero. Es el equivalente a saber cómo conducir una palanca de cambios en caso de emergencia, incluso si generalmente usa Lyft.
    • Claramente no soy un experto, pero tengo un modelo mental que incluye (pero no se limita a) bytes en los medios físicos, el sistema de archivos en sí, tablas de archivos, tablas de directorios, tablas de particiones, cómo funcionan en Linux y Windows.
    • Claramente me topé con una pared porque sé lo que quiero hacer, pero no estoy seguro del siguiente paso.
      • Hay una entrada de tabla de directorio incorrecta. Quiero cambiarle el nombre y asegurarme de que esté completo y según las especificaciones.
  • 7zip es increíble. Pruébalo primero para básicamente todo.

Idealmente, podría actualizar esta publicación con exactamente qué byte está mal y cómo solucionarlo. ¡Gracias a Ali, Pete y Leandro por jugar conmigo!

¿Tus pensamientos? (Si llegaste hasta aquí, la IMG truncada de la SD de 32 gigas está aquí (500 megas), pero es posible que tengas que rellenarla con ceros para que algunas herramientas les gusten.

¡Ah, y escucha https://hanselminutes.com/ porque la entrevista fue genial y ya está lista!

Patrocinador: ¿Ya intentaste desarrollar en Rider? Este IDE multiplataforma rápido y rico en funciones mejora su código para aplicaciones .NET, ASP.NET, .NET Core, Xamarin y Unity en Windows, Mac y Linux.


Linux
  1. Encuentra los archivos y directorios más grandes en Linux

  2. Listar los archivos a los que accede un programa?

  3. ¿Cómo imprimir el nombre de los archivos que faltan en una carpeta?

  4. ¿A dónde van los archivos cuando se emite el comando Rm?

  5. ¿Cuál es el propósito de cd ` (comilla grave)?

Cómo encontrar archivos con el comando fd en Linux

Obtener todos los archivos excepto los archivos en matriz:¿Bash?

¿Tubo a múltiples archivos en el Shell?

¿Cómo hacer que la entrada de audio sea siempre el micrófono de la cámara web?

15 impresionantes ejemplos para manipular archivos de audio usando Sound eXchange (SoX)

Definición de la variable TEXINPUTS