GNU/Linux >> Belajar Linux >  >> Linux

CSI:Kasus file audio WAV yang hilang pada Kartu SD FAT32

Kencangkan anak-anak, karena ini adalah dongeng. Seperti yang Anda ketahui, saya memiliki podcast yang bagus di https://hanselminutes.com. Anda harus mendengarkan.

Baru-baru ini melalui sejumlah acara acak super keren saya mendapat kesempatan untuk mewawancarai aktor Chris Conner yang memerankan Poe di Altered Carbon. Saya penggemar berat acara itu, tetapi terutama Chris. Anda harus menonton pertunjukan karena Poe menyenangkan dan Chris memiliki setiap adegan, dan itu dengan pemeran yang SANGAT kuat.

Saya biasanya melakukan wawancara jarak jauh untuk podcast, tetapi saya ingin bertemu Chris dan bertemu langsung, jadi saya menggunakan perangkat podcasting lokal saya yang terdiri dari perekam Zoom H6.

Saya memiliki dua mikrofon Shure XLR, dudukan Mic, dan Zoom. Zoom H6 adalah pekerja keras yang sangat baik dan saya telah menggunakannya berkali-kali sebelumnya saat merekam acara. Ini bukan operasi roket tetapi orang harus selalu menguji barang-barang mereka.

Saya tidak ingin mengambil risiko untuk mengambil 5 pak Kartu SD 32GIG berkualitas tinggi. Saya memasang yang baru di Zoom, Zoom segera mengenali Kartu SD jadi saya melakukan rekaman lokal di sana dan memutarnya kembali. Kedengarannya bagus. Saya memutarnya secara lokal di Zoom dan saya bisa mendengar rekaman dari speaker lokal Zoom. Ini merekam file dalam stereo, satu sisi untuk setiap mikrofon. Ingat ini untuk nanti.

Saya pergi lebih awal ke pertemuan dan mengatur seluruh pengaturan rekaman. Saya menghubungkan monitor lokal dan menguji lagi. Rekam dan putar ulang secara lokal. Dingin. Chris muncul, kami merekam pertunjukan yang fantastis, dia bertunangan dan kami sekarang menjadi sahabat dan kami pergi ke Chipotle, toko bincang-bincang, Sci-fi, akting, AI, dll. Hanya sore yang mematikan.

Saya pulang ke rumah dan mengeluarkan Kartu SD dan memasukkannya ke PC dan saya melihat ini. Aku hampir muntah. Aku pusing.

Saya telah merekam pertunjukan selama lebih dari 730 episode selama 14 tahun dan saya tidak pernah kehilangan pertunjukan. Saya melakukan pekerjaan rumah saya - seperti yang seharusnya Anda lakukan. Aku terguncang. Oke, bernapas. Ayo selesaikan masalahnya.

Klik kanan drive, periksa properti. Bernapas. Ini adalah drive 32 gig, tetapi Windows melihat bahwa itu digunakan 329 MB . 300ish MB adalah ukuran file WAV dua saluran berdurasi 30 menit. Saya tahu ini karena saya telah melihat file 300 mcg untuk beberapa ratus pertunjukan terakhir. Sama seperti Anda mungkin tahu kira-kira ukuran JPEG yang dibuat kamera Anda. Itu hal yang Anda tahu.

Waktu baris perintah. Daftar direktori root. Kosong. Periksa lagi tapi "tampilkan semua file," aneh, ada folder Mac di sana tapi mungkin Kartu SD sudah diformat sebelumnya di Mac.

Poin Plot Menarik - Saya tidak memformat kartu SD. Saya menggunakannya karena keluar dari kemasan dari Amazon. Itu sudah diformat sebelumnya dan saya menerimanya. Saya mengujinya dan berhasil tetapi saya tidak "memasang karpet saya sendiri." Saya pindah ke rumah apa adanya.

Bagaimana dengan tindakan kecil "tunjukkan semua folder dari sini ke bawah"? Sama seperti yang saya lihat di Windows Explorer. Folder root memiliki subfolder lain yang merupakan dirinya sendiri. Ini folder "Inception" tanpa 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

Oke, drive mengira ada data tapi saya tidak bisa melihatnya. Saya memasukkan kembali kartu SD ke Zoom dan mencoba memutarnya kembali.

