September 8

Спам-Тур де Франция: Игнорируем Админские баны [By FLEXZ SHIT]

Flexz Shit - https://t.me/f1rockstar

Исток - www.wannonce.com (Французкая доска объявлений)

В очередной раз прогуливаясь по этим вашим интернетам наткнулся на исток. Первым делом глянул посещалку:

На момент работы с истоком посещалка была в районе 12кк+

Зарегистрировал аккаунт и занялся поисками взаимодействия с юзерами.

Нашел всего 2 банальных способа:

1) Чат

2) ЛС

Чат - не хитрым способом было выявлено, что в чате огромное количество слов\доменов в черном списке.
ЛС - все тоже самое что и с чатом, но есть одно преемущество, письмо редиректит на маил. Но не целиком, а только то что мы пишем в строке субъект. В поле субъект есть ограничение на количество символов - 120. Чего с головой хватает, чтобы впихнуть туда крео+ссылка

Далее с задумкой на автоматизацию попытался найти как парсить юзеров) Нигде на сайте я не обнаружил списка юзеров, онлайн лист итд! И самое печальное было на тот момент, что при переходе на страницу пользователя или страницу смс в ссылке был его ник, а не id.

ссылка на профиль
ссылка на страницу сообщения пользователю. key_send легко парситься со страницы юзера, поэтому упускаю этот момент

Еще один вариант который мне виделся, это открыть консоль разработчика, написать пользователю смс, и посмотреть что там происходит.

И тут тоже разочарование, никаких id! Последним для меня вариантом стало то что нужно каким-то образом парсить ники пользователей(

Через кучу попыток найти хоть что-то, уже было некое разочарование... И скорее всего я бы на этом остановился. Я понятия не имел как парсить юзеров. Но одно случайное нажатие мимо кнопки все изменило!

Да да, я не внимательный, и это моя основная проблема на тестах.. Собственно перейдя по этой кнопке, я увидел долгожданный id а не ник) Также на странице есть ник пользователя)

Как парсить стало понятно) Но встал другой вопрос, что дальше то делать, сидеть руками тестить, или потратить часик, написать шаблон парсер+спамер, и тестировать это все шаблоном)

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

Что на этот момент я знал об истоке

На истоке постоянный поток регистраций ботов вперемешку с пользователям. Понятия не имею для чего. В день может дойти до 2-5к регистраций, из них лишь малая часть реальных пользователей(
Очень много ip в бане. Спасали хорошие прокси.
Если писать сообщение пользователю, есть некая непонятная задержка! Бывало смс прилетает около моментально, но чаще смс долетали через 5-7 минут
Если писать в ЛС админ достаточно быстро банит домен, и туда же улетают некоторые слова из крео...

Учитывая длительные задержки при отправке SMS и другие неудобства, я решил, что лучше всего будет писать в чат только что зарегистрированным юзерам. Ведь сообщения в чате доставляются моментально!

Учитывая сколько акков в день прилетает на сайт, стало понятно, руками такое тестировать это нереально. Поэтому...

Автоматизация

Научить кого-то чему-то наверно не смогу) поэтому просто постараюсь объяснить логику.

P.S сразу напишу что я не претендую на гения автоматизации итд. И если вы ГуруКодеры подумаете что мой код говно, знайте я то же так считаю

Регер на стадии теста не стал делать, достаточно парсера и спамера в чат

Парсинг

Тут все просто даже снифер не включая, через консоль разработчика 1 запрос и готово

Уже начали чувствовать запах?

Разбил 'код😅' на 3 блока, что я сам не запутался в объяснениях)

  1. Функция pars() принимает в себя lastId - ид(число), от которого она начинает парсить
  2. Тут функция уходит во вложенный бесконечный цикл while True: в котором делается get запрос на страницу с последним id.
  3. Далее, идет проверка бана ip (if 'Votre adresse IP' not in r.text:). Если ip в бане, то мы вызываем break, и вложенный цикл заканчивается, и шаблон зонного начинает работу с блока 2. То есть пересоздает сессию, новый прокси, новый ua. Если ip не забанен, то шаблон применяет регулярное выражение (?<=Messages de )[^<"]+, к ответу от сервера который получили от get запроса. На последнем этапе шаблон проверяет нашел ли он что-то регуляркой или нет) Если юзера еще нет, то шаблон спит пару секунд, и снова начинается весь вложенный цикл сначала. Если юзер был найден, то он добавляется в список для спама, после чего увеличивается ид на +1, и шаблон делает все с нуля во вложенном цикле, но уже в ожидании нового юзера!

Еще раз на пальцах и без кода, что делает парсер

1 - Переходит на эту страницу по id.

2 - ищет юзера, и когда находит и добавляет его id и ник в список для спама

3 - Начинает искать нового юзера

Если на этом id еще нет юзера, то шаблон раз в несколько секунд повторяет запрос, в ожидании пока тут появиться ник юзера

Далее вообще непонятно как все расписывать, я о парсере еле написал!

Спамер

Я выше писал о непонятках с ЛС, доставка смс долгая, после использования шрифтов не хватает места, а там напомню всего 120

Пример:

mtraf - 5 символов

𝖒𝖙𝖗𝖆𝖋 - %F0%9D%96%92%F0%9D%96%99%F0%9D%96%97%F0%9D%96%86%F0%9D%96%8B 
вот так отправляеться в кодировке и это уже не 5 а 60 символов)

