2011년 데프콘 포렌직 300번, 그리고 이번 8회 해킹방어대회 예선 1번 문제가 거의 유사했다.
지난 데프콘 때 아쉽게 못푼 문제였는데 그때 좀 더 코드를 다듬어 놓는다는걸 깜빡하고 있다 이번 기회에 작성하게 되었다.
#!C:\Python27\Python.exe
# -*- coding: utf-8 -*-
# Code ByJJoon (2011-06-26)
# 해킹방어대회 예선 1번 문제 풀이용
from datetime import datetime
import sqlite3, sys
# kml은 구글어스 파일
# /private/var/root/Library/Caches/locationd/consolidated.db
if len(sys.argv) < 2:
print 'Usage:%s consolidated.db' % sys.argv[0]
sys.exit(1)
conn = sqlite3.connect(sys.argv[1])
conn.row_factory = sqlite3.Row
curs = conn.cursor()
curs.execute('select * from celllocation order by timestamp desc')
f = open('output.kml', 'w')
# KML header
f.write('''<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document><name>Iphone Tracker.kml</name><Style id="sn_ylw-pushpin"></Style><Folder>
<name>Cell</name><open>1</open>''')
# KML data
for row in curs:
lat, lon, ts = row["Latitude"], row["Longitude"], row["Timestamp"]
# Apple uses timestamps that store the number of seconds since 2001...
# KST (UTC+9) : 32400
dt = datetime.utcfromtimestamp(int(ts) + 978307200)
log = dt.strftime("%Y-%m-%d %H:%M:%S")
f.write('''
<Placemark>
<name>%s</name>
<Point>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>%s,%s,0</coordinates>
</Point>
</Placemark>''' % (log, lon, lat) )
# KML footer
f.write('''</Folder></Document></kml>''')
f.close()
실행하면 output.kml 파일이 생성되며 이걸 구글어스에서 열면 아래와 같이 알 수 있다.