Zoom dapat melihat folder dan file DAN wawancara itu sendiri. Dan Zoom dapat memutarnya kembali. Zoom adalah perangkat tertanam dengan implementasi sistem file FAT32 dan dapat membacanya, tetapi Windows tidak bisa. Linuxnya bisa? Bisa untuk Mac?

Jawaban singkat. Tidak.

Catatan Peretasan: Karena Zoom dapat melihat dan memutar file dan memiliki jack headphone/monitor, saya selalu dapat mencolokkan kabel headphone analog 1/8" ke input 1/4" pada Peavy PV6 Mixer saya dan menyelamatkan audio dengan beberapa analog kehilangan kualitas. Mengapa saya tidak menggunakan fitur USB Audio out dari Zoom H6 dan memutar file kembali melalui kabel digital, Anda bertanya? Karena pemutar audio Zoom tidak mendukung itu. Ini mendukung tiga mode - Pembaca Kartu SD (yang merupakan akses ke Windows dan menunjukkan kepada saya direktori rekursif dan tidak ada file), pass-through Audio yang memungkinkan Zoom terlihat seperti perangkat audio ke Windows tetapi tidak menunjukkan SD kartu sebagai drive atau memungkinkan Kartu SD untuk diputar ulang melalui antarmuka digital, atau mode utamanya di mana ia merekam secara lokal.

Saatnya Forensik, Anak-Anak.

Kami memiliki Kartu SD 32 - disk drive seperti itu - yang diformat FAT32 standar, yang memiliki 300-400 MB file WAV dua saluran (Chris dan saya memiliki dua mikrofon) yang direkam secara lokal oleh audio Zoom H6 menyusun ulang dan saya tidak ingin terlalu kehilangan atau mengacaukannya.

Saya perlu mengambil gambar byte demi byte dari apa yang ada di Kartu SD sehingga saya dapat menyodok dan "hampir" mengacaukannya, mengubahnya, memperbaikinya, coba lagi, tanpa mengubah fisiknya.

"dd" adalah utilitas baris perintah dengan sejarah yang kaya dan bertingkat kembali 45 tahun. Meskipun itu berarti "Definisi Data" itu akan selalu menjadi "disk drive" di kepalaku.

Cara mengkloning Drive USB atau Kartu SD ke file IMG di Windows

Saya memiliki salinan dd untuk Windows yang memungkinkan saya mendapatkan byte untuk aliran byte/file yang mewakili Kartu SD ini. Misalnya saya bisa mendapatkan seluruh perangkat USD:

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

Saya perlu mengetahui nomor Harddisk dan nomor Partisi seperti yang Anda lihat di atas. Saya biasanya menggunakan diskpart untuk ini.

>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

Sepertinya itu Disk 8 Partition 1 di sistem saya. Ayo dapatkan semuanya sebelum saya panik.

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

IF dan OF adalah file input dan file output, dan saya akan melakukannya untuk seluruh ukuran SD Card. Ini mungkin berlebihan, seperti yang akan kita lihat sebentar lagi.

File ini akhirnya menjadi sangat besar dan sulit untuk dikerjakan. Ingat saya hanya membutuhkan 400 MB pertama? Saya akan memotong bagian itu saja.

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

Apa ini? Ingat itu adalah gambar dari Sistem File. Itu hanya byte dalam file. Ini bukan file WAV atau file INI atau file ITU. Maksud saya, itu jika kita memutuskannya, tetapi sebenarnya, cara untuk memikirkannya adalah bahwa itu adalah amplop yang hancur yang gelap ketika saya mengintip ke dalamnya. Kita harus meraba-raba dan melihat apakah kita dapat membangun kembali perasaan tentang apa isinya sebenarnya.

Mengimpor Raw Byte dari IMG ke Audition atau Audacity

Baik Adobe Audition dan Audacity adalah aplikasi audio yang memiliki fitur "Impor Data RAW". Namun, saya perlu memberi tahu Audition bagaimana menafsirkannya. Ada banyak file WAV di luar sana. Ada berapa hal sederhana? 1 saluran? 2 saluran? 16bit atau 32bit? Banyak pertanyaan.

Bisakah saya mengimpor array 4 gigbyte dari sistem file ini dan mendapatkan sesuatu?

