Print This Post Подделываем результаты конкурсов в ВКонтакте

Воскресенье, 3. Январь 2016
Раздел: HTML/JS, Для новичков, Социальные сети, автор:

dice

Во многих социальных сетях, в том числе в ВКонтакте, с некоторых пор стало проводиться множество конкурсов с ценными призами. Речь пойдет о подделке результатов с точки зрения организатора, а конкурсы - те, в которых победитель определяется случайным образом из списка участников.
Итак, существует множество сервисов, которые помогают в проведении сферического конкурса, а доказательством зачастую является записанное видео или прямой эфир, в процессе которого происходит выбор победителя. Давайте рассмотрим, как можно организовать тривиальную подмену результатов, ничем себя не выдав. В качестве примера я рассмотрю вариант с использованием random.org (тот случай, когда организатор генерирует последовательно несколько случайных чисел, чтобы определить страницу и порядковый номер участника на странице), а также вариант с использованием Random.app.

Для начала давайте определимся, как вообще можно провести незаметную подмену в прямом эфире. Самое первое, что приходит в голову: перехватить и модифицировать запросы с помощью промежуточного прокси-сервера (например, Fiddler или Charles), модифицировать результат непосредственно в браузере (например, с помощью Greasemonkey или Tampermonkey), сделать визуальную копию необходимого ресурса на локальном сервере и заворачивать запросы на него с помощью hosts-файла или своего DNS-сервера, и так далее. В конце концов, можно что угодно "нарисовать", если речь идет о видеозаписи проведения конкурса. Остановимся на варианте с модификацией результата в браузере с помощью Tampermonkey или Greasemonkey. На мой взгляд этот вариант наиболее простой для реализации и понимания.
Берем Google Chrome и ставим в него Tampermonkey (есть в Chrome Web Store). В "я без понятия, как это место называется" панели появится новая иконка.

chrome-head

Приступим, для начала random.org. Заходим на сайт и видим в правой части True Random Number Generator, который обычно и используется.

random.org

После беглого изучения мы видим, что этот элемент представляет собой iframe, который загружается по ссылке вида:

Пройдя по ссылке мы можем увидеть, что основная логика реализована в файле iframe.js, после изучения логики становится очевидно, что при нажатии кнопки Generate шлется http-запрос к random.org с желаемым диапазоном, которые возвращает случайное число из диапазона и выводится с помощью вызова функции printNumber из iframe.js. Давайте реализуем простую подмену результата.
Нажмем по вышеупомянутой иконке Tampermonkey и выберем пункт Add a new script. Откроется редактор, куда вы можете сразу скопировать данный скрипт (не забыв после этого нажать кнопку Save):

Как видите - скрипт достаточно простой. В текущем варианте, на 3 по счету нажатии кнопки Generate, мы увидим результат 31337, независимо от заданного диапазона. Чтобы сбросить счетчик нажатий, достаточно перезагрузить страницу в браузере.

Теперь давайте проведем беглый анализ Random.app.

random.app

Мы имеем дело с приложением для ВКонтакте, которое тоже встраивается с помощью iframe. Приложение использует VK API и не взаимодействует с социальной сетью для получения списка возможных победителей. Победитель выбирается случайным образом простым вызовом Math.random. С основной логикой работы Random.app можно ознакомиться, пролистав содержимое следующих скриптов: main.js, random.models.js, random.views.js. Приведу небольшие фрагменты кода, которые отвечают за интересующие нас действия:

main.js

random.view.js

Мы видим, что на элемент с классом .roll-roulette (кнопка Выбрать победителя) вешается обработчик, который выбирает случайного пользователя из заранее сформированного списка и вызывает функцию setWinner, которая отображает победителя. Что ж, давайте сделаем простой скрипт, скопировав часть логики с сайта автора:

Всё опять-таки крайне тривиально, теперь при нажатии кнопки мы всегда будем получать человека с желаемым ID в качестве победителя. Естественно, никто не мешает добавить дополнительной логики в скрипт, чтобы выигрывали не только "избранные", но кому это надо...
Остается еще один простой момент: по-умолчанию в Chrome видна кнопка расширения Tampermonkey и зрители могут что-то заподозрить - не вопрос, нажимаем правой клавишей по ней и выбираем пункт Hide button.

Подведем итоги. Я разобрал часто встречающиеся примеры, однако, ими дело не ограничивается. Еще существуют ресурсы, которые после проведения розыгрыша предоставляют ссылку на результат, чтобы пользователи могли пройти по ней и убедиться что всё честно, но, вы же понимаете, что ресурсом владеют простые люди, а договориться можно с кем угодно. Хотя, пожалуй, можно верить таким ссылкам с random.org (вроде бы доступно только для владельцев платных аккаунтов), но другие ресурсы под большим вопросом, ведь кто мешает, например, мне создать очередной сайт для проведения розыгрышей, раскрутить его и выиграть там, где мне это интересно.

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 19 к “Подделываем результаты конкурсов в ВКонтакте”


  1. zloid :

    Пока читал, хотел рассказать, что недавно видел конкурс в ВК, в котором победитель выбирался сервисом randomus.ru (не сочтите за рекламу). Там идея в том, что пользователям заранее сообщается некий константный идентификатор номера розыгрыша, потом, когда надо выбрать победителя, организатор нажимает на сайте кнопку, и всё - к этому идентификатору навечно прикрепляется число, которое может проверить каждый.

    >>но, вы же понимаете, что ресурсом владеют простые люди, а договориться можно с кем угодно

    Вот тут соглашусь, никому нельзя верить. Разве что речь о мелких конкурсах, в которых разыгрывают магнитики, бесплатный макияж или массаж, там скорее всего владельцы random-сайта не станут рисковать репутацией.

    [Ответить]


  2. MrFizik :

    Большое спасибо за статью, интересно!

    [Ответить]


  3. Андрей :

    Не работает способ с random.app
    было бы хорошо видео делать) а так все гуд

    [Ответить]

    Kaimi:

    Открываешь консоль разработчика в браузере, смотришь ошибки JS или вставляешь console.log по коду, чтобы понять, какой фрагмент не отрабатывает.

    [Ответить]

    Андрей:

    очень нужно сделать, но не пойму что не так)
    http://s020.radikal.ru/i721/1601/6f/3b66c75a8e00.png
    Можем в скайпе например связатся?? если да, оставте свой скайп пожалуйста

    [Ответить]

    Kaimi:

    Так ты на вконтакте под https и скрипты с сайта pliashkou грузятся под https.
    А в скрипте написано // @match http://pliashkou.com/*
    Вот адрес и не матчится и скрипт не запускается даже.

    rain:

    Не срабатывает обработчик клика.
    Вообще.
    Пробовал по разному. Поэтому хотелось бы побольше подробностей, как завести

    [Ответить]


  4. Андрей :

    Ваш косяк))) 2 часа мучался) у вас в скрипте нету буквы s в match

    [Ответить]


  5. Mrbrom :

    Автор, Социо-тест! Насколько ты задрот, битард и социофоб - не выдаёт результат.Поправь, если не трудно.

    [Ответить]

    dx:

    Проверил, выдает. Да и движок сто лет уже не менялся. Может, какие-то проблемы с интернетом были.

    [Ответить]

    .Зоя:

    Юморист 100 lvl))) Наверное писаете кипятком, что так круто подкололи!!!

    [Ответить]

    dx:

    Конечно, вокруг всё залили уже :D


  6. Макс :

    Ребята, вот это вы гоните. Каими вам еще что-то должен?
    Вместо спасибо предъявы какие-то. Лень самому сесть и подумать?

    [Ответить]


  7. миша :

    защиту denuvo кто нибудь сломает когда нибудь?

    [Ответить]

    Kaimi:

    Не занимаюсь изучением защит. Даже не знаю, что это.

    [Ответить]

    .Зоя:

    Здравствуйте, в кодах и приложениях совсем не разбираюсь, снимите видеоролик пожалуйста?)))

    [Ответить]

    Kaimi:

    Не разбираться в кодах и приложениях в 2016. Это вообще легально? Даже не знаю, для этого надо бы мини-студию оборудовать, микрофон купить, хромакей поставить, нарисовать интро-аутро для видео, организовать канал на ютубе, чтобы ты мог подписаться и поставить лайк... Я подумаю

    .Зоя:

    Я тоже удивляюсь, как так люди коров не умеют доить, это же легко и просто, я то умею. Так же и тут, если вы умеете, это не значит, что это легко и просто и все это смогут сделать. Попробую разобраться)

    dx:

    А зачем доярке подделывать результаты конкурсов вконтакте? +)


Оставьте ваш комментарий