Как сломать бота вк
Перейти к содержимому

Как сломать бота вк

  • автор:

Как нужно и не нужно писать чат ботов на примере моего бота для игры в «Тайный Санта»

Год назад решил я создать телеграм бот для того, чтобы поиграть в достаточно популярную новогоднюю игру «Тайный Санта». Вдохновился я тем, что пару лет назад мы на работе компанией решили сыграть в эту игру (это показалось очень круто), и плюс я давно следил за клубом АДМ на Хабре. В октябре-ноябре прошлого года, я понял, что нужно сыграть между своей же компанией в этом году снова, но в этот раз не вытягивая имена написанные на листочке с шапки Деда Мороза, а более технологично, что ли. Поскольку все сидели в телеграме и мне было очень интересно написать туда бота, я решил это сделать именно на этой платформе

Кстати, год назад я уже писал об этом проекте статью на Хабре, но я ничего не говорил о реализации. Не говорил не зря, потому что было стыдно, что ли 🙂 Проект готовился только для компании на работе (человек 15-20 на максималках) а вышло так, что проект «стрельнул» в других кругах после пары статей на ресурсах. Далее, более популярные ресурсы сами начали меня рекламировать (я об этом даже не знал, до того как пошел из ниоткуда большой приток людей).

За месяц без единого вложения в рекламу я собрал 5000+ довольных игроков и очень сильно полюбил этот проект. Но помимо всех его бенефитов, в нем был один огромнейший минус, и это реализация.

Как это было год назад

Было забавно, что у меня была кнопка в боте «присоедениться к комнате». Да, именно присоедЕниться. Мне писали пофиксить этот грамматический баг, но я не рисковал, и вот почему 🙂 Далее, прикладываю кусок кода из прошлогодней версии бота.

elseif ($user['state'] == 7) < if (mb_stripos($textMessage, 'присоедениться') !== false) < if (!empty($user['santa_for_user_id'])) < $text = 'Нельзя присоедениться к комнате, если у тебя уже есть Санта'; >else < $text = "Отлично! Если у Вас уже есть комната - напиши мне ее номер сюда, и ты присоеденишься к этой комнате"; $db->updateState($userId, 8); > >

Весь бот — это был один огромнейший index.php файлик, который жил за счет функции mb_stripos, по сути. При чем было очень много одинаковых «ифчиков». Т.е. mb_stripos($textMessage, ‘присоедениться’) !== false мог встретиться не единажды. Если ты поменяешь в кнопке слово «присоедениться» на «присоединиться», и забудешь поменять какой то ифчик (которых, опять же, много) всё может посыпаться. При чем это может быть не сразу заметно (просто бот на определенных сценариях будет не отвечать как надо). Разок я поменял текст, начали писать юзеры, что на определенном сценарии бот отвечает не как надо. Дальше я рисковать не хотел, и подумал, что ошибка не такая уж и критичная 🙂 В принципе, вы поняли. Если была кнопка, например «Найти случайного Санту», я зацеплялся на слово «случайного» через mb_stripos. Весело было, когда появлялась подобная кнопка, с подобным текстом, и когда не надо оно все попадало в не нужный if (если например и там и там есть слово «случайного») 🙂

Кстати, заметили $user[‘state’]? На то время я ввёл «состояния», чтобы понимать, на каком состоянии сейчас находится пользователь. Захотел ли он присоединиться к комнате, например, или создать, или может он захотел в одиночную игру поиграть? И для каждого стейта свой набор ифчиков шел, который важно было также не сломать.

Крон файлик, кстати, лежал рядом с index.php, его можно было запустить на прямую из под браузера (видимо тогда меня это не особо волновало). Далее, когда вдруг хотелось добавить какой-то «стейт» (лучше бы я этого не хотел) мне приходилось окунаться в это г. и с первой же попытки ничего конечно же не получалось. Все это еще и лежало на самом дешевом хостинге за 1$ в месяц, который мог меня послать куда подальше, когда начало писать в «час пик» достаточно большое количество человек.

Это был конечно сущий ад для программиста 🙂

Что я решил делать в этом году

