파일 이름을 바꾸면 정체성이 변하는 신비한 파일: 폴리글롯의 세계
Renaming This File Changes what it Does by PortalRunner
확장자를 바꾸는 것만으로 이미지, 동영상, PDF, 웹페이지, 압축 파일 등 전혀 다른 성격의 파일로 변신하는 폴리글롯(Polyglot) 파일 의 원리와 제작 과정을 상세히 다룹니다.
-
파일의 정체성과 헤더(Header)
- 컴퓨터는 데이터를 0과 1의 나열로 저장하며, 이미지는 이 숫자들의 격자(Grid) 구조입니다.
- 프로그램이 데이터를 해석하는 기준은 파일 이름 뒤의 확장자가 아니라, 파일 시작 부분에 위치한 헤더(Header) 정보입니다.
- 매직 넘버(Magic Number) 는 해당 파일 형식을 식별하는 고유한 코드입니다.
- 파일 확장자는 운영체제가 어떤 프로그램을 실행할지 결정하는 용도로만 쓰이며, 실행된 프로그램은 내부 헤더를 직접 확인합니다.
-
폴리글롯 파일의 제작 원리와 난관
- 여러 미디어 데이터를 하나로 묶으려면 각 프로그램이 원하는 위치에서 정보를 찾을 수 있도록 헤더를 병합해야 합니다.
- 대부분의 파일 포맷은 헤더의 시작 위치가 엄격하여 병합이 불가능합니다.
- PNG는
89 PNG로 시작해야 합니다. - GIF는
GIF89A로 시작해야 합니다.
- PNG는
- TGA(True Vision TGA) 포맷은 매직 넘버가 없고 헤더 구조가 느슨하여 폴리글롯 제작에 유리합니다.
-
MP4 포맷의 구조와 활용
- MP4는 엄격한 헤더 대신 아톰(Atoms) 이라 불리는 박스 구조를 사용합니다.
- 대부분의 플레이어는 FTYP(File Type) 아톰 이 파일 처음에 오기를 기대합니다.
- FTYP 아톰 내부의 처음 4바이트는 아톰의 크기, 다음 4바이트는 이름을 정의합니다.
- 실험 결과, 대부분의 플레이어는 첫 번째 아톰이 반드시
FTYP여야 한다고 엄격하게 따지지 않으며, 이를 헤더 샌드박스처럼 활용할 수 있습니다.
-
윈도우 아이콘(.ico)과의 결합
- 윈도우 아이콘(Windows Icon) 헤더는 매우 일반적인
00 00 01 00형태를 가집니다. - 아이콘 포맷은 실제 이미지 데이터가 파일 내 어느 위치(Offset) 에 있든 가리킬 수 있는 유연함이 있습니다.
- 아이콘 헤더의 크기 정보를 활용해 MP4 헤더와 정렬하고, 남는 공간을 데이터 보관소로 사용합니다.
- MP4의 Skip 아톰은 데이터를 건너뛰는 역할을 하므로, 이 안에 실제 PNG 이미지 데이터를 안전하게 숨길 수 있습니다.
- 윈도우 아이콘(Windows Icon) 헤더는 매우 일반적인
-
기타 포맷의 병합 전략
- ZIP 압축 파일: 파일의 끝부분(Bottom-up) 부터 읽는 특성이 있어, 기존 폴리글롯 파일의 맨 뒤에 ZIP 데이터를 단순히 이어 붙여도 작동합니다.
- PowerPoint(.pptx) : 현대의 파워포인트 파일은 본질적으로 ZIP 구조이므로 동일한 원리가 적용됩니다.
- PDF: 텍스트 기반 마크업 형태이며, 헤더가 파일 시작 1KB 내에만 있으면 작동하는 관대함을 보입니다. MP4 헤더의 빈 공간(240바이트)에 PDF 정보를 배치하여 구현합니다.
- HTML: 구조가 매우 견고하며 노이즈에 강합니다. MP4의 또 다른 Skip 아톰에 HTML 코드를 삽입하고, 불필요한 바이너리 데이터가 보이지 않도록 CSS(폰트 크기 0 설정) 로 처리합니다.
- MP3: 고정된 헤더 없이 데이터를 수백 개의 청크(Chunks) 로 나누어 처리하며 주변 노이즈를 견뎌냅니다. 파일 끝에 이어 붙이는 것만으로 유효한 MP3가 됩니다.
-
한계와 결론
- 폴리글롯 파일을 제작할 때 VLC 플레이어는 헤더의 특정 이름을 꼼꼼히 체크하므로 실행이 거부될 수 있습니다.
- 비디오와 오디오 데이터가 공존할 경우, 프로그램은 보통 먼저 발견되는 비디오를 우선 재생하기 때문에 전용 오디오 파일로 인식시키는 데 어려움이 있습니다.
- 제작자는 이러한 원리를 이용해 여러 파일을 하나로 합치는 폴리글롯 생성 도구를 개발하여 깃허브(GitHub)에 공개하였습니다.
토픽:
컴퓨터 과학