Iphone Tracker (제 8회 해킹방어대회 예선 1번)

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 파일이 생성되며 이걸 구글어스에서 열면 아래와 같이 알 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다