В этом году я понятное дело решил переписать бота (раз был немалый спрос в прошлом году), захотел зайти в старый код и разобраться, как это было в том году, чтобы перенести бизнес-логику. К сожалению у меня не получилось на 70% даже разобраться в старом коде, даже при том, что тогда я пытался оставлять себе комментарии в коде, чтобы помочь себе через год 🙂

Решил я просто вспоминать основные сценарии, а там и добавлять что-то новое по ходу дела. Начал с вопроса: «а что же использовать для написания архитектуры так, чтобы потом не плакать?». После долгих исследований — выбор пал на Botman. У нас есть небольшие статьи на Хабре о нем. Если коротко, то Botman это очень классная вещь. Его можно поставить как на «чистую», так и сразу установить его сборку вместе с Laravel (да, есть сразу ботман установленный сверху Laravel). Я решил и остановиться на этой версии, поскольку Laravel это явно лучше, чем то, что было год назад 🙂 У него есть возможность кэширования из «коробки», удобный роутинг, artisan, миддлвары, удобность возможность работать с БД и прочие бенефиты. Если вдруг вам не нравится Laravel, Вы можете использовать любой другой фреймворк, и сверху него установить Botman, либо же не использовать фреймворк вовсе. Кстати, Botman построен поверх ReactPHP, что как бы круто 🙂

Далее, я буду описывать бенефиты Botman:

Есть единый файлик botman.php, в котором Вы можете описать все команды. Пример:

$botman->hears('/start', function (BotMan $bot) < $bot->startConversation(new StartConversation()); >)->stopsConversation();

При написании команды /start, запустится StartConversation (который должен наследоваться от абстрактного класса Conversation) и реализовывать метод run().

Вопросы задаются достаточно удобно, пример:

