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

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 (вроде бы доступно только для владельцев платных аккаунтов), но другие ресурсы под большим вопросом, ведь кто мешает, например, мне создать очередной сайт для проведения розыгрышей, раскрутить его и выиграть там, где мне это интересно.

Update (29.01.2017): Обновленная версия скрипта для Random.app:

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

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

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

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

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

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

      2. Проблема в случае с Random.app заключается в том, что на 0,4 секунды видно, что происходит подмена. На 0,4 секунды показывается другой человек и мгновенно поверх заменяется id, который указан тобой. Этот момент как-то возможно исправить? :)

            1. $(document).off('click', '.roll-roulette');
              // ID победителя
              var winnerUid = [318476885];
              // Добавляем свой обработчик для кнопки Выбрать победителя
              $(document).on
              (
              'click',
              '.roll-roulette',
              function ()
              {
              // Воспользуемся методами Random.app для получения необходимых данных от VKontakte

              Не помогло, к сожалению. Мне в принципе неловко ваше время забирать, честно говоря. :)

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

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

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

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

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

  4. Приложение рандом переделали, теперь не работает тот скрипт. Кто может помочь в решении данной проблемы, напишите. О цене договоримся

  5. Привет! А как добавить несколько вариантов в random.org

    Т.е при первом нажатии одно число 11111, при втором рандом, при третьем число 33333, при четвертом рандом, при пятом 5555 и тд

  6. вот скрин скрипта меня смущает красный крестик внизу
    https://drive.google.com/open?id=0B-YdUGaVb50GRXlYRnJXeVhueEE
    вот консоль
    https://drive.google.com/open?id=0B-YdUGaVb50GM0NmS1NOWXJxMDQ
    подскажи пожалуйста, что не так? что дописать или исправить? Очень очень нужно хочу девушке на день рождения сюрприз сделать.

    1. Теперь добавляешь скажем
      console.log(1);
      в ключевые моменты кода и смотришь отрабатывает ли, выводится ли в консоль сообщение

      1. Было бы хорошо если я в этом хоть немного разбирался А так методом тыка не получается Уже 3 час мучаюсь

      2. Так ничего и не получилось. Может вы сам доработаете его А мне продадите уже готовую версию? Что бы я скопировал вставил и все заработало.

            1. Хочешь - можешь закинуть произвольную сумму на яндекс деньги или вебмани или биткоины...

  7. Привет Kaimi!
    Ваша стать мен очень заинтересовала, хочу проверить скрипт у себя на WM Vare.
    Пытаюсь установить angr уже 3ю неделю на windows 10 x64.
    Проблемы возникают с pyvex и simuvex, они не бильдяться\ не устанавливаются.
    Я нашел пошаговую инструкцию для установки angr и снова не удача (https://blog.spirotot.com/2016/11/05/installing-angr-in-windows/).
    Связи с этим у меня возник вопрос мб angr не работает из-за новых версий плагинов.
    Подскажи содержимое свих плагинов и их версий (содержимое pip list).
    Благодарен за любую помощь в решении этого вопроса

  8. Добрый день , Kaimi, помогите пожалуйста с Random.app , как переделать скрипт , чтобы выбиралось 3 победителя , уже который день бьюсь и ничего не получается. ( особо не владею программированием) Подскажите пожалуйста как и что делать.

  9. А если я хочу выиграть в конкурсе, не являюсь админом группы в которой проводится конкурс. Приложение random app. Подойдет ли для этого код?

  10. А как сделать в вк двоих победителей? и кстати, один почему то тоже не получается, совсем другие люди выходят там

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *