Про те, як ВКонтакте збирає інформацію про нас: частина 2

  1. Update 2
  2. Наш інструментарій на сьогодні
  3. результати
  4. com.my.tracker
  5. ru.mail.libverify
  6. підсумок
  7. Обговорення

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

джерело: http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-chast-2-07-31

Перша частина статті: http://www.securitylab.ru/analytics/487640.php

Автор: Владислав Велюга (vlad805)

Update 2

А ще давайте відразу, ось що відповів (десь) Андрій Рогозів про дану інформацію.

А ще давайте відразу, ось що відповів (десь) Андрій Рогозів про дану інформацію

>>>

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

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

Наш інструментарій на сьогодні

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

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

Декомпілювати додаток, ми бачимо наступне

Декомпілювати додаток, ми бачимо наступне

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 ..

C1998a

Зліва - код, праворуч - попередня стаття і скрін Андрія, про який він говорив, що додаток зливає точки доступу Wi-Fi.

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


Збір інформації про поточну точки доступу.

Ось тут то, по балці після оголошення і заповнення екземпляра класу значеннями, ми і розуміємо, що C2022d - це клас (а якщо бути точніше, то структура), який зберігає в собі дані про точку доступу Wi-Fi. Трохи нижче збираються дані про всі оточуючих точках.


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

А ще нижче ми бачимо, як намагаються зібрати дані про CID і LAC.

< wikipedia >
Cell ID, CID - «ідентифікатор стільники». Це параметр, який присвоюється оператором кожному сектору кожної базової станції, і служить для його ідентифікації.
LAC, Local Area Code - код локальної зони. Локальна зона - це сукупність базових станцій, які обслуговуються одним BSC - контролером базових станцій.
Базова станція - сукупність обладнання одного оператора, встановленого на одному майданчику (вишці, будівлі) та призначеного для безпосереднього зв'язку мережі з мобільними терміналами абонентів
</ Wikipedia> <   wikipedia   >   Cell ID, CID - «ідентифікатор стільники»
Coarse location - зразкове місце розташування

Повертаємося назад до C1998a.java ...


Теж цікаво ... apps (додатки), first_install_time (час першої установки) ...

... Невже теж відправляє список встановлених додатків? C2015a - ще одна структура в com.my.tracker.providers.C2016b. Визначення не цікавить, використання тут же ...


Отримання списку додатків (84), створення власного списку додатків зі своїми структурами (88), обхід всього списку циклом (90), отримання інформації про один додатку (91), якщо воно не системне ( пруф ), То додається в список.

Знову повертаємося в C1998a.java.


Тут же, звідки-то збираються списки електронних адрес, ID однокласників, ВК, ICQ (лол), і інші ID ... Тут же, звідки-то збираються списки електронних адрес, ID однокласників, ВК, ICQ (лол), і інші ID
... sim_loc (?), ID і ім'я оператора, інформація про з'єднання і його типі (Wi-Fi / мобільний зв'язок), включеності BlueTooth ...
..., інформація про пристрій, назві і версії ОС на пристрої, виробника, MAC-адресу пристрою, мовою, часовому поясі, ... і ще пара дрібниць.

І ось зібрали ми це все ... А навіщо? У класі com.my.tracker.async.commands.C1990f це все відправляється.


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

Метод m1919a ​​... де ж він? Він в родовому класі C1988c


Грубо кажучи - тут робиться запит в інтернет за адресою ... зазначеному в конструкторі класу C1988c, але він же не створювалася вище!

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


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

Все, на цьому вистачить з MyTracker ...

ru.mail.libverify

ru.mail.ibverify.requests.C4109e

C4109e

Клас C4109e, на самому початку рядок, що містить домен mail.ru, куди будуть робитися запити. Клас C4109e, на самому початку рядок, що містить домен mail
Прямо в цьому ж класі (див. Заголовок Sublime) C4109e містяться дані про IMEI, IMSI, телефоні, операторі, широті / довготі і точності розташування.
У C4109e: метод mo8472d вибирає хост з f2386b (через один скрін вище), куди відправляти дані
У C4109e: в методі m3158u формується повний URL-адресу для запиту, використовуючи метод mo8472d, який описаний вище.

На цьому поки все.

підсумок

Додаток ВКонтакте для Android крім своїх метрик і телеметрії відправляє такий же, і навіть більший, обсяг даних для третіх осіб: MyTracker і MailRu LibVerify.

Обговорення

В коментах під постом у мене на стіні .

Невже теж відправляє список встановлених додатків?
А навіщо?
Де ж він?