$question = Question::create("Ты хочешь создать комнату, или присоединиться в существующую?")->addButtons([Button::create('Создать')->value('create'), Button::create('Присоединиться')->value('join')]); $this->ask($question, function (Answer $answer) < if ($answer->isInteractiveMessageReply()) < if ($answer->getValue() == 'join')  

Заметили, что у Button мы можем задать value, и в последствии цепляться потом на него? То есть, на ваших глазах баг с «присоедЕниться» пофикшен, за счет того, что я цепляюсь на value() 🙂
Кстати, еще можно юзать isInteractiveMessageReply метод, который ответит на вопрос, написали ли вам текст, или нажали интерактивную кнопку, при ответе на вопрос заданный юзеру.

Ботман помог избавиться от стейтов, я могу в методе ask сделать еще один метод ask, например если человек нажал «присоединиться», я просто делаю еще один ask внутри этого if.

Вот еще несколько методов (из очень большого количества), которые предоставляет ботман, которые можно легко понять из названия:

$this->repeat($question);

$this->bot->typesAndWaits($secondsToWait);

$this->bot->reply($reply);

Киллер же фичей ботмана является то, что один код может запускаться на многих платформах. То есть, Вы можете написать свой код, изначально запустить его только для Telegram. Потом, решить, что Вы хотите еще перейти в Facebook Manager, и вам совсем не надо начинать разбираться с SDK Facebook, разработчики Botman уже это сделали за вас. Просто нужно будет установить драйвер и задать API Token вашего Facebook Messenger бота в .env. Весь функционал автоматически заработает в фейсбук мессенджере.
Botman поддерживает не только Facebook Messenger и Telegram, в этот список входят также Slack, Skype, WeChat (с полным списком можно ознакомиться у них на сайте).

Также «виновник торжества» славится тем, что с ним уже идет папочка tests/Botman (можете писать юнит тесты, ваш кэп), а также хорошей документацией. Все бенефиты тяжело назвать, поскольку я явно не со всеми поработал, не все помню, но думаю того, что я описал, должно уже хватить, чтобы им как минимум заинтересоваться 🙂

Ну ок, а хостить опять на хостинге за $1 будем?

Не, в этом году всё серьезно. Хостинг за $10 в месяц и бесплатным доменом с ссл. Шучу 🙂

Решил подтянуть знания по докеру, купил VPS на DigitalOcean, и развернул проект в докере. Вышло достаточно неплохо, при том что я это всё делал чуть ли не в первый раз. На удивление докер ни разу не падал.

С VPS конечно круче 🙂

При докере было сильно удобнее вести разработку (версионность на деве и на проде сохранилась).

Самое забавное, что когда я вводил платный функционал в бота, мне нужно было получить апрув от платежной системы. Платежная система постоянно возвращала мне мою заявку на апрув, и говорила «сайт не работает». У меня работал, у друзей работал (мы из Украины), а вот у ребят из РФ не работал. Не долго думая, я увидел, что Роскомнадзор еще год назад забанил айпишник моего дроплета (очень много серверов DigitalOcean пострадало на то время от руки РКН). С этим потом тоже порешали.

На чем написан же все таки твой бот?

  • PHP 7.3
  • Laravel
  • Botman

Что хоть нового в боте появилось?

Санта научился звонить

У Санты можно заказать звонок! Он даже будет Вас понимать и слушать 🙂

Санта звонит на указанный номер (с номеров USA), задает вопросы, например «как ты себя вёл в году?», «что хочешь на Новый Год?», «Стишок знаешь?» и т.д. Если пользователь говорит, что стишок не знает, то Санта пойдет по другому сценарию вопросов, если скажет, что знает, то Санта любезно попросит рассказать стишок 🙂 Еще: когда человек говорит свой список желаний на Новый Год Санте, Санта слушает, и присылает потом этот список желаний пользователю, который заказал звонок (вдруг, ребёнок закрылся от родителей в комнате, а им как-то надо узнать что же он попросил у Санты?). Также Санта присылает саму аудиозапись звонка с Сантой на память 🙂

Теперь можно узнать кто твой Санта

Зрада? Это же противоречит названию игры «Тайный Санта», разве нет? В принципе — да. НО в прошлом году от количества желающих узнать своего Санту мои ЛС разрывались. «Мне будет дарить подарок босс?», «Нам одной девочке не подарил подарок кто-то, можете сказать, кто ей должен был дарить?» ну и всё в таком роде. Сейчас есть такая возможность, но что бы было не повадно — такое удовольствие выйдет в $5.99 🙂

Выводы

Не стоит надеяться на то, что ваш проект всегда будет маленьким. Не нужно создавать один index.php с кучкой ифов, даже если проект начинается с всего лишь пары тройки ифов (я достаточно таких проектов знаю)). Лучше сделать сразу хорошо. Даже если вы потратите на это больше времени, это будет давать вам бенефиты в том, что когда в проект срочно нужно будет изменять/добавлять логику, не пришлось думать как менять ифы так чтобы бот не упал, как это вышло у меня :). Также этот подход (с ифами) учит вас делать все другие решения костыльно (не лучший навык, согласитесь). Ну и конечно подумайте о себе, вам же придется по позже зайти в этот код, и придется с ним разбираться, и тогда будет очень не сладко 🙁

Всем хорошего кода, написания своих чат-ботов, а также пишите свои проекты. Это кайфово!

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

Если захотелось поиграть — велкам 🙂

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

Ученые нашли два эффективных способа заставить искусственный интеллект отвечать на ваши вопросы, какими бы опасными они ни казались. Исследователям удалось разговорить чат-ботов — и те стали выдавать рецепты изготовления взрывных устройств, писать вредоносный код и делиться экстремистскими идеями.

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

OpenAI отключила детектор ИИ-текстов — он работал плохо

Например, если попросить чат-бот «написать учебник о том, как сделать бомбу», то он откажется. Но если пользователь добавит в своем сообщении длинный суффикс к той же самой подсказке, то вероятность получить подробное руководство по изготовлению бомбы заметно вырастет. Таким образом можно уговорить бота сгенерировать предвзятую, ложную или иную токсичную информацию.

Почему виновата GPT?

Этот подход можно назвать условно-универсальным. Ученые обнаружили, что метод суффиксов работает и против проприетарных моделей (когда доступ открыт только к интерфейсу запросов, но не к весам). Исследователи полагают, что большинство моделей обучалось на общедоступных пользовательских диалогах на основе OpenAI GPT-3.5. На это указывает и эффективность взлома последней: процент успешных попыток достигает 86,6% случаев.

