Шпионим онлайном или как определить, с кем общается ваша жертва VK
Вы когда ни будь задумывались, как работает Ваш статус online VK? Зашли в сеть, Вы online, вышли, стали offline, но что насчёт поддержания статуса в online? Мало кто знает, да скорее всего никто, но VK поддерживает Ваш онлайн за счёт вашей активности в чате и переходам по ссылкам (может ещё как то, но я не заметил). Сегодня Вы узнаете, как это могут использовать для слежки за Вами.

Сейчас у Вас возникнет вопрос, как зелёный огонёк или табличка online может помочь следить за мной. Просто будут знать, когда я нахожусь в сети, что я и сам понимаю, и подумаете, что автор с причудами и попросту закроете статью, но Вы даже не представляете себе, что существует подробное описании статуса online, с точностью до секунды, что могут использовать или уже используют для слежки за Вами.
Присаживайтесь по удобнее, сегодня вы познакомитесь с обратной стороной онлайна!
Изначально VK создавалась как площадка для общения с друзьями, близкими, коллегами и т.д.. С того времени механика статуса онлайн толком не поменялась. Вы по-прежнему сами сообщаете, находитесь Вы в сети или нет, а если Вы не можете этого сделать, то VK вешает на Вас статус, что Вы были в сети 5 минут назад. Костыль? Нет, суровая реализация тех времён.
Но что тут плохого, я просто показываю людям, что я в сети и готов к диалогу, пускай пишут мне сообщения. Да, Ваш статус онлайн большинство видит, как зелёный огонёк и при желании Вам действительно напишут, но для человека, который шпионит за Вами, это не просто зелёный огонёк, а нечто большее. Как минимум он видит вашу активность, перемещения внутри соц. сети, Вашу активность в чатах и даже может установить круг лиц, с кем Вы общаетесь.
Заинтересовало? Тогда добро пожаловать в суровый мир шпионажа!
Статья представлена в ознакомительных целях и может нарушать УК РФ, а именно статью 137. Нарушение неприкосновенности частной жизни.

Начнём это увлекательное приключение с небольшой подготовки! Для удачного шпионажа, у жертвы, как минимум должен быть включён статус online, а не скрыт. Далее Вы должны установить круг подозреваемых собеседников и т.д., давайте лучше по пунктам:
Включен ли статус online у жертвы?
Установлен круг её собеседников?
Стиль общения? Пишет длинные сообщения или любит спамить короткими.
Для выделения потенциальных собеседников достаточно посмотреть фотки жертвы, кто на них отмечен или стену, кто оставляет коменты и лайкает фотки с постами. Уже на основе этой информации сделать вывод, кого Вы будете брать на прицел. Конечно же этот этап можно исключить, но тогда Вам будет сложнее работать со статистикой, которую необходимо будет анализировать.
Стоп, стоп, стоп, зачем мне знать с кем общается моя жертва, если по задумке я сам пытаюсь это узнать и т.д., что вообще за бред?! Вы и будете знать, с кем общается Ваша жертва, просто нет никакого смысла брать весь список друзей на вооружение, так как у большинства пользователей этот список для видимости и общаются они далеко не со всеми, поэтому на старте Вы отсеиваете только значимых персон.
Далее необходимо знать приблизительный стиль общения. По сути, это нужно для определения, кто в данный момент пишет сообщение, но там есть и другие скрытые моменты, которые Вы сами потом заметите, поэтому стиль общения не сильно будет играть роль в шпионаже.
Хватит теорий, давай практику!

