틀린 부분이 있다면 언제든지 댓글 남겨주세요!
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/
- 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파일은 복합 파일 구조. 내부적으로 스토리지(Storage, 폴더같은 것)와 스트림(Stream, 파일같은 것)을 구별하기 위한 이름을 가짐
* 스트림 =일반적인 바이너리+레코드구조로 데이터 저장. 스트림에 따라 압축/암호화되기도 함
- 레코드 구조: 문서정보, 본문, 문서 이력 관리에 사용. >데이터 레코드란에서 상세 설명
- 압축: '파일 인식 정보' 항목의 '압축'플래그를 확인해 압축되어 있으면 풀고 진행
* 파일 인식 정보 =한글의 문서 파일이라는 것을 나타애기 위해 파일 인식 정보가 저장됨
- 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
'Project > 문서형 악성코드' 카테고리의 다른 글
한글 악성파일 분석 (0) | 2020.12.01 |
---|---|
OLE 구조 -Header (0) | 2020.10.25 |
댓글