%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B3%B5%EC%9B%90%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나에게 파일이 주어졌다.https://drive.google.com/file/d/10Fqr6Ipu2J8yKU_m3-EMzsVj7XeSYEdV/view?usp=sharing. 다음에서 열기https://hexed.it/(파일 끝에 있는 ID3 정보를 기반으로) mp3 파일일 가능성이 있음을 보여줍니다. 작업은 파일 헤더를 복원하여 (아마도 음악 플레이어에서) 열 수 있도록 하는 것입니다. 어떤 단서도 주시면 감사하겠습니다.
파일 헤더가 빈 바이트인 것을 확인하고 작동 중인 mp3 파일에서 시작 바이트를 복사해 보았습니다. 또한 읽을 수 있는 텍스트가 포함된 마지막 몇 바이트를 파일 시작 부분으로 이동해 보았습니다. 둘 다 작동하지 않았습니다.
답변1
MP3 파일이 없습니다필수 헤더 이는 MPEG 오디오 프레임의 원시 시리즈일 뿐이며 각 프레임에는 자체 4바이트 미니 헤더(ㅏ,비). 다른 모든 것은 추가 사항입니다. (나중에 추가된 ID3 태그와 LAME 헤더도 현재 대부분의 플레이어가 무시할 수 있는 유효하지 않은 프레임으로 위장되어 있습니다.)
또한 프레임 형식은 자체 동기화됩니다. 언제든지 잘라낼 수 있으며 디코더는 시작 부분의 가비지 하프 프레임을 무시하고 0xFFF
다음 프레임의 시작을 찾기 위해 동기화 비트를 찾습니다. 이는 문자 그대로 MP3 파일의 임의의 조각을 디코더에 던질 수 있고 재생되어야 함을 의미합니다. 그렇지 않다면 MP3 파일이 아닐 가능성이 높습니다.
나는 귀하의 파일이 MP3가 아니라고 결론을 내릴 것입니다. ID3 태깅 형식을 사용하는 다른 것입니다(드물지만 특이한 것은 아닙니다). 게다가 파일의 끝 부분이 보이지 않습니다.상당히ID3 태그와 같습니다. 4자로 된 청크 식별자 중 다수는 ID3v2에서 일반적으로 사용되는 'T'로 시작하지 않습니다. 그들은 내가 보기에 당신이 책에서 찾을 수 있는 것과 더 비슷해 보입니다.청크 형식~와 같은AIFF또는WAV/리프(실제로 둘 다 ID3 태그가 포함되어 있습니다!) MP3에는 포함되어 있지 않습니다.
(그렇습니다. ID3 태그 자체도 청크 형식이지만 MP3 전체는 그렇지 않다는 것이 요점입니다.)
IFF 및 AIFF/RIFF 파생 형식 외에도 태그가 지정된/청크 형식이 꽤 많이 있습니다. 예를 들어 PNG와 ISO BMFF(MP4/HEIF/AVIF 파일에 사용됨)는 개념상 유사하지만 IFF에서 사용되는 특정 청크 이름은 귀하의 파일 – LIST
, INFO
–은 다양한 Windows 관련 형식(오디오용 .wav, 비디오용 .avi, 애니메이션 마우스 커서용 .ani 등)에 사용되는 고유한 RIFF입니다. 맨 data
처음 부분 근처도 청크 태그일 가능성이 높습니다. .
이러한 RIFF 하위 형식 중에서 IART
(아티스트), ICRD
(날짜), IGNR
(장르), id3␣
(내장된 ID3 태그) 청크가 WAV 파일의 일반적인 형태입니다.누락된 것은 최상위 RIFF
청크 입니다.(아마도 fmt␣
청크의 일부일 수도 있음) 플레이어가 파일을 인식하지 못하게 됩니다.
오프셋 0x10은 다른 .wav 파일과 비교할 때 청크의 전체 내용처럼 보이므로 fmt␣
누락된 초기 8바이트는 다음과 같습니다.
00000000 52 49 46 46 __ __ __ __ 57 41 56 45 66 6d 74 20 |RIFF____WAVEfmt |
...빈 부분은 최상위 청크의 길이입니다(또는 "전체 파일"을 나타내는 0xFFFFFFFF). 전체 구조는 다음과 같아야 합니다.
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"
헤더를 복구하려는 경우 fq
를 사용하여 검사하십시오(실제 MP3 파일 및 기타 일반적인 형식에도 잘 작동함).
$ fq . test.wav
$ fq .chunks[] test.wav
$ fq .chunks[2].chunks[] test.wav
data
또는 전체 PCM 데이터(4바이트 길이)를 포함하는 전체 청크가 있으므로 해당 부분만 추출하고 무차별 대입을 통해 다양한 원시 PCM 형식을 시도하는 것이 더 쉬울 수 있습니다. 많은 조합).