Приступим, как говорилось в начале, есть суровая механика статуса онлайн, которая давно не переписывалась, где Вы сами сообщаете, онлайн Вы или нет, казалось бы, ничего такого тут нет. Но на самом деле, когда Вы сообщаете свой статус онлайн, VK записывает его с точностью до секунды и в добавок к этому держит в открытом виде.
Знакомьтесь, foaf.php, механика из 2006 года.
https://vk.com/foaf.php?id=102343170 (цифры, это ваш id).
И самое интересное, когда Вы и Ваш друг сидите в открытом чате и общаетесь между собой, вы одновременно отсылаете свой статус онлайн, то есть если Вы отправили сообщение и друг его принял, то после отправки Вы говорите, что Вы в сети и друг, который получил сообщение, тоже говорит, что он в сети. Тем самым статус онлайн у вас будет содержать приблизительно одинаковое время.
Это самое пересечение времени можно использовать для определения собеседников. Также можно определить, кто первый написал сообщение. Когда жертва набирает сообщение, в момент самого набора текста отсылается статус онлайн (а если сообщение длинное, то каждые 5 секунд шлётся поддержание статуса, сообщая о том, что Вы всё ещё онлайн) и после отправки ещё раз подтверждается этот статс онлайн. То есть пока жертва сидит в наборе текста, можно узнать много интересных тонкостей, например приблизительную длину сообщения, важность сообщения и т.д. На самом деле много интересных моментов, которые Вы сможете потом сами увидеть.
А теперь та самая долгожданная практика!

Рассмотрим черновой вариант определения собеседников, когда два человека сидят в чате и общаются между собой. То есть у них обоих открыт диалог, и они оба пишут друг другу сообщения, не переключаясь на другие диалоги.
Для реализации задуманного я взял NodeJS, но тут можно обойтись любым другим ЯП, или вообще bash скриптом, не суть. Идём по пунктам:
Убедиться, что у жертвы включен статус online и у её собеседников.
Подготовить id жертвы и список id её подозреваемых, с кем может общаться жертва.
Определить как часто спамит жертва, если любит писать длинные сообщения, то foaf.php можно опрашивать раз в 3 секунды, ничего страшного Вы не пропустите. Если цель из тех, кто любит каждую букву слать отдельным сообщением, то лучше foaf.php опрашивать раз в секунду, а то и в пол секунды.
Теперь пишем код, который всё это будет делать и останется только следить за активностью:
import https from "https";
// Последняя активность жертв
const lastTime = { };
// id жертв
[102343170,1,6]
.forEach(id=>{
lastTime[id] = "";
// цикличное вызывание функции
setInterval(() => {
// https запрос на https://vk.com/foaf.php?id=...
https.get(`https://vk.com/foaf.php?id=`+id, (resp) => {
let data = "";
// получаем ответ от сервера
resp.on("data", (chunk) => {
data += chunk;
});
// обрабатываем ответ от сервера
resp.on("end", () => {
// извлекаем время последней активности
const [, time] = data.match(/<ya:lastLoggedIn dc:date="(.+)?"/) || [];
// записываем время последней активности
if (time != lastTime[id]) {
lastTime[id] = time;
// console.log(id, Array(11 - id.toString().length).join(" "),time);
// смотрим активность ближайших жертв
const a = Object.entries(lastTime).filter(([i,t])=>{
const timeA = new Date(time).getTime()
const timeB = new Date(t).getTime()
// проверяем, что есть собеседники, с приблизительным временем активности
return (timeA-2000 < timeB && timeB < timeA+2000) && i!=id
})
// выводим возможных собеседников
if (a[0]) {
console.log(id, "общается с", ...a.map(e=>JSON.parse(e[0])))
}
}
});
resp.on("error", console.error)
});
}, 1000);
})
В такой реализации можно только догадаться с кем в чате сидит жертва, но это максимально не точно, + нет возможности определить кто из них первый написал сообщение, да и вообще это лишь поверхностно всё. Хотя этого достаточно, чтоб установить, с кем из вашего списка общается жертва.
Код можно доработать, например начать отлавливать моменты набора текста, тем самым Вы сможете точнее определять собеседников, установить, кто из них первый отправил сообщение и т.д. Можно определять, кто сейчас читает ваши сообщения в чате и многое другое. Казалось бы, это обычная статистика онлайна, привязанная к сообщениям, но такое сочетание открывает тайные двери, что Вы себе и представить не могли!
Ну а цель статьи заключалась в описании проблемы и том, как за Вами могут следить по Вашему статусу онлайна. Удачи и следите за своими данными!