Sepertinya sesuatu. Anda dapat melihat bahwa bagian pertama kemungkinan dimulainya tabel partisi, header sistem file, dll. sebelum data audio muncul. Ini mengimpor sebagai 2 saluran.

Saya dapat mendengar suara-suara tetapi mereka terdengar seperti tupai dan tidak dapat dimengerti. Ada yang "digandakan". Tingkat sampel? Tidak, saya memeriksanya dua kali.

Ini 1 channel raw data import padahal menurut saya itu dua.

Sekarang INI menarik. Saya dapat mendengar audio dengan kecepatan normal saat kami berbicara (setelah pembukaan) TAPI itu hanya suku kata pada satu waktu, dan kemudian versi yang lebih tenang dari pengulangan suku kata yang sama. Saya tidak ingin (baca:tidak bisa) menyusun kembali wawancara 30 menit dari suku kata, bukan?

Ingat ketika saya mengatakan bahwa Zoom H6 merekam file dua saluran dengan satu saluran per mikrofon? Tidak terlalu. Ini mencatat SATU FILE PER CHANNEL. Sebuah apapunL.wav dan apapunR.wav. Aku benar-benar lupa!

File "satu saluran" di atas sebenarnya adalah byte saat diletakkan di disk, bukan? Ini sebenarnya dua file ditulis secara bersamaan , beberapa kilobyte sekaligus, L,R,L,R,L,R. Dan di sini saya memberi tahu perangkat lunak suara saya untuk memperlakukan "byte for byte file system dump" ini sebagai satu file. Itu dua yang dibuat pada saat yang bersamaan.

Ini seperti si Brundlefly. Bagaimana cara memisahkannya? Yah saya tidak bisa memperlakukan array sebagai file mentah lagi, bukan. Dan saya ingin (benar-benar belum punya energi) untuk menulis aplikasi kecil saya sendiri untuk secara efektif memisahkan gambar ini. Saya juga tidak tahu apakah ukuran segmen benar-benar dapat diandalkan atau apakah itu bervariasi seperti yang direkam Zoom.

CATATAN: Pete Brown telah menulis tentang file RIFF/WAV dari rekaman Perangkat Suara yang memiliki set bit FAT32 yang salah. Ini bukan itu, tetapi berada dalam keluarga yang sama dan perlu diperhatikan jika Anda pernah memiliki masalah dengan File Gelombang Siaran yang rusak atau terlihat terenkripsi.

Selama membantu saya mengatasi masalah ini, Pete Brown men-tweet hexdump dari Tabel Direktori sehingga Anda dapat melihat direktori Zoom0001, Zoom0002, dll di dalam gambar.

Biarkan saya pindah ke Ubuntu di mesin Windows saya yang menjalankan WSL. Di sini saya dapat menjalankan fdisk dan memahami apa Gambar Kartu SD yang buruk ini. Ingat juga bahwa saya meretas 0-400 Meg pertama tetapi file IMG ini menganggapnya sebagai drive 32gig, karena memang demikian. Hanya saja dipotong secara agresif.

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

Mungkin saya bisa "me-mount" IMG ini? Saya membuat folder di Ubuntu/WSL2 bernama ~/recovery. Astaga, ok tidak ada apa-apa di sana. Saya dapat mengambil ukuran sektor 512 kali blok Start dari 8192 dan menggunakannya sebagai 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 berpikir mungkin "mereka menulis ulang definisi struktur FAT32 dan tidak menggunakan pustaka standar dan membuat kesalahan," dan Leandro Pereria mendalilkan "apa yang bisa terjadi adalah checksum LFN (nama file panjang) tidak valid dan mereka tidak melakukannya. jangan repot-repot mengisi nama file 8.3... sehingga implementasi VFAT yang sesuai mencoba melihat nama fallback 8.3, itu semua spasi dan mencari tahu "semuanya padding, lanjutkan."

Ali menyarankan untuk menjalankan dosfsck pada gambar yang dipasang dan Anda dapat melihat lagi bahwa file-file itu ada di sana, tetapi ada 3 entri root? Catatan Saya telah melakukan cat of /proc/mounts untuk melihat loop tempat img saya dipasang sehingga saya dapat merujuknya ke perintah 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.

