Мой блог
Как я вычислил Telegram-скам-бота: технический разбор и реконструкция на Telethon
Подробности изложены в материале первоисточника. Когда мне первой написала «Мария», я почти сразу понял, что общаюсь с юзерботом. Профиль без публичного юзернейма, типичные фотографии и быстро развивающийся диалог сразу привлекли моё внимание. Я решил провести собственное расследование, чтобы выяснить, как устроена эта автоматизация изнутри, о чем подробно рассказывает моя ночная проверка подозрительного аккаунта.
Всё началось 11 сентября, когда собеседница неожиданно вышла на связь под предлогом интереса к сфере IT. Легенда строилась вокруг поиска материалов для старта, что выглядело безобидно и располагало к диалогу.







Знакомство с фигурантом и первые подозрения
Аккаунт носил имя Maria P и обладал лишь внутренним идентификатором Telegram. Разглядеть его в общем поиске или отправить жалобу стандартным способом не представлялось возможным. В разделе о себе красовалась короткая фраза о кинематографе с грамматической ошибкой, а в историях публиковались чашки кофе.

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

Технические улики: от таймера до фальшивых городов
Главные доказательства автоматизации стали очевидны при анализе временных интервалов и реакций системы.

Улика №1. Фиксированный таймер
Вне зависимости от времени суток, длины моих сообщений или смены тем, пауза между моим репликами и ответом бота стабильно составляла ровно четыре-пять минут. Живой человек не способен отвечать с такой математической точностью круглосуточно.

Улика №2. Игнорирование несуществующей географии
Когда я сообщил собеседнице, что нахожусь в вымышленном городе «Ново-Дринаженск», алгоритм никак не отреагировал на несуществующий топоним, выдав заготовленный шаблон о Ярославле. Вопросов о том, где именно находится этот город, не последовало вовсе.

Улика №3. Ответ на удаленное сообщение
Проводя эксперимент около часа ночи, я отправил тестовый системный промпт-инъекцию и сразу удалил его. Ровно через пять минут бот ответил на несуществующий текст, выдав шаблонную защиту. Это доказало, что бэкенд ставит задачи в очередь и не проверяет актуальность сообщения в момент отправки ответа.
Улика №4. Защита системного промпта
На мои попытки заставить бота решить нетипичные задачи — выдать рецепт блинчиков, разбить текст на слова или посчитать буквы в слове «бронетранспортер» — система отвечала заученными фразами вроде «Я тебе не поваренная книга». Это подтвердило наличие жесткого системного промпта с правилами отказа.

Вмешательство оператора и финал расследования
Отправка двухсекундного пустого голосового сообщения и серии хаотичных медиафайлов сломала привычный ритм ответов бота. Сообщения помечались как прочитанные, но автоматического ответа не следовало. Вероятно, в этот момент управление переходило к живому оператору-воркеру.

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

Реконструкция логики бота на Python
На основе собранных данных я воссоздал вероятную архитектуру такого скрипта с использованием библиотеки Telethon на Python. Константа задержки имитирует тот самый неизменный таймер, а накопление входящих сообщений объясняет отправку ответов пачками.

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


Как распознать скам-бота самостоятельно
Если вы подозреваете, что обходитесь с алгоритмом, воспользуйтесь простыми методами проверки:
- Сравните тайминги ответов: одинаковые паузы при разной длине реплик выдают скрипт.
- Упомяните выдуманный город и проследите за реакцией собеседника.
- Удалите отправленное сообщение сразу после отправки — бот из очереди все равно на него ответит.
- Проверьте систему на нестандартные задачи, чтобы увидеть шаблонные отказы.
- Отправьте пустое голосовое сообщение, чтобы проверить, как меняется ритм диалога.
