본문 바로가기

디지털포렌식(Digital forensic)/그림

JPG 파일 구조 분석 #1

반응형

JPEG는 이미지 파일 형식이 아니라 알고리즘이다.
보여지는
JPEG 이미지는 내부적으로 JPEG 압축 알고리즘을 사용하는 JFIF 형식(JPEG File Interchange Format)이다. 

앞의 포스팅에서 보여준 파일을 다시 한 번 보여주고, 테스트를 위한 파일을 첨부한다.

 

output.jpg
0.00MB

 

 

 

 

JPG 파일의 시작은 ff d8로 시작한다. ff d8은 JPG 파일의 시작을 의미한다.

ff d8이 JPG 파일을 나타내기 때문에 고유한 이 값을 '마커(Marker)'라고 부른다.

ff d8을 SOI라고 하는데 Start Of Image의 약어다.

 

파일의 마지막은 ff d9으로 끝나야 한다.

 

JPG는 Segment들로 구성되고, 각 각의 Segment는 Marker로 시작하는데 마커값은 ff로 시작하고 그 뒤에

마커의 종류를 나타내는 바이트값이 온다. 

 

SOI 다음 마커 ff e0는 JFIF APP0 마커로 아래와 같은 구조를 갖는다.

필드 크기(bytes) 내용
App0 2 FF E0
Length 2 16 + 3*XThumnail * YThumnail
Identifier 5 고정값: 4A 46 49 46 00
JFIF 버전 2 JFIF의 버전, 01 02이면 1.02
Density Units 1 00: No Units
01: Pixel per Inch
02: Pixel per Centimeter
Xdensity 2 가로 픽셀 밀도
Ydensity 2 세로 픽셀 밀도
Xthumbnail 1 맨 뒤의 RGB Thumbnail의 가로픽셀 카운트(0도 가능)
Ythumbnail 1 맨 뒤의 RGB Thumbnail의 가로픽셀 카운트(0도 가능)
Thumbnail 3*n Uncompressed 24bit RGB raster thumbnail data.

 

 

Length 2바이트 = 00 10 

16진수 1000이므로 10진수 4096이 길이다.

Identifier 5바이트는 4A 46 49 46 00이고,

JFIF 버전은 2바이트로 0101이므로 1.01이다.

Density Unit은 1바이트, 01이므로 Pixel per Inch임을 나타낸다.

X,Ydensity는 2바이트로 가로,세로 밀도는 00 06이므로 0600, 10진수 1536이 된다.

X,Y 썸네일은 1바이트로 모두 0으로 셋된다.

728x90