아이폰 백업파일의 구조

|
바로 얼마전 이슈가 된 아이폰(+안드로이드)의 위치정보 저장....
나역시 프로그램을 돌려보다 백업파일이 어떤 구조인지 궁금해서 찾아봤다.

백업 파일은 C:\User\(사용자명)\AppData\Roaming\Apple Computer\MobileSync\Backup 폴더 아래에 위치하고...
XP의 경우에는 C:\Document and Settings 아래가 되지 싶다.

Backup폴더 아래에 생성된 폴더가 하나의 백업에 대한 폴더이고,
이 폴더 안에 16진수 문자로 파일명이 만들어져 있는 수많은 파일과,
메인(?) 정보가 담겨있는 파일이 있다.

일단 실제 파일과 보이는 파일명을 매치시키기 위해서는
Manifest.mbdb와 Manifest.mbdx 파일을 사용한다...

먼저 Manifest.mbdb의 구조는,
처음 4바이트 : mbdb
다음 2바이트 : 05 00
그리고 정보들이 뒤따르게 된다.
각 정보들은 문자열 혹은 숫자형이 된다.
문자형 데이터는 [문자열 길이(숫자형 2byte)][문자열 길이만큼의 문자열] 이 두 부분으로 이루어지고,
숫자형은 Big-Endian 바이트 오더를 따르는 각 데이터별 지정된 길이의 바이트로 이루어져 있다.

위치정보가 저장되는 도메인은 RootDomain, 파일 경로는 Library/Caches/locationd/consolidated.db 이다.

그럼 이것의 실제 파일명은 무엇인가.
이 정보는 mbdx 파일에 지정되어 있다.
mbdb파일의 헤더부분 이후는 각 데이터의 반복적인 구성으로 되어 있는데,
각 데이터의 시작 오프셋의 정보가 mbdx파일에 지정되어 있다.
mbdb파일에서의 실제 오프셋으로 mbdx파일에서의 저장된 오프셋 값을 찾아 파일명을 구성할 수 있는데,
mbdx파일의 구성은 다음과 같다.

시작 4byte : mbdx
다음 2byte : 02 00
다음 4byte : 레코드 개수

다음으로 반복적인 레코드로 구성이 되는데, 각 레코드는,
20바이트의 File ID (16진수 값 그대로 문자열로 변환하면 실제 파일명이 된다.)
4바이트의 오프셋 (mbdb파일에서의 오프셋. 계산방법은 아래에 링크한 소스 참고)
2바이트의 모드값 (디렉토리, 링크, 파일 여부 및 others, group, owner의 권한. xNIX에서 많이 보는 -rwxrwxrwx 이 값.)
으로 구성된다.


프로그램을 대충 짠다음 돌려서 확인해보니, 통째로 포스팅 하기엔 좀 거시기해서... 파일의 구조는 간단히 여기까지만 포스팅한다.
궁금하면 다음 위치에서 소스를 직접 확인해 보기 바란다....
http://stackoverflow.com/questions/3085153/how-to-parse-the-manifest-mbdb-file-in-an-ios-4-0-itunes-backup


그리고 아이폰 및 안드로이드 기기에서 위치정보를 동의없이 수집했네 어쩌네... 하는데...
이 내용에 대한 사견을 좀 달아보면,

모바일 기기에서 위치정보를 가져오는 방법엔 흔히 GPS 장치를 떠올리는데,
GPS센서 외에도, Cell (기지국)이나 Wifi AP 등을 기반으로 위치정보를 가져올 수 도 있다. (아이팟 터치 등 GPS센서가 없는 기기들)
그런데 이 정보가 애플 자체에서 다 때려박은게 아니라, GPS센서를 가지고 있는 기기에서
실제 GPS값과 Cell(혹은 Wifi AP)의 정보를 같이 보내 이 정보를 수집하여 제공되는 거다...

그때문에 기록된 정보가 보이는 것이고, 이게 사용자 몰래 어쩌고... 한다는 내용에 대해서는... 할말이 없다.. 무식이 죄지....

아이폰 박스에 들어가 있는 "중요한 제품 정보 설명서"를 펼쳐서,
iPhone 약관 중 4번 항목, 그중에서도 (b) 항을 읽어봐라....
사용자 삽입 이미지
(아 씨댕... 저 파란 멍 현상은 고쳐줄 생각이 없나보군....)
사용자 삽입 이미지
궂이 양 많은 약관을 뒤져보지 않더라도 박스 안 한장짜리 안내문에도 해당 내용이 기재되어 있다...


아이폰을 사용한다는건 이 약관에 동의한다는 것이고, 사용자 몰래... 이딴 헛소리는 좀 하지 마라...
(사실확인 안하고 기사쓰는 X들은 다 짤라버려야....)
안드로이드 기기 역시 이와 비슷한 조항이 있을 것으로 생각된다..

모르면 좀 찾아보자....
And