damaged_image.bmp
0.03MB

학교 수업 후 미리 실습을 해보라고 교수님이 준 damaged_image.bmp 파일이다.

 

[그림 1] Windows 기본 뷰어로 확인한 damaged_image.bmp

역시나 열리지 않는다. 그래서 습관적으로 HxD에서 파일을 확인해보니 파일 헤더 부분이 뭔가 엉성하다는 느낌을 받았다. 제일 먼저 .bmp 파일 시그니처가 보이지 않았다. 그래서 Offset 00 ~ 01 부분에 .bmp 파일의 시그니처인 0x42 0x4D 를 넣어서 열어봤지만 역시나 지원하지 않는다고 한다. 그래서 결국 .bmp 파일 구조를 알아보기로 했다.

 

[그림 2] HxD로 확인한 damaged_image.bmp

.bmp 파일이 무엇인지, 자세한 구조가 어떻게 구성되어 있는지는 구글링을 해보시길 바란다. 이 글보다 훨씬 더 좋은 글이 많다.

 

.bmp 구조를 간략하게 정리하면 아래와 같다.

 

[그림 3] .bmp 구조

그리고 저 문제를 풀기 위해서는 File Header 부분이 필요하기 때문에 해당 영역에 대해서만 자세히 기술했다. 그리고 설명을 위해 정상 파일인 제목없음.bmp를 생성했다.

 

[그림 4] HxD로 확인한 제목없음.bmp

네모 박스 순서대로 아래 표와 같은 의미를 같는다.

이름 Size (Bytes) 설명
bfType 2 .bmp 파일의 시그니처(0x42 0x4D = BM)
bfSize 4 해당 파일의 전체 크기 (Bytes)
bfReserved1 2 예약된 영역으로 사용되지 않는다.
bfReserved2 2 예약된 영역으로 사용되지 않는다.
bfOffBits 4 실질적인 데이터의 시작 Offset

 

- bfType : 빨간색의 네모 박스가 인코딩 된 문자열을 보면 BM으로 나와있는 것을 확인할 수 있다. 

- bfSize : 0x59AB79 (리틀 엔디안) = 5876598 Bytes 다. 해당 파일의 속성에서 파일 크기랑 같은 것을 볼 수 있다.

 

[그림 5] 제목없음.bmp 속성

- bfOffBits : 0x36 Offset으로 이동하면 해당 파일의 실질적인 데이터의 시작 위치다.

 

[그림 6] bfOffBits 값이 가르키는 위치

여기까지 기본적인. bmp의 File Header 설명이다. 이제 문제로 돌아가서 상황을 요약했다.

1. 파일 시그니처가 없다.

2. 파일 사이즈에 대한 값이 없다.

3. 내가 예시로 만든 파일보다 File Header가 짧다.

 

내가 문제를 풀면서 고민을 했던 게 File Header 길이였다. 그림판으로 여러 bmp 파일을 만들었다. 하지만 아래의 그림처럼 비트맵 종류가 많았고, 해당 데이터를 HxD로 열어보니 File Header 길이도 제각각이었다. 그래서 개인적으로 일반적이라고 생각하는 24비트 비트맵이라고 가정하고 문제를 풀었고 풀렸다...

 

[그림 7] 그림판에서 .bmp 파일 저장 방법

일단 24비트 비트맵이라고 가정하고 문제를 풀었기 때문에 File Header 길이가 부족한 것으로 생각하고 헤더에 데이터를 덮어쓴 것이 아니라 삭제했다고 생각이 들었다. 그래서 파일 시그니처를 표시하는 bfType부터 bfOffBits를 해당 파일에 썼다.

 

1. bfType : 파일 시그니처인 0x42 0x4D

2. bfSize : 해당 파일 속성에서 파일 크기는 29,992 bytes이다. 그래서 29,992(10진수)를 그대로 16진수로 변환을 해서 0x7528이라는 값이 나왔고 이것을 리틀 엔디안으로 바꿔주면 0x28 0x75 0x00 0x00 

3. bfReserved1 : 예약된 영역으로 사용하지 않는다고 했으니 0x00 0x00

4. bfReserved2 : 3번과 마찬가지로 0x00 0x00

5. bfOffBits : [그림 6]과 개인적으로 생각하는 일반적인 bmp 파일의 실질적인 데이터 시작 위치인 Offset 값을 가져와서 0x36 0x00 0x00 0x00

 

[그림 8] damaged_image.bmp 복구한 내용

해당 데이터를 입력한 파일을 저장하고 열면 아래와 같은 그림이 나온다.

 

[그림 9] Windows 기본 뷰어로 확인한 복구된 damaged_image.bmp

실제로 내가 이 문제를 풀 때 Image Header 부분까지 확인하고 일일이 데이터 값을 보면서 구조가 맞는지 확인했지만 해당 문제를 푸는데 제일 중요한 부분은 File Header 부분이라고 생각을 했다. Image Header 부분을 추가한다고 하면 글이 매우 길어... 아니 귀찮았다. 

'Digital Forensics > Disk Forensics' 카테고리의 다른 글

Windows 자주 사용하는 폴더 내용 기록 제거  (0) 2018.08.30
swap file  (0) 2018.07.20

+ Recent posts