So stellen Sie eine beschädigte (MP3?) Datei wieder her

So stellen Sie eine beschädigte (MP3?) Datei wieder her

Ich habe eine Datei erhalten beihttps://drive.google.com/file/d/10Fqr6Ipu2J8yKU_m3-EMzsVj7XeSYEdV/view?usp=sharingÖffnen Sie es vonhttps://hexed.it/zeigt, dass es sich wahrscheinlich um eine MP3-Datei handelt (basierend auf den ID3-Informationen am Ende der Datei). Die Aufgabe besteht darin, den Dateikopf so wiederherzustellen, dass wir sie öffnen können (vermutlich in einem Musikplayer). Für Hinweise wären wir sehr dankbar.

Mir fiel auf, dass der Dateikopf aus leeren Bytes bestand, also versuchte ich, die Startbytes aus einer funktionierenden MP3-Datei zu kopieren. Ich versuchte auch, die letzten paar Bytes mit lesbarem Text an den Anfang der Datei zu verschieben. Nichts davon funktionierte.

Antwort1

MP3-Dateienhabe nichtein obligatorischer Header; es handelt sich lediglich um eine Rohfolge von MPEG-Audio-Frames, wobei jeder Frame seinen eigenen 4-Byte-Mini-Header hat (A,B). Alles andere ist extra. (Sogar ID3-Tags und LAME-Header – beides viel spätere Hinzufügungen – werden als ungültige Frames getarnt, die die meisten Player mittlerweile zu ignorieren wissen.)

Darüber hinaus ist das Frame-Format selbstsynchronisierend – Sie können es an jedem beliebigen Punkt abschneiden, und ein Decoder ignoriert das unbrauchbare Halbbild am Anfang und sucht nach den Synchronisationsbits, 0xFFFum den Anfang des nächsten Frames zu finden. Das bedeutet, dass Sie buchstäblich jedes beliebige Stück einer MP3-Datei in einen Decoder werfen können und es sollte abgespielt werden; wenn dies nicht der Fall ist, handelt es sich höchstwahrscheinlich überhaupt nicht um eine MP3-Datei.

Ich würde daraus schließen, dass Ihre Datei kein MP3 ist; es ist etwas anderes, das das ID3-Tagging-Format verwendet (selten, aber nicht ungewöhnlich). Darüber hinaus sehen die Endbits Ihrer Datei nicht ausganzwie ein ID3-Tag – viele dieser 4-Buchstaben-Chunk-Identifikatoren beginnen nicht mit 'T', wie es für ID3v2 typisch wäre; sie sehen für mich eher aus wie das, was man in einemChunk-Formatwie zum BeispielAIFFoderWAV/RIFF(beide betten tatsächlich ID3-Tags ein!), aber nicht in MP3.

(Ja, ein ID3-Tag selbst ist auch ein Chunk-Format – MP3 als Ganzes ist das jedoch nicht, und darum geht es.)

Es gibt neben IFF und seinen AIFF-/RIFF-Derivaten noch zahlreiche andere getaggte/gechunkte Formate. Sowohl PNG als auch ISO BMFF (das für MP4-/HEIF-/AVIF-Dateien verwendet wird) sind vom Konzept her ähnlich, aber die in Ihrer Datei verwendeten spezifischen Chunk-Namen – LIST, INFO– sind eindeutig RIFF, das für verschiedene Windows-bezogene Formate verwendet wird: .wav für Audio, .avi für Video, .ani für animierte Mauszeiger usw. Ganz dataam Anfang befindet sich höchstwahrscheinlich auch ein Chunk-Tag.

Von diesen RIFF-Unterformaten wären die Abschnitte IART(Künstler), ICRD(Datum), IGNR(Genre), (eingebettetes ID3-Tag) typisch für eine WAV-Datei.id3␣Was fehlt, ist der Toplevel- RIFFBlock(und möglicherweise einen Teil des fmt␣Chunks), was die Player daran hindert, die Datei zu erkennen.

Der Offset 0x10 sieht im Vergleich zu einer anderen WAV-Datei wie der vollständige Inhalt des fmt␣Blocks aus, daher sollten die fehlenden ersten acht Bytes folgendermaßen aussehen:

00000000  52 49 46 46 __ __ __ __  57 41 56 45 66 6d 74 20  |RIFF____WAVEfmt |

…wobei der leere Teil die Länge des obersten Blocks ist (oder 0xFFFFFFFF, um einfach „die ganze Datei“ anzuzeigen). Die Gesamtstruktur sollte wie folgt aussehen:

RIFF[WAVE]
 ├─fmt␣   (PCM S16LE)
 ├─data   (~Never gonna give you up~)
 ├─LIST[INFO]
 │  ├─IART = "GCTF"
 │  ├─ICRD
 │  └─IGNR = "Drum & Bass"
 └─id3␣   (embedded ID3, not RIFF-format)
    ├─TPE1 = "GCTF"
    ├─TDRC
    └─TCON = "Drum & Bass"

Wenn Sie versuchen, den Header zu reparieren, verwenden Sie fqzur Überprüfung (was auch bei echten MP3-Dateien und anderen gängigen Formaten gut funktioniert):

$ fq . test.wav
$ fq .chunks[] test.wav
$ fq .chunks[2].chunks[] test.wav

Bildbeschreibung hier eingeben

Da Sie über den gesamten Block verfügen data, der die gesamten PCM-Daten enthält (mit einer Länge von 4 Byte), ist es möglicherweise einfacher, nur diesen Teil zu extrahieren und verschiedene Roh-PCM-Formate mit roher Gewalt auszuprobieren (es gibt nicht so viele Kombinationen).

verwandte Informationen