О том, как ВКонтакте собирает информацию о нас. Часть 2

Обсуждения в комментариях под моим постом в ВК тоже оказались довольно интересными. Туда пришел бывший разработчик этого самого приложения Григорий Клюшников и разработчик его модификации Эдуард Безменов. Оба они рассказали немало интересных вещей. Что ж, мне тоже стало интересно, что еще я не смог наснифить на реальном устройстве и о чем конкретно они говорили.

----------------------<cut>----------------------

Update 2
А еще давайте сразу, вот что ответил (где-то) Андрей Рогозов про данную информацию.

О том, как ВКонтакте собирает информацию о нас. Часть 2

Моя статья о сборе информации о пользователях официального приложения ВКонтакте под Android уж слишком разошлась в Интернете. Я заметил, что не так уж и мало людей относится к конфиденциальности своих данных не наплевательски и приняли материал довольно "тепло".

Обсуждения в комментариях под моим постом в ВК тоже оказались довольно интересными. Туда пришел бывший разработчик этого самого приложения Григорий Клюшников и разработчик его модификации Эдуард Безменов. Оба они рассказали немало интересных вещей. Что ж, мне тоже стало интересно, что еще я не смог наснифить на реальном устройстве и о чем конкретно они говорили.

Наш инструментарий на сегодня

Имеется установочный APK-файл приложения версии 4.12.1. Имеются его исходники (код), полученные путем декомпилирования приложения (грубо говоря, установочный файл был разобран и по нему воссоздан код на программном языке, в нашем случае — Java). Декомпилятор — JADX.

Небольшой ликбез
В Java-проекте (а приложение под Android таковым и является) весь код поделен на классы; классы сгруппированы в папки — пакеты (пэкедж, package), пакет может находится в другом пакете. Каждое приложение может иметь неограниченное число пакетов, которые могут "общаться", взаимодействовать друг с другом.

Декомпилировав приложение, мы видим следующее

О том, как ВКонтакте собирает информацию о нас. Часть 2

com.my.tracker — тот самый трекер MailRu, о котором говорил Эдуард и Григорий; com.my.target — пакет, связанный с трекером; com.vkontakte.android — непосредственно само приложение и ru.mail.libverify — еще один пакет от MailRu

С декомпилированным кодом будет сложнее, поскольку не все переменные и классы будут названы именами, которые будут понятны человеку. В основном это названия чем-то напоминающие шестнадцатеричное число, например, C1998a.java. Есть у меня еще одно предположение, что код мог быть специально обфусцирован (obfuscate — делать неочевидным, запутанным, сбивать с толку). Но некоторые "зацепки" остаются, по которым можно понять что это за код, за что он отвечает и что именно что делает.

Результаты

Не буду томить, сразу к делу.

com.my.tracker

Начнем свое путешествие с файла класса com.my.tracker.builders.C1998a..

О том, как ВКонтакте собирает информацию о нас. Часть 2

Слева — код, справа — предыдущая статья и скрин Андрея, про который он говорил, что приложение сливает точки доступа Wi-Fi.

Теперь следим за ходом мысли: в строке 298 (чуть выше строки с "around", сорян, урезал номера в скрине) объявляется переменная c2002d2 с типом C2022d, получаемая из итератора (грубо говоря, коллекция/массив/список). Класс C2022d определен в пакете com.my.tracker.providers в классе C2023d. Определение нам его не интересно, ибо оно не содержит понятных человеку названий полей. В этом же классе есть объявление этого класса и заполнение этого класса данными.

О том, как ВКонтакте собирает информацию о нас. Часть 2

Сбор информации о текущей точке доступа.

Вот тут то, по логу после объявления и заполнения экземпляра класса значениями, мы и понимаем, что C2022d — это класс (а если быть правильнее, то структура), хранящий в себе данные о точке доступа Wi-Fi. Чуть ниже собираются данные обо всех окружающих точках.

О том, как ВКонтакте собирает информацию о нас. Часть 2

