Смотрим часть чужого избранного ВКонтакте

a11cfac1226347c3a5c3144817d6cdc9.png
Кадры из фильма »50 оттенков серого»

На этот раз с помощью незамысловатого куска кода на javascript заглянем в таинственные глубины человеческих предпочтений. А именно получим часть списка закладок («лайков» записей сообществ) аккаунта ВКонтакте.

По данным wordstat.yandex.ru, до 2000 раз в месяц у поискового робота спрашивают «как посмотреть кто что лайкает». Ответом в поисковой выдаче является вирусная программка LikeCheсker, которая на поставленный вопрос на самом деле не отвечает. А мы ответим.

Зачем это нужно? Если верить интернету (а ему лучше не верить) по, например, почерку человека можно определить его характер. Например

Саркастичных людей можно распознать по написанию буквы «ё». Чем необычнее изображение точек, помещенных над этой буквой, тем острее его чувство юмора и ярче его способность к подражанию.

Есть у меня предположение, что по картинкам и постам, которые человек «лайкает» можно построить более точный портрет личности, чем по его почерку. Однако для получения этой информации нужно немного потрудиться.

Описание ситуации


ВКонтакте


Раньше информация о том какие записи пользователь отмечает сердечком была полностью конфиденциальна и видна только самому пользователю. После очередного редизайна конфиденциальность пропала. Если пользователь А является другом пользователя Б и они подписаны на одно и то же сообщество, то он может узнать под конкретной записью этого сообщество «лайкнул» ли её пользователь Б.

В случае десктопной версии VK.com информация о том, что пользователь Б её «лайкнул» отображается в виде его аватара, если навести мышку на сердечко:

e61b996a3bfc4850878bb7ed4de773c8.png

Постановка задачи


Нашей целью будет получить список записей, которые пользователь отметил сердечком. Не знаю можно ли с помощью VK API добраться до этой информации (беглым взглядом по документации такой возможности не обнаружил) мы пойдём простым путём — через браузер.

Итак, для того, чтобы получить список чужого избранного нам нужно:

  • Быть с жертвой друзьями в ВК
  • Подписаться на те же сообщества что и он
  • Пробрутфорсить все записи сообществ

С первым пунктом всё понятно, второй и третий будем автоматизировать.

К делу


Чтобы не трогать реально существующих друзей зарегистрируем два аккаунта и подружим их.
Тратим 30 рублей, покупаем две виртуальные симки (без телефона VK не регистрирует) и регистрируем героев фильма »50 оттенков серого»:

cf6ea0a603584efdb60e794a4b799421.png

Аккаунтом Грея пользуемся как обычно — подписываемся вручную на разные сообщества и отмечаем «лайками» различные записи в ленте.

Из аккаунта Анастейши начинаем охоту на «Лайки». Помогать нам сегодня будет Javascript. Можно использовать букмарклеты, можно сделать Google Extension. Мы пойдём по-простому, через Developer Console (F12).

1. Получаем список сообществ на странице жертвы:

var x = document.getElementsByClassName("module_body clear_fix");
for (var i = 0; i < x[1].children.length; i++) {
   console.log(x[1].children[i].children[0].children[0].href + " " + x[1].children[i].innerText)
}

2. Подписаться на них можно вот так:
document.location="https://vk.com/sci";
document.getElementById("public_subscribe").click()

3. Открываем новостную ленту и прокручиваем n раз:
document.getElementById("show_more_link").click();

4. Брутфорс записей в ленте:
var z = document.getElementsByClassName("post_like _like_wrap")
for (var k= 0; k< z.length; k++){
	z[k].onmouseover();
	z[k].focus();
}
var y = document.getElementsByClassName("like_tt_owners me_hidden _content")
	for (var j= 0; j< y.length; j++){
		for (var i = 0; i < y[j].children.length; i++) {
		 if (y[j].children[i].title == "Кристиан Грей"){
			console.log( "https://vk.com/feed?w=wall" + z[j].onmouseover.toString().split("'")[1]);
		  }
		}
	}

Результат:

73bb94ab48bb4733952e55963e4dca7f.png

Успех!

Заключение


«It’s not a bug — it’s a feature» скажите вы и возможно я с вами соглашусь, но мне бы хотелось видеть в настройках приватности галочку выключения такой «feature».

Конечно, эта информация не прям такая личная и её трудно использовать против человека. Тем не менее я уверен, что бывают случаи, когда такой анализ, в дополнение к чему либо или самостоятельно поможет понять мысли человека, его характер, политические, религиозные взгляды и прочее. Повторюсь — не для всех и не всегда.

