티스토리 뷰

최종 수정 날짜: 2014-01-27


안녕하세요. Hackability 입니다.


이번에 작성할 내용은 프로퍼티 리스트 (Property List) 파일 시그니처와 관련 툴에 대해 포스팅 하도록 하겠습니다.


아래는 프로퍼티 리스트에 대한 위키 정보 입니다. (링크)

프로퍼티 리스트는 Mac OS X, iOS, NeXSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객체 직렬화를 위한 파일 이다. 또한, .plist 라는 확장자를 가지므로, 보통 plist 파일이라고 하는 경우가 많다. 프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS에서는 리소스 포크 정보를 저장하는데에 사용되었다.


제가 plist 를 접하게된건 iOS 이미지 파일을 포렌식 하게 되면서 접하게 되었고, XML 파일을 확인해야 할 경우가 있었습니다. 다시 위키를 참고하면 내용은 아래와 같습니다. 

Mac OS X


OS X에서 애플은 기존의 어플과 별도로 새로운 두 가지 형식을 추가했다.

맥 OS X 10.0 에서는 NXSTEP 형식을 사용하지 않고, 애플이 정의한 DTD 의 새로운 XML 문서 형식이 발표되었다. 이 형식은 non-ASCII 문자와, NSValue 객체 (일부는 텍스트로 나타남)를 저장할 수 있다. (다른 GNUstep의 ASCII 프로퍼티 리스트 형식과 달리, 애플의 ASCII 프로퍼티 리스트 형식은 지원하지 않는다.)


그러나 그 동안의 XML 파일은 공간 활용에 문제가 많았기 때문에 맥 OS X 10.2 에서는 이진 파일 등을 저장할 수 있는 새로운 프로퍼티 리스트를 발표하였다. Mac OS X 10.4 부터는 이 형식이 기본으로 사용되었다. 


프로퍼티 리스트는 plutil 유틸리티 (맥 OS X 10.2 부터 추가된 기능)를 사용하여 구문 확인, 형식 변환에 사용할 수 있다. 또한, NexSTEP 파일을 편집하는데 사용할 수 있다. XML 프로퍼티 리스트는 어떤 편집기에서도 편집하기 쉬우나, 애플의 계층 문서 뷰어/편집기 또한, 바이너리 형식의 프로퍼티 리스트를 편집할 수 있다. 애플은 개발도구의 일부를 응용 프로그램인 프로퍼티 리스트 에디터를 제공한다.


Mac OS X 10.4부터는 시스템 이벤트 응용 프로그램을 통해 프로퍼티 리스트 파일을 읽기 귀한 AppleScript 인터페이스를 제공한다. Mac OS X 10.5 에서는 프로퍼티 리스트의 생성, 작성, 편집을 위한 AppleScript 인터페이스를 제공한다. 


XML 프로퍼티 리스트에 사용되는 Foundation 클래스와, CoreFoundation 형식, XML 태그 및 데이터 저장 형식이다.


Foundation 클래스CoreFoundation 형식XML 태그형식
NSStringCFString<string>UTF-8 인코딩 문자열
NSNumberCFNumber<real>, <integer>10 진수 문자열
NSNumberCFBoolean<true />, or <false />두 종류의 태그
NSDateCFDate<date>ISO 8601 형식 문자열
NSDataCFData<data>Base64 인코딩 데이터
NSArrayCFArray<array>child element 번호
NSDictionaryCFDictionary<dict><key> 태그와 plist element 관련 태그


예제


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>냉장고</key>
	<array>
		<string>코끼리</string>
	</array>
</dict>
</plist>


아래는 plist 가 갖는 파일 시그니처 입니다. 프로퍼티 리스트는 plist 로 시작할 줄알았는데 bplist로 시작함에 주의하세요. :)


0x00000000     62 70 6C 69 73 74 ...     (bplist ....)


위 시그니처를 통해 파일이 plsit 구조를 갖는 것을 알 수 있습니다. 위에서 언급되었듯이 XML 파일이 중간 중간 바이너리가 포함되어 그냥 텍스트 파일로 열면 깨지게 되고 plist 에디터로 읽어야 합니다. (맥북을 쓰시는 분은 기본적으로 읽을 수 있습니다.)


사용한 툴은 plist editor 2.1 for windows 입니다. (링크)


결과적으로 그냥 텍스트 파일에서 열면 아래 처럼 보이던것이,



plist editor 를 이용하면 아래 처럼 보이게 됩니다.



(참고 예제는 CodeGate 2013 포렌식 100 입니다.)



댓글