В цикле перебирается результат сканирования (160), создается и заполняется класс C2022d = информация о ТД Wi-Fi (175-178) и добавляется в список (179).

А еще ниже мы видим, как пытаются собрать данные о CID и LAC.

Cell ID, CID — «идентификатор соты». Это параметр, который присваивается оператором каждому сектору каждой базовой станции, и служит для его идентификации.
LAC, Local Area Code — код локальной зоны. Локальная зона — это совокупность базовых станций, которые обслуживаются одним BSC — контроллером базовых станций.
Базовая станция — совокупность оборудования одного оператора, установленного на одной площадке (вышке, здании) и предназначенного для непосредственной связи сети с мобильными терминалами абонентов

О том, как ВКонтакте собирает информацию о нас. Часть 2

Coarse location — примерное местоположение

Возвращаемся назад к C1998a.java...

О том, как ВКонтакте собирает информацию о нас. Часть 2

Тоже интересно... apps (приложения), first_install_time (время первой установки)...

... Неужто тоже отправляет список установленных приложений? C2015a — еще одна структура в com.my.tracker.providers.C2016b. Определение не интересует, использование тут же...

О том, как ВКонтакте собирает информацию о нас. Часть 2

Получение списка приложений (84), создание собственного списка приложений со своими структурами (88), обход всего списка циклом (90), получение информации об одном приложении (91), если оно не системное (пруф), то добавляется в список.

Снова возвращаемся в C1998a.java.

О том, как ВКонтакте собирает информацию о нас. Часть 2

Здесь же, откуда-то собираются списки электронных адресов, ID одноклассников, ВК, ICQ (лол), и другие ID...

О том, как ВКонтакте собирает информацию о нас. Часть 2

... sim_loc (?), ID и имя оператора, информация о соединении и его типе (Wi-Fi/мобильная связь), включенности BlueTooth...

О том, как ВКонтакте собирает информацию о нас. Часть 2

..., информация об устройстве, названии и версии ОС на устройстве, производителе, MAC-адресе устройства, языке, часовом поясе, ... и еще пара мелочей.

И вот собрали мы это всё... А зачем? В классе com.my.tracker.async.commands.C1990f это всё отправляется.

О том, как ВКонтакте собирает информацию о нас. Часть 2

73 — создается экземпляр сборщика, который собирал всё то, что мы выше просмотрели. 83 — (без скрина, поверьте наслово) генерируется JSON-строка со всеми данными, 85 — данные отправляются...

Метод m1919a ... где же он? Он в родительном классе C1988c

О том, как ВКонтакте собирает информацию о нас. Часть 2

Грубо говоря — здесь делается запрос в интернет по адресу... указанному в конструкторе класса C1988c, но он же не создавался выше!

Глубоко порывшись в поиске по всему проеку (по названию поля f1295b, по унаследованным классам), пришел к методу C2013a.m2085a..

О том, как ВКонтакте собирает информацию о нас. Часть 2

А вот и адрес, куда отправлялась информация

Всё, на этом хватит с MyTracker...

ru.mail.libverify

ru.mail.ibverify.requests. C4109e

О том, как ВКонтакте собирает информацию о нас. Часть 2

Класс C4109e, в самом начале строка, содержащая домен mail.ru, куда будут делаться запросы.

О том, как ВКонтакте собирает информацию о нас. Часть 2

Прямо в этом же классе (см. заголовок Sublime) C4109e содержатся данные о IMEI, IMSI, телефоне, операторе, широте/долготе и точности местоположения.

О том, как ВКонтакте собирает информацию о нас. Часть 2

В C4109e: метод mo8472d выбирает хост из f2386b (через один скрин выше), куда отправлять данные

О том, как ВКонтакте собирает информацию о нас. Часть 2


В C4109e: в методе m3158u формируется полный URL-адрес для запроса, используя метод mo8472d, который описан выше.

На этом пока всё.

Итог

Приложение ВКонтакте для Android помимо своих метрик и телеметрий отправляет такой же, и даже больший, объем данных для третьих лиц: MyTracker и MailRu LibVerify.