Proneer | Security is a people problem...
Microsoft Word 2007 (.docx) 파일은 기존의 97~2003 버전에서 사용했던 Compound File Binary Format(CFBF) 구조를 사용하지 않고 Open Office XML(OOXML) 구조를 사용한다. OOXML 구조의 특징은 XML로 표현된 문서가 ZIP 형식으로 압축되어 저장된다. 자세한 각 문서의 구조에 대해서 관심이 있다면 최근 Microsoft 에서 공개한 해당 문서 포맷을 참고하기 바란다.
ZIP 파일은 압축하기 이전의 데이터들을 블럭 단위로 압축을 한다. 해당 블럭은 크기가 고정된 것이 아니라 압축할 데이터들의 수에 따라 나누어진다. 예를 들어, 두 개의 이미지 파일을 압축한다면 각각 독립된 블럭으로 압축이 되는 것이다. 다음은 ZIP 파일의 일반적인 구조를 보여준다.
(Ref. http://en.wikipedia.org/wiki/ZIP_(file_format))
MS Word 2007 (.docx) 파일도 ZIP 포맷으로 압축되어 있기 때문에 압축파일 푸는 것과 같이 압축을 풀 수 있다. 압축을 풀게 되면 "[Content_Types].xml"를 비롯하여 "word/document.xml" 파일 등 여러 개의 xml 파일로 구성되어 있는 것을 볼 수 있다. 이러한 xml 파일은 각각 독립적으로 하나의 블럭을 구성하여 ZIP 포맷으로 압축된다.
따라서 MS Word 2007 파일은 위와 같이 여러 개의 FILE ENTRY로 구성이 된다. 각 FILE ENTRY는 Local Header (로컬 헤더)라는 헤더 구조를 가진다. 로컬 헤더에는 시그니처, 암호화여부, 압축방식, 수정시간, CRC32, 압축크기, 비압축크기, 파일이름 등이 표현된다. 다음은 로컬 헤더의 구조를 보여준다. 좀 더 자세한 내용은 ZIP 포맷 문서를 참고하기 바란다.
MS Word 2007의 압축 방식
로컬 헤더의 오프셋 0x08부터 2바이트 값은 압축 형식을 나타낸다. 지원하는 압축 형식은 다음과 같은데 MS Word 2007(.docx)로 파일을 저장하면 항상 Deflate(0x08) 방식으로 압축되어 저장된다.
MS Word 2007의 이미지 저장 형태
MS Word 2007 파일을 유심히 살펴보면 이미지 파일은 XML 파일과 조금 다르게 저장되는 것을 알 수 있다. 이미지 파일 포맷 중에 PNG, JPEG, GIF 등의 파일들은 이미 압축되어 있다. 압축된 데이터를 다시 압축하게 되면 거의 압축이 되지 않기 때문에 여러 번 압축을 하는 일은 번거로운 작업임에 틀림이 없다.
이러한 특성을 고려하여 MS Word 2007 문서에 압축된 이미지 파일을 삽입하게 되면 압축되지 않은 상태(압축 방식 값 0x00)로 FILE ENTRY 구조에 저장이 된다. 그렇다면 압축이 되어 있지 않은 비트맵(BMP)와 같은 파일들은 어떻게 저장이 될까? 이러한 궁금증에 주로 사용하는 이미지 파일을 대상으로 MS Word 2007 문서에 저장되는 형태를 조사하여 보았다.
위의 결과에서 알 수 있듯이 압축된 이미지 포맷은 모두 압축 없이 원본 그대로 저장되는 것을 알 수 있다. 하지만 압축되지 않은 파일인 BMP는 PNG로 변환되어 저장된다.
특이한 점은 WMF, EMF, EPS는 이미지를 표현할 수 있음에도 불구하고 압축되어 저장되었다. 그리고 CUR, ISO 파일은 Word 2007 문서에 삽입하는 과정에서 원본 이미지를 제대로 표현하지 못하였다.
Microsoft Word 2007 (.docx)에서 이미지 파일 변환 형태
Microsoft Word 2007 (.docx) 파일은 기존의 97~2003 버전에서 사용했던 Compound File Binary Format(CFBF) 구조를 사용하지 않고 Open Office XML(OOXML) 구조를 사용한다. OOXML 구조의 특징은 XML로 표현된 문서가 ZIP 형식으로 압축되어 저장된다. 자세한 각 문서의 구조에 대해서 관심이 있다면 최근 Microsoft 에서 공개한 해당 문서 포맷을 참고하기 바란다.
ZIP 파일은 압축하기 이전의 데이터들을 블럭 단위로 압축을 한다. 해당 블럭은 크기가 고정된 것이 아니라 압축할 데이터들의 수에 따라 나누어진다. 예를 들어, 두 개의 이미지 파일을 압축한다면 각각 독립된 블럭으로 압축이 되는 것이다. 다음은 ZIP 파일의 일반적인 구조를 보여준다.
(Ref. http://en.wikipedia.org/wiki/ZIP_(file_format))
MS Word 2007 (.docx) 파일도 ZIP 포맷으로 압축되어 있기 때문에 압축파일 푸는 것과 같이 압축을 풀 수 있다. 압축을 풀게 되면 "[Content_Types].xml"를 비롯하여 "word/document.xml" 파일 등 여러 개의 xml 파일로 구성되어 있는 것을 볼 수 있다. 이러한 xml 파일은 각각 독립적으로 하나의 블럭을 구성하여 ZIP 포맷으로 압축된다.
따라서 MS Word 2007 파일은 위와 같이 여러 개의 FILE ENTRY로 구성이 된다. 각 FILE ENTRY는 Local Header (로컬 헤더)라는 헤더 구조를 가진다. 로컬 헤더에는 시그니처, 암호화여부, 압축방식, 수정시간, CRC32, 압축크기, 비압축크기, 파일이름 등이 표현된다. 다음은 로컬 헤더의 구조를 보여준다. 좀 더 자세한 내용은 ZIP 포맷 문서를 참고하기 바란다.
| Offset | Decription |
| 0 - 3 | local file header signature (0x04034B50) |
| 4 - 5 | version needed to extract |
| 6 - 7 | general purpose bit flag |
| 8 - 9 | compression method |
| 10 - 11 | last modify file time |
| 12 - 13 | last modify file date |
| 14 - 17 | crc-32 |
| 18 - 21 | compressed size |
| 22 - 25 | uncompressed size |
| 26 - 27 | file name length |
| 28 - 29 | extra field length |
| variable size | file name |
| variable size | extra field |
MS Word 2007의 압축 방식
로컬 헤더의 오프셋 0x08부터 2바이트 값은 압축 형식을 나타낸다. 지원하는 압축 형식은 다음과 같은데 MS Word 2007(.docx)로 파일을 저장하면 항상 Deflate(0x08) 방식으로 압축되어 저장된다.
| Value | Description |
| 0x00 | The file is stored (no compression) |
| 0x01 | The file is Shrunk |
| 0x02 | The file is Reduced with compression factor 1 |
| 0x03 | The file is Reduced with compression factor 2 |
| 0x04 | The file is Reduced with compression factor 3 |
| 0x05 | The file is Reduced with compression factor 4 |
| 0x06 | The file is Imploded |
| 0x07 | Reserved for Tokenizing compression algorithm |
| 0x08 | The file is Deflated |
| 0x09 | Enhanced Deflating using Deflate64(tm) |
| 0x0A | PKWARE Date Compression Library Imploding |
MS Word 2007의 이미지 저장 형태
MS Word 2007 파일을 유심히 살펴보면 이미지 파일은 XML 파일과 조금 다르게 저장되는 것을 알 수 있다. 이미지 파일 포맷 중에 PNG, JPEG, GIF 등의 파일들은 이미 압축되어 있다. 압축된 데이터를 다시 압축하게 되면 거의 압축이 되지 않기 때문에 여러 번 압축을 하는 일은 번거로운 작업임에 틀림이 없다.
이러한 특성을 고려하여 MS Word 2007 문서에 압축된 이미지 파일을 삽입하게 되면 압축되지 않은 상태(압축 방식 값 0x00)로 FILE ENTRY 구조에 저장이 된다. 그렇다면 압축이 되어 있지 않은 비트맵(BMP)와 같은 파일들은 어떻게 저장이 될까? 이러한 궁금증에 주로 사용하는 이미지 파일을 대상으로 MS Word 2007 문서에 저장되는 형태를 조사하여 보았다.
| Original Format (Signature) |
Converted Format | Compression Method |
| BMP | PNG | 0x00 |
| GIF(GIF87a) | GIF(GIF87a) | 0x00 |
| GIF(GIF89a) | GIF(GIF89a) | 0x00 |
| JPEG(Exif) | JPEG(Exif) | 0x00 |
| JPEG(JFIF) | JPEG(JFIF) | 0x00 |
| PNG | PNG | 0x00 |
| TIF, TIFF | TIF, TIFF | 0x00 |
| WMF | WMF | 0x08 |
| EMF | EMF | 0x08 |
| EPS | WMF | 0x08 |
| CUR | - | - |
| ICO | - | - |
위의 결과에서 알 수 있듯이 압축된 이미지 포맷은 모두 압축 없이 원본 그대로 저장되는 것을 알 수 있다. 하지만 압축되지 않은 파일인 BMP는 PNG로 변환되어 저장된다.
특이한 점은 WMF, EMF, EPS는 이미지를 표현할 수 있음에도 불구하고 압축되어 저장되었다. 그리고 CUR, ISO 파일은 Word 2007 문서에 삽입하는 과정에서 원본 이미지를 제대로 표현하지 못하였다.
'Data Foreniscs' 카테고리의 다른 글
| PDF Forensics : Uncovering files (0) | 2010/02/26 |
|---|---|
| 한컴오피스 2010 설치 및 파일 포맷 (4) | 2009/12/22 |
| Microsoft Word 2007 (.docx)에서 이미지 파일 변환 형태 (2) | 2009/11/25 |
| Image Format Signatures (0) | 2009/11/23 |
| File Fragmentation Identification (0) | 2009/11/16 |
| Common File Signatures (5) | 2009/10/23 |
댓글을 달아 주세요
좋은 자료 감사합니다...
2009/11/30 14:04 [ ADDR : EDIT/ DEL : REPLY ]^^ 네.. 찾아주셔서 감사합니다.
2009/11/30 19:26 [ ADDR : EDIT/ DEL ]