Kita dapat melihatnya, tetapi tidak dapat mengaksesnya dengan driver sistem file vfat di Linux atau dengan Windows.

Utilitas DUMP.exe sebagai bagian dari mtools untuk Windows luar biasa tetapi saya tidak dapat menemukan apa yang salah dalam tabel file FAT32. Saya dapat menjalankan minfo di tanah perintah Linux yang menyuruhnya untuk melewati 8192 sektor dengan pengubah @@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, sekarang kami telah menemukan cara LAIN untuk memasang sistem file yang rusak ini. Dengan mtools kita akan menggunakan mdir untuk membuat daftar direktori root. Perhatikan ada sesuatu yang cukup salah sehingga saya harus menyetel mtools_skip_check=1 ke ~/.mtoolsrc dan melanjutkan.

$ 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

Hasil yang sama. Saya dapat menjalankan mdu dan hanya melihat beberapa folder. Perhatikan yang ZOOMxxxx tidak ada di sini

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

Sekarang, idealnya saya ingin mencapai dua hal di sini.

  • Tahu MENGAPA itu rusak dan APA yang salah.
    • Ada direktori root tanpa nama di sini dan saya tidak memiliki kesabaran dan keterampilan untuk melakukan hexdump dan menambalnya secara manual.
  • Dapat menyalin file "secara normal" dengan memasang IMG dan, yah, menyalinnya.

PERBARUI #1 - Aku kembali setelah beberapa menit berpikir lagi.

Jika saya menggunakan mmls dari Sleuthkit, saya bisa melihat ini.

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

Jika saya melakukan offset 512*8192 lagi dan memvisualisasikan tabel FAT32 di Hexdump/xxd seperti ini:

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

Saya dapat melihat bahwa saya mencari di tempat yang tepat, karena string FAT32 baru saja keluar. Mungkin saya dapat memotong tabel ini dan memvisualisasikannya dalam alat grafis yang lebih baik.

Saya dapat mengambil potongan yang masuk akal (baca:arbitrer) dari offset ini dan memasukkannya ke dalam file kecil yang dapat dikelola:

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

Dan kemudian memuatnya di dump.exe di Windows yang benar-benar alat yang hebat. Tampaknya berpikir berpikir ada beberapa Entri Root FAT (yang mungkin mengapa saya melihat root hantu aneh ini). Perhatikan juga bagian "seharusnya".

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

Bagian yang paling membingungkan adalah tanda tangan FAT32 - angka ajaib selalu seharusnya 0x41615252. Google itu. Anda akan melihat. Ini adalah tanda tangan yang dikodekan, tetapi mungkin saya memiliki offset yang salah dan pada saat itu semua taruhan dibatalkan.

Jadi apakah saya memiliki itu? Saya dapat mencari file biner untuk nilai Hex dengan kombo xxd dan grep. Perhatikan pertukaran 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............

Tepat sebelum ini adalah 55 AA yang merupakan dua byte terakhir dari tabel partisi 64 byte. mm

Sekarang apakah saya memiliki dua blok info FAT32 dan tiga Entri Root? Saya tersesat. Saya ingin membuang entri direktori.

Apa yang fsstat katakan tentang Direktori Root?

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

Saya akan memperbarui bagian ini saat saya mempelajari lebih lanjut. Aku lelah. Seseorang kemungkinan akan membaca ini dan menjadi seperti "Anda bodoh, cari DI SINI" dan ada byte yang salah di sistem file. LFN (nama file panjang) itu tidak ada yang pendek, dll" dan kemudian saya akan tahu.

PEMBARUAN #2:

Saya skyped dengan Ali dan kami pikir kami tahu apa yang terjadi. Dia menyarankan saya memformat Kartu SD, merekam 3 pertunjukan yang sama (dua WAV uji dan satu yang sebenarnya) dan kemudian membuat gambar disk BAIK untuk menghapus variabel. Orang pintar!

Kami kemudian mengambil sekitar 12 MB pertama dari GOOD.img dan BAD.img dan menyalurkannya melalui xxd ke HEX, kemudian menggunakan Visual Studio Code untuk membedakannya.

Kita sekarang dapat memvisualisasikan di sebelah kiri seperti apa struktur direktori yang baik dan di sebelah kanan seperti apa yang buruk. Sepertinya saya memiliki dua direktori root rekursif dengan spasi untuk namanya.

