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

Обсуждение в разделе «Статьи», начал(-а) afonn, 16.12.2017.

  1. afonn

    afonn Member

    Регистрация:
    10.08.2015
    Сообщения:
    108
    Одобрения:
    27
    Репутация:
    0
    Сегодня, ковыряя отснифеный трафик официального приложения ВКонтакте под Android, пытаясь найти особенности, по которым API отсеивает официальные приложения для получения музыки, я наткнулся на запросы довольно интересного содержания...

    Disclaimer
    Сразу хочу отметить, что я снимаю с себя любую ответственность за возможный ущерб, который Вы можете причинить себе/своим устройствам или другим/чужим устройствам, выполняя действия, которые здесь описаны. Также я не призываю заниматься подобной деятельностью на своих сетях. Информация предоставлена исключительно в ознакомительных целях и крайне не рекомендуется к воспроизведению/повтору на личных устройствах, сетях, а также строго не рекомендуются эксплуатации на пользователях, поскольку снифинг чужих данных - дело незаконное, а свое устройство я промониторить в праве.

    И да, для любителей найти рекламу там, где её нет: этот пост/статья -- не является рекламой. Упомянутые ниже приложения приводятся в качестве примеров, не более.



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

    [​IMG]


    Предисловие
    Года два назад я тоже снифил трафик с помощью Shark for Root, отправляемый ВКонтакте с телефона. Ничего странного я тогда не видел. Сейчас же, когда нас окружают "умные" (именно в кавычках, ибо они идиотские) ленты, машинное обучение и прочее, техника стала, мягко говоря, следить. С одной стороны, это хорошо (мы даем пищу для машин, чтобы они обучались), с другой - плохо (данные о нас сохраняются на серверах).

    Результаты
    Проснифив только авторизацию, аудиозаписи и вообще первые минуты после авторизации в приложении, уже можно поймать все эти странные запросы. Итак:

    [​IMG]
    Самое странное, что мне показалось - это то, что приложение сливает абсолютно весь список пользовательских приложений, установленных на устройстве. Зачем?! (в центре скрина влепил decoded-строку параметра apps)
    [​IMG]
    Довольно часто промелькивали запросы к некоему сервису vigo.ru. Сервис позиционирует себя как аналитика в передаче, поиска ошибок, проблем и обработке видео. Но странно, ведь я всего лишь авторизовался, перешел в аудио и пролистал свою стену, где не было ни единого видеоролика (которые должны были автоматически проигрываться?), а запросов скопилось около 5-7 штук. Помимо notify еще был network_status.
    [​IMG]
    Вот опять. wallGetWrapNew - по названию понятно, что это запрос на получение чьей-то стены (пользователя или сообщества). Зачем тут передавать информацию о устройстве? Максимум, что приходит на ум - для статистики. Хорошо, а зачем данные о типе сети? Еще, что не относится к сливу информации: довольно раздражает то, что везде пытаются всунуть рекламу - лишь посмотреть на параметр fields.
    [​IMG]
    Приложение отправляет все действия пользователя: перешел через меню в раздел "аудио", "geo_data" - вероятно, отправлял бы примерное (или даже точное) местоположение устройства. Спрашивается, зачем, если пользователь не просит находить что-то по близости? Нет, облегчать пользователю жизнь, подсказывая релевантные данные в поиске, например - в этом ничего плохого нет, но зачем отправлять геоданные просто так, при открытии поста? Не понятно.
    [​IMG]
    Приложение делает бенчмарки и зачем-то передает время запроса к API и время загрузки изображений. Видимо, усредненные данные.
    [​IMG]
    Пока не понял когда, при каких условиях и зачем, в приложении подгружается невидимая WebView со страницей m.vk.com/counters.php. Ибо от нее же потом подгружаются две метрики-пикселя (внизу HTML-кода) и favicon. Накрутка статистики? upd: спустя еще пару минут отправился еще один запрос сюда же, уже с другими числами в тегах img - для того, чтобы тот самый пиксель не загрузился из кэша, а запрос к метрике все таки был реальным.
    [​IMG]
    Чуток не негатива: приложение отправляет сообщения об ошибках, если, например, была попытка загрузить изображение (например, оно было прикреплено к посту), но произошла какая-то ошибка. На скрине предоставлен пример, когда изображение просто отсутствовало на сервере (ошибка 404 Not Found). upd: хотя вот попался момент, когда state=success и никаких других "опознавательных знаков" не было.
    [​IMG]
    С видеозаписями обстоят дела еще хуже. Здесь передается информация о таких событиях как "volume_on", "volume_off" (видимо, включение/выключение звука, но это неточно), "fullscreen_on", "fullscreen_off" (переход и выход в/из полноэкранного режима), событие "video_play", которое просто отсылает текущую позицию просмотра видео, где-то с периодичностью 10-20 секунд. upd: хотя вот Андрей подсказал идею, для чего это сделано: для того, чтобы запоминалось место, на котором пользователь остановился при просмотре видео, чтобы он мог переключиться с мобильного на ПК и на ПК продолжить смотреть с места, где был в последний раз на мобильном.
    [​IMG]

    При закрытии страницы (активити) с видео, приложение запрашивает метод video.viewSegments, в параметрах которого передаются рейнжы (отрезки) таймкода, которые были просмотрены пользователем.
    Все это - официальное приложение. На момент написания этой статьи (29 июля 2017 года) была версия 4.12.1.

    В Kate Mobile таких сливов замечено не было. Единственное, после ввода в эксплуатацию нового алгоритма выдачи аудиозаписей, и Kate, и официальному приложению нужно обращаться к Google Accounts для получения некого receipt-токена. И всё.

    О том, как работают приложения на iOS, Windows Phone мне только можно догадываться. Их пакеты не перехватывал, и устройств не имею.

    Повторюсь, такие данные, как ближайшие точки доступа Wi-Fi, текущее местоположение пользователя, а также все его действия не отправляются сторонними приложениями, такими как Kate Mobile, VK Coffee (модификация официального, с вырезанными метриками и пр.), моим сайтом-клиентом APIdog и пр.
     
  2. afonn

    afonn Member

    Регистрация:
    10.08.2015
    Сообщения:
    108
    Одобрения:
    27
    Репутация:
    0
    Update 2
    А еще давайте сразу, вот что ответил (где-то) Андрей Рогозов про данную информацию.

    [​IMG]


    >>>

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

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

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

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

    [​IMG]
    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..

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

    afonn Member

    Регистрация:
    10.08.2015
    Сообщения:
    108
    Одобрения:
    27
    Репутация:
    0
    [​IMG]
    Сбор информации о текущей точке доступа.
    Вот тут то, по логу после объявления и заполнения экземпляра класса значениями, мы и понимаем, что C2022d -- это класс (а если быть правильнее, то структура), хранящий в себе данные о точке доступа Wi-Fi. Чуть ниже собираются данные обо всех окружающих точках.

    [​IMG]
    В цикле перебирается результат сканирования (160), создается и заполняется класс C2022d = информация о ТД Wi-Fi (175-178) и добавляется в список (179).
    А еще ниже мы видим, как пытаются собрать данные о CID и LAC.

    <wikipedia>
    Cell ID, CID — «идентификатор соты». Это параметр, который присваивается оператором каждому сектору каждой базовой станции, и служит для его идентификации.
    LAC, Local Area Code — код локальной зоны. Локальная зона — это совокупность базовых станций, которые обслуживаются одним BSC — контроллером базовых станций.
    Базовая станция — совокупность оборудования одного оператора, установленного на одной площадке (вышке, здании) и предназначенного для непосредственной связи сети с мобильными терминалами абонентов
    </wikipedia>
    [​IMG]
    Coarse location - примерное местоположение
    Возвращаемся назад к C1998a.java...

    [​IMG]
    Тоже интересно... apps (приложения), first_install_time (время первой установки)...
    ... Неужто тоже отправляет список установленных приложений? C2015a - еще одна структура в com.my.tracker.providers.C2016b. Определение не интересует, использование тут же...

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

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

    [​IMG]
    Здесь же, откуда-то собираются списки электронных адресов, ID одноклассников, ВК, ICQ (лол), и другие ID...
    [​IMG]
    ... sim_loc (?), ID и имя оператора, информация о соединении и его типе (Wi-Fi/мобильная связь), включенности BlueTooth...
    [​IMG]
    ..., информация об устройстве, названии и версии ОС на устройстве, производителе, MAC-адресе устройства, языке, часовом поясе, ... и еще пара мелочей.
    И вот собрали мы это всё... А зачем? В классе com.my.tracker.async.commands.C1990f это всё отправляется.

    [​IMG]
    73 - создается экземпляр сборщика, который собирал всё то, что мы выше просмотрели. 83 - (без скрина, поверьте наслово) генерируется JSON-строка со всеми данными, 85 - данные отправляются...
    Метод m1919a ... где же он? Он в родительном классе C1988c

    [​IMG]
    Грубо говоря - здесь делается запрос в интернет по адресу... указанному в конструкторе класса C1988c, но он же не создавался выше!
    Глубоко порывшись в поиске по всему проекту (по названию поля f1295b, по унаследованным классам), пришел к методу C2013a.m2085a..

    [​IMG]
    А вот и адрес, куда отправлялась информация
    Всё, на этом хватит с MyTracker...

    ru.mail.libverify
    ru.mail.ibverify.requests.C4109e

    [​IMG]
    Класс C4109e, в самом начале строка, содержащая домен mail.ru, куда будут делаться запросы.
    [​IMG]
    Прямо в этом же классе (см. заголовок Sublime) C4109e содержатся данные о IMEI, IMSI, телефоне, операторе, широте/долготе и точности местоположения.
    [​IMG]
    В C4109e: метод mo8472d выбирает хост из f2386b (через один скрин выше), куда отправлять данные
    [​IMG]
    В C4109e: в методе m3158u формируется полный URL-адрес для запроса, используя метод mo8472d, который описан выше.
    На этом пока всё.

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


    источник тут http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-07-29
    http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-chast-2-07-31
     
    #3 afonn, 16.12.2017
    В последний раз редактировалось: 17.12.2017
    Это одобряет Lam3rsha.
  4. Suicide

    Suicide Super Moderator
    Администрация

    Регистрация:
    24.04.2009
    Сообщения:
    2 328
    Одобрения:
    2 466
    Репутация:
    691
    ТС почему ссылки на источник не указываешь?
     
  5. afonn

    afonn Member

    Регистрация:
    10.08.2015
    Сообщения:
    108
    Одобрения:
    27
    Репутация:
    0
    исправляюсь забыл :)
     
    Это одобряет Suicide.
  6. grimnir

    grimnir Reservists Of Antichat

    Регистрация:
    23.04.2012
    Сообщения:
    975
    Одобрения:
    536
    Репутация:
    171
    _________________________
  7. Keris

    Keris New Member

    Регистрация:
    6.10.2013
    Сообщения:
    14
    Одобрения:
    1
    Репутация:
    0
    Люди - тупые! Вот моей фотки напрмер в интернете нету, по крайне мере той которую выставил бы я. Вероятно человек 10 могли бы выставить фотку со мной, однако верифицировать меня как либо невозможно.
     
Загрузка...
Similar Threads - ВКонтакте собирает информацию
  1. Veil
    Ответы:
    7
    Просмотры:
    4 122
  2. Kevin Shindel

    Авторские статьи Собираем OpenWRT

    Ответы:
    7
    Просмотры:
    6 980
  3. !JaX!
    Ответы:
    113
    Просмотры:
    62 132
  4. gibson
    Ответы:
    15
    Просмотры:
    15 644