В общем и целом, учитывая гору стоп слов, все-таки было принято решение бомбить ЧАТ а на ЛС

Поехали.
Открываем burp и снифаем отправления смс в чат

Вах вах, смс отправляется через get запрос и куча каких-то непонятно сгенерированных значений! Самый простой вариант, проверить может какие-то токены тут не нужны! Поэтому перекидываю запрос в Repeater и начинаю удалять по одному токену убрал с URL все лишнее, и как оказалось и без этого все работает)

Учитывая что регера на тот момент не было, я подумал что можно и куки немного обрезать)

Вот что получилось)
Это минимально что нужно для того чтобы писать в ЧАТ

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

Снова пахнет

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

Пробую на всякий случай отправить еще раз смс в чат, но уже с питона, и одновременно в браузере вижу как с этого акка юзеру улетела смс!

Все готово, осталось только собрать все это в кучу, добавить циклы\условия\обработку ошибок

ну что, надеюсь надышались воздухом, потому что вас опять ждет это:

Опять же, просто попробую расписать сею логику работы функции sms()

И снова начинаем это гиблое дело.

На сайте нет банов(это не совсем так) и нужно как-то отслеживать когда домен или крео улетело в бан, для этого в начале создана переменная счетчик sms_num = 0

Далее вся функция обернута в while True: (вечный цикл) далее try: для обработки возможных ошибок

и только тут вся остальная магия

Условие if len(uList): проверяет добавил ли парсер в список uLust нового юзера.

Если нет, то срабатывает else: и спамер спит 5 сек, и так до бесконечности пока у нас в листе не появиться один или более новых юзеров)

Далее я опять разбил 'код😅' на 3 блока)

  1. в списке юзер в таком виде '123456:nickname'. Нужно как-то разделить. Берем первого юзера из списка и сохраняем строку в переменную user после чего сразу удаляем его из этого списка. Далее методом split() разделяем '123456:nickname' по разделителю ':' и получаем разбитую на 2 части строку. Далее просто присваиваем нужным переменным нужные значения в uId присваиваем id юзера в uName его ник

2. Тут просто устанавливаем заголовки, параметры, в которых ключ 'to' а значение ид нашего юзера которое мы подставляем. В ключе 'message' нужно отправлять наше крео. И последнее это отправка нашего крео посредством get)

тут генерировалось смс)

3. Первым делом проверка, отправилось ли смс... Если в ответе сервера не пусто, значит смс отправилось, и в этом случае все что нужно это сбросить счетчик ошибок, и вывести себе на экран смс об успешном отправлении смс

SMS good

Если смс не отправилось, то увеличиваем счетчик ошибок на +1, и пробуем снова написать смс! И так до 5и ошибок, и если мы не смогли написать 5 смс, то это значит что у нас либо домен в бане либо крео в бане) Но точно не аккаунт

И чтобы не терять потенциальные конверсии, сделал условие) Если у нас 5 раз не отправило смс, срабатывает постбек в телегу 5 раз подряд) И шаб уходит спать на 6**9 секунд

Поверьте, когда у тебя в телеге за секунду прилетает 5 смс, ты сразу понимаешь в чем дело) и быстренько меняешь домен\крео

SMS ERR

И естественно главный цикл который управляет всем шаблоном:

тут все просто, это условие включается в первую очередь. что оно делает:

1 - создает блокировку Rlock() это нужно было для регера. Просто не убрал

2 - задаем старту булево значение False. Зачем? Затем, сам не знаю! Просто всегда делаю так

3 - создаем 2 потока, спамер и парсер(в парсер передаем ид с которого нужно начать)

И далее уходим в вечный цикл, в котором каждые 5 секунд проверяем живы ли все потоки, и если хоть один поток по какой-то причине отключен, мы его пересоздаем и запускаем! Тут сильно расписывать не буду, вроде ничего сложного нет! Дополню только из-за чего 3 потока, а не 2) В работе должно быть 2 функции парсер\спамер. Так вот третий поток это функция main - которая как раз и отвечает за запуск нужных нам потоков парсер\спамер и вечно проверяет чтобы все работало! 'Но это не точно🙃'

Работает?

Как видим все работает) А также видим что коллеги не спят

Конец

Нужно добавить по поводу отсутствия банов! Это не так, баны есть! Но они нам не страшны! Потому что когда админ банит акк, наш аккаунт который работает из шаблона все равно продолжает писать смс людям. Я не знаю почему так. Просто факт) Все что страшно на этом истоке это занесение домена\крео в ЧС, В остальном, админ никак не может помешать работе спамеру.

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

Деньги

Не густо. Но это не все, я не помню точно в какой период сливал. Помню что это было начало года) И на тот момент у меня не было других истоков по ФР, так что... Ну и еще добавлю что Страну показал только Францию, но конверсии капали не только с франции) поэтому этот исток давал около 250уе в месяц, при временных затратах 1-3 часа в месяц (на замену ссылок, крео итд)

Скорее всего я упустил какие-то моменты при написании статьи. Я не составлял план и т.д.) Я просто решил попробовать написать статью, и вывалил в кучу всю эту кашу.