Sekarang jika kita mau, kita dapat secara manual menulis ulang entri direktori baru yang lengkap dan menetapkan file yatim piatu kita ke dalamnya.

Itulah yang akan saya lakukan jika saya dipekerjakan untuk memulihkan data.

7zip semuanya

Di sinilah itu menjadi aneh dan menjadi sangat aneh sehingga Pete Brown dan saya seperti, BAIK. LUAR BIASA.

Tiba-tiba saya mengklik kanan file IMG dan membukanya di 7zip dan melihat ini.

Lihat direktori di sana itu bukan apa-apa? Sebuah ruang? Sebuah sesuatu. Tidak memiliki Nama Singkat. Ini entri yang tidak valid tetapi 7zip keren dengan itu. Ayo masuk. Perhatikan jalur dan \\nya. Itu adalah pemisah jalur, bukan apa-apa, dan pemisah jalur lainnya. Itu tidak diperbolehkan atau OK tapi sekali lagi, 7zip keren.

Saya menyeret file keluar dan mereka baik-baik saja! Hari ini disimpan.

Moralnya? Ada beberapa yang bisa saya lihat.

  • Format ulang kartu SD acak yang Anda dapatkan dari Amazon khususnya di perangkat yang akan Anda gunakan.
  • FAT sebagai spesifikasi memiliki banyak hal yang "driver" berbeda (Windows, VFAT, dll) dapat mengabaikan atau menghindari atau tidak mengimplementasikannya.
  • Saya memiliki 85% pengetahuan yang saya perlukan untuk spelunk sesuatu seperti ini tapi 15% terakhir adalah dinding bata. Saya akan membutuhkan lebih banyak kesabaran dan untuk membaca lebih lanjut tentang ini.
  • Mengetahui cara melakukan ini berguna bagi insinyur mana pun. Ini setara dengan mengetahui cara mengemudikan tongkat persneling dalam keadaan darurat bahkan jika Anda biasanya menggunakan Lyft.
    • Saya jelas bukan ahli tetapi saya memiliki model mental yang mencakup (tetapi tidak terbatas pada) byte pada media fisik, sistem file itu sendiri, tabel file, tabel direktori, tabel partisi, cara kerjanya Linux dan Windows.
    • Saya jelas menabrak dinding karena saya tahu apa yang ingin saya lakukan tetapi saya tidak yakin langkah selanjutnya.
      • Ada Entri Tabel Direktori yang buruk. Saya ingin mengganti namanya dan memastikannya lengkap dan sesuai spesifikasi.
  • 7zip luar biasa. Coba dulu untuk dasarnya semuanya.

Idealnya saya dapat memperbarui posting ini dengan byte apa yang salah dan bagaimana cara memperbaikinya. Terima kasih kepada Ali, Pete, dan Leandro karena telah bermain dengan saya!

pikiran Anda? (Jika Anda berhasil sejauh ini, IMG yang terpotong dari 32 gig SD ada di sini (500 MB) tetapi Anda mungkin harus menambahkannya dengan nol untuk membuat beberapa alat seperti itu.

Oh, dan dengarkan https://hanselminutes.com/ karena wawancaranya bagus dan selesai sekarang!

Sponsor: Sudahkah Anda mencoba mengembangkan di Rider? IDE lintas platform yang cepat dan kaya fitur ini meningkatkan kode Anda untuk aplikasi .NET, ASP.NET, .NET Core, Xamarin, dan Unity di Windows, Mac, dan Linux.


Linux
  1. Menjelajahi sistem file Linux /proc

  2. Temukan file dan direktori terbesar di Linux

  3. Menginstal modul mcrypt yang hilang untuk PHP 7.2

  1. 5 cara menggunakan perintah pindah di Linux

  2. Daftar File yang Diakses Oleh Program?

  3. Bagaimana Cara Mencetak Nama File Yang Hilang Dalam Folder?

  1. PHP-FFMpeg:Izinkan beberapa file input (Tambahkan audio ke video)

  2. Ke Mana File Pergi Saat Perintah Rm Dikeluarkan?

  3. Bagaimana Input Audio Selalu Menjadi Mikrofon Webcam?