Кадры из фильма «50 оттенков серого»
На этот раз с помощью незамысловатого куска кода на javascript заглянем в таинственные глубины человеческих предпочтений. А именно получим часть списка закладок («лайков» записей сообществ) аккаунта ВКонтакте.
По данным wordstat.yandex.ru, до 2000 раз в месяц у поискового робота спрашивают «как посмотреть кто что лайкает». Ответом в поисковой выдаче является вирусная программка LikeCheсker, которая на поставленный вопрос на самом деле не отвечает. А мы ответим.
Зачем это нужно? Если верить интернету (а ему лучше не верить) по, например, почерку человека можно определить его характер. Например
Саркастичных людей можно распознать по написанию буквы «ё». Чем необычнее изображение точек, помещенных над этой буквой, тем острее его чувство юмора и ярче его способность к подражанию.
Есть у меня предположение, что по картинкам и постам, которые человек «лайкает» можно построить более точный портрет личности, чем по его почерку. Однако для получения этой информации нужно немного потрудиться.
Описание ситуации
ВКонтакте
Раньше информация о том какие записи пользователь отмечает сердечком была полностью конфиденциальна и видна только самому пользователю. После очередного редизайна конфиденциальность пропала. Если пользователь А является другом пользователя Б и они подписаны на одно и то же сообщество, то он может узнать под конкретной записью этого сообщество «лайкнул» ли её пользователь Б.
В случае десктопной версии VK.com информация о том, что пользователь Б её «лайкнул» отображается в виде его аватара, если навести мышку на сердечко:
Постановка задачи
Нашей целью будет получить список записей, которые пользователь отметил сердечком. Не знаю можно ли с помощью VK API добраться до этой информации (беглым взглядом по документации такой возможности не обнаружил) мы пойдём простым путём — через браузер.
Итак, для того, чтобы получить список чужого избранного нам нужно:
- Быть с жертвой друзьями в ВК
- Подписаться на те же сообщества что и он
- Пробрутфорсить все записи сообществ
С первым пунктом всё понятно, второй и третий будем автоматизировать.
К делу
Чтобы не трогать реально существующих друзей зарегистрируем два аккаунта и подружим их.
Тратим 30 рублей, покупаем две виртуальные симки (без телефона VK не регистрирует) и регистрируем героев фильма «50 оттенков серого»:
Аккаунтом Грея пользуемся как обычно — подписываемся вручную на разные сообщества и отмечаем «лайками» различные записи в ленте.
Из аккаунта Анастейши начинаем охоту на «Лайки». Помогать нам сегодня будет 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]);
}
}
}
Результат:
Успех!
Заключение
«It's not a bug — it's a feature» скажите вы и возможно я с вами соглашусь, но мне бы хотелось видеть в настройках приватности галочку выключения такой «feature».
Конечно, эта информация не прям такая личная и её трудно использовать против человека. Тем не менее я уверен, что бывают случаи, когда такой анализ, в дополнение к чему либо или самостоятельно поможет понять мысли человека, его характер, политические, религиозные взгляды и прочее. Повторюсь — не для всех и не всегда.
Автор: vadimmironov