.pdf 파일 구조 분석
PDF 파일이란?
우리가 이야기 하는 PDF는 이동가능 문서 형식(Portable Document Format) 의 약자로 Adobe에서 개발한 전자 문서 형식입니다.
PDF는 컴퓨터 환경에 관계 없이 같은 표현을 하기 위함을 목적으로 개발이 되었습니다.
PDF는 2008년에 ISO 32000 오픈 포맷으로 표준화 되었습니다
PDF 파일 구조 요약
- Header : 총 8바이트로 PDF 시그니처와 문서의 버전 정보를 가지고 있다.
- Body : 실제 문서의 정보들을 포함하는 오브젝트(객체)와 이 객체들을 구성하는 트리형태로 서로 링크되어 있다.
- Xref Table : 각 개체들을 참조할 때 사용되는 테이블이다. 객체의 사용 여부와 식별 번호 등이 저장되어 있다.
- File Trailer : File Body에 존재하는 객체 중 최상위 객체가 어떤 객체인지, Xref Table이 어디에 위치하는지 기록되어 있는 부분이다.
분석도구
010 editor
Header
두 개의 pdf 파일의 Header 부분을 010 editor로 확인한 사진입니다. 두 파일 공통으로 확인할 수 있는 pdf 시그니처인 25 50 44 46을 확인할 수 있고 이 부분은 %PDF 라고도 표현되고 있습니다. 그리고 같은 버전을 사용했기 때문에 버전도 1.4로 같은 것을 확인할 수 있습니다.
여기서 다른 확장자들의 시그니처도 추가적으로 확인을 원한다면 아래의 링크를 참고하면 좋을것 같습니다.
http://forensic-proof.com/archives/300
Body
PDF 파일 구조 중 body는 PDF 파일 중 가장 큰 영역을 차지하며 트리 구조로 각 오브젝트들이 링크되어 있습니다. 그리고 body 부분에 pdf파일의 그림, 글 등 데이터들이 포함되어 있습니다.
첫 번째 오브젝트만 하나 가져와서 살펴보면 1 0 0 obj라는 부분으로 1번 오브젝트의 시작을 표시하는 부분이 존재하고 마지막에 endobj 부분으로 1번 오브젝트의 마지막 부분을 나타내는 부분이 존재합니다. 이 이외에도 두 파일은 총 39개의 오브젝트가 존재하는 파일입니다.
Xref Table
두 파일의 Xretf Table 부분을 캡쳐한 사진입니다. 이 사진을 바탕으로 Xref Table을 설명하자면
xref <xref table 시작태그> 부분으로 두 파일 모두 시작합니다.
그리고 그 뒤의 0 40부분이 객체의 갯수를 뜻합니다. 즉 두 파일 모두 40개의 객체를 가지고 있다는 것을 뜻합니다.
그 뒤로 이어지는 부분은 객체의 정보들인데 아래에 두 파일의 객체 내용을 정리했습니다.
<Ass4_SQL Injection>
0000000000 65535 f
0000025281 00000 n
0000025341 00000 n
<Ass5_XSS>
0000000000 65535 f
0000026389 00000 n
0000026449 00000 n
가장 앞 3개의 객체를 정리한 내용입니다. 이 정보들은 앞에서부터 <위치 값>, <생성 고유식별 번호>, <사용 여부>를 뜻하게 됩니다. 여기서 위치값은 offset을 뜻하고, 사용 여부에서 f는 <사용되지 않음>, n은 <사용 됨>을 뜻합니다.
Trailer
Trailer는 위의 두 pdf 파일을 010 editor로 연 정보로도 확인할 수 있듯이 파일의 가장 마지막에 존재하면 Rott 객체 정보와 Xref Table의 위치정보(이 값도 offset인 것 같습니다.), 그리고 객체 갯수(Size)등의 정보를 포함하고 있습니다. 그리고 마지막 부분에 %%EOF를 통해 파일의 끝 또한 나타내고 있습니다.