이미지 파일의 시그니처(Magic Number) 정리
컴퓨터에서 파일의 확장자만 보고 파일 형식을 판단하는 경우가 많습니다. 그러나 실제로 파일 내부에는 해당 파일의 형식을 구분할 수 있는 고유한 정보가 숨겨져 있습니다. 이 정보를 시그니처(Signature) 또는 매직 넘버(Magic Number)라고 부릅니다.
이번 글에서는 PNG, JPG, GIF 등 우리가 자주 사용하는 이미지 포맷들의 시그니처 값을 정리해보았습니다.
목차
1. 시그니처(Magic Number)란?
시그니처는 파일 맨 앞에 위치한 고정된 바이트 값으로, 운영체제나 분석 도구들이 해당 파일이 어떤 포맷인지 빠르게 식별할 수 있도록 도와줍니다. 예를 들어, 이미지 파일처럼 겉으로 보기엔 비슷해 보이지만 내부 구조가 완전히 다른 포맷을 구분하는 데 매우 중요한 역할을 합니다.
2. 대표 이미지 포맷 시그니처
다음은 대표적인 이미지 포맷의 시그니처(hex 코드)입니다. 이 값들은 모두 파일의 시작 부분에 위치하며, 확장자와 무관하게 포맷을 식별할 수 있습니다.
포맷 | 시그니처 (Hex) | ASCII | 설명 |
---|---|---|---|
PNG | 89 50 4E 47 0D 0A 1A 0A | ‰PNG.... | PNG 이미지의 고유한 시작 시그니처 |
JPG / JPEG | FF D8 FF | ÿØÿ | JPEG 이미지 시작을 나타냄 |
GIF87a | 47 49 46 38 37 61 | GIF87a | 초기 GIF 포맷 시그니처 |
GIF89a | 47 49 46 38 39 61 | GIF89a | GIF 확장 버전 포맷 |
BMP | 42 4D | BM | Windows Bitmap 이미지 |
TIFF (Intel) | 49 49 2A 00 | II* | 리틀 엔디안 방식 TIFF |
TIFF (Motorola) | 4D 4D 00 2A | MM* | 빅 엔디안 방식 TIFF |
WEBP | 52 49 46 46 ... WEBP | RIFF...WEBP | RIFF 구조 기반 WebP 포맷 |
ICO | 00 00 01 00 | .... | 아이콘 파일 |
PSD | 38 42 50 53 | 8BPS | Adobe Photoshop 파일 |
3. 시그니처 확인 방법 (Python 예제)
파일의 시그니처를 직접 확인하고 싶을 때는 Python을 활용할 수 있습니다. 아래는 간단한 코드 예제입니다.
def get_file_signature(filepath, num_bytes=8):
with open(filepath, 'rb') as f:
return f.read(num_bytes).hex().upper()
signature = get_file_signature("example.png")
print(signature) # 예: '89504E470D0A1A0A'
위 코드에서 파일의 앞부분을 바이너리로 읽고, 16진수 형태로 출력해 줍니다. 포맷에 따라 몇 바이트를 읽을지는 다를 수 있지만, 대부분의 이미지 시그니처는 8바이트 이내에 존재합니다.
4. 정리 및 마무리
시그니처 정보는 보안 분석, 디지털 포렌식, 파일 무결성 검사 등 다양한 분야에서 활용됩니다. 특히 확장자가 위조된 파일이나, 악성 이미지 파일을 판별하는 데 중요한 기준이 되죠.
단순히 파일 확장자를 믿는 대신, 진짜 파일 형식을 정확하게 확인하려면 이러한 시그니처 정보를 참고하는 것이 좋습니다. 다음에는 이미지 외에도 PDF, EXE, ZIP 등의 시그니처도 정리해볼까 합니다.
읽어주셔서 감사합니다. 🙌
'잡학IT' 카테고리의 다른 글
주요 국가별 보안 취약점 관련 기술 블로그 TOP 10 (0) | 2025.05.22 |
---|---|
2025년 5월 17~18일 보안 이슈 요약 (2) | 2025.05.19 |
malware 연구 참고 사이트(2025. 05. 11 업데이트) (0) | 2025.05.09 |
CVE-2025-3248(Langflow Unauth RCE) detect snort rule (0) | 2025.04.14 |
패킷 분석에 도움이 되는 사이트 (0) | 2024.10.24 |