Комментарии (22)

  • 5 декабря 2016 в 10:49

    +9

    Пока люди добровольно пользуются социальными сетями, все прочие вопросы приватности — детский лепет.

  • 5 декабря 2016 в 11:01

    +11

    Те кто заботятся о приватности — не лайкают :)
    • 5 декабря 2016 в 13:32 (комментарий был изменён)

      +2

      Те, кто заботится о приватности — вообще не пользуются социальными сетями ;)
  • 5 декабря 2016 в 11:12 (комментарий был изменён)

    +2

    После очередного редизайна
    Если имеется в виду тот, что в этом году, то… С пробуждением! https://vk.com/wall-32295218_3027
  • 5 декабря 2016 в 11:18

    –1

    Вроде как в блоке «like_tt_owners me_hidden _content» отображаются только 6 последних лайкнувших пользователей, вне зависимости от их общего количества, разве нет?

    Т.е. получается, что далеко не факт, что ваш «Кристиан Грей» найдется, если он поставил лайк достаточно давно в популярном посте.

    • 5 декабря 2016 в 11:24

      +1

      Первыми всегда отображаются друзья
    • 5 декабря 2016 в 11:28

      –1

      Там не 6 последних, а 6 случайных (меняются после refresh). Плюс, если среди лайкнувших есть твои друзья — они отображаются всегда.
      • 5 декабря 2016 в 12:51

        +1

        Спасибо за пояснения, но получается, что если среди лайкнувших данный пост моих друзей больше 6-ти, то отследить кого-то конкретного может не получиться, т.к. он может не отобразиться. Шансы тем меньше, чем больше мой френдлист, иначе говоря, методика не 100% рабочая.

        Создавать же отдельный аккаунт и добавлять во френды единственную жертву (попробуйте еще ее убедить принять вас в друзья) с целью последующего отслеживания ее лайков — это, мягко говоря, несколько неоправданно.

      • 5 декабря 2016 в 12:55

        +1

        А если эту запись лайкнули 10 моих друзей. Посмотрите под вашей аватаркой, например. И, насколько я помню, среди друзей отображаются 6 последних, а не случайных.
      • 5 декабря 2016 в 13:56

        +1

        Может, тогда надо загружать список всех лайкнувших? В браузере это можно сделать просто кликнув на надпись «Понравилось XX людям» во всплывающем окошке.
  • 5 декабря 2016 в 11:22

    0

    Вы путаете избранное и лайки, поменяйте заголовок!
    • 5 декабря 2016 в 11:24 (комментарий был изменён)

      +1

      Лайк это одновременно добавление в избранное, так что не путает
      Правда, таким способом можно достать далеко не всё содержимое избранного
      • 5 декабря 2016 в 11:30

        0

        Если добавить ещё брутфорс по фоткам, видео и дополнительно прогнать это не только по сообществам, но и по друзьям с открытыми страницами… Покрытие избранного станет выше)

      • 5 декабря 2016 в 12:41

        0

        А вы путаете с закладками…
        Первоначально избранное было на список групп, в которые можно было не вступать.
  • 5 декабря 2016 в 11:31

    +3

    Смотрим чужое избранное ВКонтакте

    Слишком громкое название. Описанным образом как минимум нельзя:
    • посмотреть людей и группы в закладках
    • посмотреть лайки к записям/фото/видео в группах, в которых целевой аккаунт не состоит
    • посмотреть лайки к записям/фото/видео на страницах пользователей, если не добиться того-же уровня доступа
  • 5 декабря 2016 в 12:16

    0

    Ревнивая женщина отслеживает лайки там где не надо быстрее и эффективнее
    • 5 декабря 2016 в 12:54

      –1

      100%

      А вообще есть еще сайты, анализирующие кросс-лайки на страницах, и т.д.

  • 5 декабря 2016 в 12:16

    0

    Эх, начала читать статью в надежде получить некую аналитику. Например, сколько моих друзей и как часто лайкают котиков…
  • 5 декабря 2016 в 12:26

    –1

    Анастейша — забавное имя. Это то, как американцы читают имя Anastasia?
  • 5 декабря 2016 в 13:40

    +1

    Если пользователь А является другом пользователя Б и они подписаны на одно и то же сообщество, то он может узнать под конкретной записью этого сообщество «лайкнул» ли её пользователь Б.
     — быть подписаным или вступать в какое-либо сообщество не нужно, достаточно просто иметь возможность просмотреть записи сообщества.

    Дополнительно, так как выше уже была указана проблема при более чем 6ти друзьях, лайкнувших запись — сейчас есть возможность временно сократить список друзей, можно даже до одного. То есть на время сканирования мы убираем всех друзей, кроме нашей цели (друзья становятся нашими подписчиками, откуда их можно обратно добавить в друзья без каких-либо дополнительных действий).

    В связи с этим, да и не только — предлагаю следующее улучшение алгоритма:
    0) убираем из «друзей» всех, кроме нашей «жертвы».
    1) выбираем список групп для сканирования: сканируем все группы\подписки «жертвы» + все репосты «жертвы» из групп не входящих в список (например, человек репостнул запись пол года назад, а сейчас уже отписался от сообщества, ввиду «палевности»), + сканируем записи всех открытых друзей жертвы на наличие его лайков, и — если это группа — выбираем тоже в список для скана.
    2) дополнительно — можно сформировать список топ 10\100 групп во всём вк + топ групп всех его друзей.
    3) сканируем полученный список групп (вступать не надо).
    4) возвращаем всех своих «друзей» на место.

    Если целью является поиск скрытых\не добавленных друзей — можно итеративно пройти всех друзей у друзей жертвы на наличие лайков\комментариев.

    • 5 декабря 2016 в 13:59 (комментарий был изменён)

      0

      Ещё один путь поиска, который упустил на первый взгляд — это те, кто не состоит в друзьях «жертвы», но ставили лайки на странице жертвы. Правда с лайками аватаров тут есть косяк — за последний год развелось слишком много ботов-спамеров, обращающих на себя так внимание. До лайков записей боты пока не добрались вроде бы.
  • 5 декабря 2016 в 14:01

    0

  • Быть с жертвой друзьями в ВК
Подписаться на те же сообщества что и он

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

К примеру, в своё время я написал на PHP скрипт который собирает подобную инфу. Он собирал лайки к записям, оставленные комментарии и лайки к комментариям. По этой инфе уже многое можно сказать о человеке. В планах было ещё много чего, но, к сожалению, он так и остался по большей части proof-of-concept.

© Habrahabr.ru