본문 바로가기
Project/문서형 악성코드

HWP 파일 구조 분석

by jino22 2020. 9. 27.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 

 

HWP 파일 구조 분석


 [ hwp 구조 및 자료형 ]

 

-  hwp 5.x 버전은 OLE구조(Object Linking Embedding=COM structured storage)

- OLE =객체 연결 및 삽입을 뜻하며 복합 이진 파일 형식이라고도 함. 하나의 작은 파일시스템과 같은 구조를 가짐. 문서내 객체가 독립적으로 존재하며 호환성이 뛰어남
- 매직넘버 :D0 CF 11 E0 A1 B1 1A E1

- OLE 파일은 섹터(1sector = 512byte)단위로 구성. 데이터 영역은 파일 크기에서 헤더 크기만큼 뺀 바이트로 구성

- OLE 구조 분석 참고 www.hanul93.com/ole-fileformat-basic/ , nurilab.github.io/2020/05/04/fileformat_ole_1/

OLE 구조

- Header영역( -1블록): File Signature, Sector Count, Sector Size, Start Sector ID 등 OLE 파일을 구성하고 있는 중요 정보들이 저장

- Data영역(0~n블록): 프로퍼티(스토리지 및 스트림 정보 보관), Stream 데이터, 테이블 정보(BBAT, SBAT) 가 저장. 대부분은 Stream 데이터가 차지

 

- hwp파일에 저장되는 정보의 자료형 = byte(1), word(2), dword(4), wchar(2), hwpunit(4) 등

* wchar =한글의 내부코드(모든 문자가 2byte길이를 가짐)로 표현된 한글자를 표현하는 자료형

- 2byte이상의 길이를 가지는 자료형은 리틀엔디언 방식으로 저장

* 리틀엔디언(Little-endian) =최하위 byte가 가장 먼저 저장되고 최상위 byte가 가장 나중에 저장

hwp 저장 데이터 자료형

 

- hwp파일은 복합 파일 구조. 내부적으로 스토리지(Storage, 폴더같은 것)와 스트림(Stream, 파일같은 것)을 구별하기 위한 이름을 가짐

* 스트림 =일반적인 바이너리+레코드구조로 데이터 저장. 스트림에 따라 압축/암호화되기도 함

 

hwp 전체 구조

- 레코드 구조: 문서정보, 본문, 문서 이력 관리에 사용.  >데이터 레코드란에서 상세 설명

- 압축: '파일 인식 정보' 항목의 '압축'플래그를 확인해 압축되어 있으면 풀고 진행

* 파일 인식 정보 =한글의 문서 파일이라는 것을 나타애기 위해 파일 인식 정보가 저장됨

- PrvText(미리보기 텍스트), PrvImage(미리보기 이미지)도 실제로는 압축되어있음


 [ 스토리지 별 저장 정보 -파일 인식 정보 ]

파일 인식 정보

ex) DWORD는 2byte이상이므로 4바이트씩 리틀엔디언 방식으로 읽음.

       01 00 00 00 > 00 00 00 01 = 압축된 파일을 나타냄

 

- BodyText는 레코드 구조로 이루어짐

- 레코드= 헤더(32bit, 데이터 길이)+데이터

* 헤더정보를 통해 테두리, 글자모양, 문단모양, 스타일 등을 알 수 있음

- BodyText의 섹션 끝이 레코드 끝과 일치하지 않으면 레코드 구조를 변경한 것으로 판단


 [ 분석 도구 ]

 SSViewer

 - OLE 구조로 된 문서를 파싱해서 보여줌

HwpScan2

 - www.nurilab.com/kr/products/hwpscan2.html

 

 

 

 

참고: 한글과컴퓨터_한글문서파일형식_5.0_revision1.3.pdf

728x90
반응형

'Project > 문서형 악성코드' 카테고리의 다른 글

한글 악성파일 분석  (0) 2020.12.01
OLE 구조 -Header  (0) 2020.10.25

댓글