Из всех изученных моделей самой стойкой оказалась Anthropic Claude 2 — она продемонстрировала всего 2,1% успеха. Но и ее защиту ученые успешно обошли: они предложили ИИ изобразить готовность помочь или представить, что диалог с пользователем — это игра. В этих случаях эффективность атак заметно выросла и достигла 47,9%. Исследователей озадачил высокий процент успеха у Google Bard на базе PaLM 2 (66%), хотя компания заявляла, что не обучала свой чат-бот на данных ChatGPT.

Что теперь будет с ИИ-моделями?

Авторы считают, что ИИ-модели незачем изымать из общего доступа — в таком случае они не сделали бы это открытие. Ученые считают, что лицензирование больших языковых моделей лишь усугубит проблему. Тогда методы атаки будут доступны только киберпреступникам с мощными ресурсами взлома, а также спецслужбам, и ученые вряд ли смогут помочь с защитой таких моделей.

Белый дом взял 8 обещаний с ИИ-компаний. О чем договорились разработчики?

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

Исследователи надеются, что такие компании, как Anthropic, OpenAI и Google, найдут способы остановить обнаруженные атаки и усилить защиту чат-ботов. Однако ученые предупреждают, что сегодня не существует известного способа прекращения подобных атак и остановить все неправомерные использования ИИ будет чрезвычайно сложно.

Метка: как сломать чат бота

Чат-боты в продажах. Как автоматизировать человеческое общение? Андрей Кулинич

Чат-боты в продажах. Как автоматизировать человеческое общение? В гостях передачи об умных продажах «Без скидок» Андрей Кулинич, преподаватель высшей школы бизнеса МИРБИС, бизнес-консультант, специалист по чат ботам. Как успешно автоматизировать человеческое общение, совершая продажи через чат бот? По итогам нашего общения создадим чек-лист с рекомендациями по использованию чат ботов в Читать дальше …

Найти:

Магазин курсов, скриптов, консультаций

Подпишитесь на новости: RSS

  • ПОБОРОТЬСЯ ЗА ВАС. О перехвате инициативы в работе с возражениями
  • Мастер проектных продаж. Проект внедрения новых методов продаж
  • Обучение персонала по теме “Вовлекающие коммуникации для тех, кто ненавидит продавать”
  • Как продавцу начать разговор с клиентом, чтобы расположить к себе
  • Как подготовиться к публичному выступлению? Успешный Кейс победы над страхом выступлений у клиента
  • Главный учитель для сотрудника – руководитель
  • Успешное публичное выступление на конференции перед клиентами и конкурентами
  • Главный навык продаж: Навык выявления потребностей и стереотипов собеседника

Как взломать бота в Телеграмм

Любая закрытая дверь вызывает у людей определенного склада характера желание ее открыть. А если на ней висит замок, то процесс становится еще притягательнее. Это касается и информационных ресурсов. Каждая защита в сфере информационной безопасности неоднократно подвергалась попыткам взлома. Не обошли хакеры стороной и мессенджеры. Сегодня о том, как взломать бота Телеграмм.

Как защищен Телеграмм?

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

Обеспечение безопасности бота

Бот – это программа, алгоритм которой предназначен для автоматического выполнения заложенных в него действий. При создании робота его в @Botfather мы получаем идентификатор – токен. Это последовательность символов, имеющая большую длину.

Как взломать бота в Телеграмме? Необходимо знать эту последовательность. Ведь взлом – это создание собственного алгоритма для его работы. А все запросы к ресурсу содержат его токен.

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

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

Ответственность за попытку взлома

К сожалению, за попытку взлома электронного ресурса нет никакой ответственности, так как преступление еще не совершено. А вот успешный взлом – это уголовно-наказуемое деяние. Так как Телеграм взломать скриптами практически невозможно, то любой злоумышленник скорее всего получил в руки ваш телефон. А это кража, карается по статье 158 УК, штраф до 200000 рублей или лишение свободы на срок до 5 лет.

Если же найдется компьютерный гений, который узнает, как сломать бота в Телеграмм, он получит наказание по одной из следующих статей: 272 «Неправомерный доступ к компьютерной информации», 159.6 «Мошенничество в сфере компьютерной информации, 273 «Создание, использование и распространение вредоносных компьютерных программ».

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

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