Все, наверное, заметили шумиху последних дней вокруг «слежки» за пользователями iPhone. Ребята с O'Reilly, которые опубликовали информацию о пресловутом файле consolidated.db, сами удивлены, насколько большой резонанс история вызвала на телевидении и в других СМИ.
Но продолжение этой истории ещё более интересное. Вполне возможно, что разработчики iOS 4 внедрили эту функцию по примеру Android, но в силу криворукости непонятных причин реализовали её не совсем корректно.
Некий разработчик Магнус Эрикксон (Magnus Eriksson), услышав про скандал с айфонами, решил покопаться в кэше своего смартфона Android. И после некоторых изысканий обнаружил файлы cache.cell и cache.wifi, очень похожие на вышеупомянутый consolidated.db. Файлы находятся в папке /data/data/com.google.android.location/files.
Вот пример данных, которые там хранятся (тоже в незащищённом виде): Это координаты (долгота и широта), а также время и дата.
$ ./parse.py cache.cell db version: 1 total: 41 key accuracy conf. latitude longitude time 240:5:15:983885 1186 75 57.704031 11.910801 04/11/11 20:03:14 +0200 240:5:15:983882 883 75 57.706322 11.911692 04/13/11 01:41:29 +0200 240:5:75:4915956 678 75 57.700175 11.976824 04/13/11 11:52:16 +0200 240:5:75:4915953 678 75 57.700064 11.976629 04/13/11 11:53:09 +0200 240:7:61954:58929 1406 75 57.710205 11.921849 04/15/11 19:46:31 +0200 240:7:15:58929 -1 0 0.000000 0.000000 04/15/11 19:46:32 +0200 240:5:75:4915832 831 75 57.690024 11.998419 04/15/11 16:13:53 +0200
Эрикксон написал программку, которая ищет и показывает данные с координатами из этих файлов. Можете установить и посмотреть на своём телефоне.
Однако, есть важное отличие в том, как эта функция работает на Android-устройствах.
// Maximum time (in millis) that a record is valid for, before it needs // to be refreshed from the server. private static final long MAX_CELL_REFRESH_RECORD_AGE = 12 * 60 * 60 * 1000; // 12 hours private static final long MAX_WIFI_REFRESH_RECORD_AGE = 48 * 60 * 60 * 1000; // 48 hours // Cache sizes private static final int MAX_CELL_RECORDS = 50; private static final int MAX_WIFI_RECORDS = 200;
Здесь максимальное количество хранимых данных ограничено 50 записями для сот и 200 записями для WiFi-точек, соответственно. Есть также ограничение по времени: 12 часов для сот и 48 часов для WiFi, тогда как у iPhone хранится полный архив месяцами (с момента установки iOS 4).
Как и в случае с iPhone, если абонент попал в зону действия соты, где уже был раньше, то старая информация заменяется новой. Кстати, по этой причине и «шпион» от iPhone не такой страшный, как показалось сначала. В большинстве случаев эти данные вообще не пригодны для составления истории перемещений пользователя, разве что только можно увидеть отдельные путешествия по уникальным маршрутам.
По мнению Эрикссона, данная фича работает в Android таким же образом, как и в iPhone: координаты вычисляются точно так же, по координатам ближайших сот, и, возможно, периодически отправляются в Apple/Google. Отличие в том, что Google аккуратно подошёл к защите данных, а разработчики из Apple, видимо, допустили обидный баг, не озаботившись условиями на уничтожение данных, и теперь расплачиваются за это
кармойрепутацией бренда. Очевидно, баг будет исправлен ближайшим патчем для iOS.
Хм, я вроде где-то в своем планшете видел галочку «Отправлять данные о местоположении», которую можно снять, а если поставить - оно спрашивает, согласен ли я следить за своим местоположением. Или мне показалось...