Атака на Мистера Твиттера. Пишем скрипты для спама Twitter на Python’eРоман «Spirit» Хоменко (http://tutamc.com) Недавно мне попался на глаза пост на хабре с располагающим названием «Коммерческий инструмент для спама в твиттере – TweetTornado». Я заглянул на официальный сайт этого чуда-юда (tweettornado.com) и чуть со стула не упал. Оказалось, что он стоит целых 100 долларов! «За любовь не платят», - процитировал я исконный девиз ex-USSR хакеров и тут же взялся за написание соответствующей программы. Утаивать тонкости данного процесса от читателей ][ я не планирую, поэтому из статьи ты узнаешь, как злые кодеры создают рабочий инструмент для спама в твиттере. Он будет представлять собой 4 скрипта:
Ну что же, приступим. Прежде всего – немного теории для олдскульных зомби, которые до этого момента ничего не знали о микроблоггинге. Если ты не из их числа – перескакивай к следующему разделу. Итак, Twitter (twitter.com) - это микроблогинговый сервис, максимальный размер сообщения в рамках которого не должен превышать 140 символов. Суть сервиса проста: у тебя есть лента сообщений, в которой отображаются записи, сделанные тобою и твоими друзьями (или на языке твиттера - following). Все люди, следящие за блогом (followers), будут получать твои сообщения. Твиттер родился в 2006 году, но популярность стал набирать где-то в начале 2007. Сейчас в нем около 5 миллионов пользователей. С одной стороны, вроде бы и маловато (по сравнению с социальными сетями), но, учитывая неплохую положительную динамику в плане роста и тот факт, что одно отправленное сообщение тут же будет приходить всем зафолловленным пользователям – «реклама» в твиттере будет иметь очень радужные перспективы. Сразу оговорюсь, мы не будем работать с русскоговорящей аудиторией твиттера (в связи с тем, что ее представляют, в основном, наши с тобой братья – компьютерные специалисты), предпочтя ей злых буржуинов - в Штатах твиттер уже выбрался в массы, к «домохозяйкам». Подготовка рабочего местаСкрипты мы будем писать на Python – в Linux он есть в большинстве дистрибутивов по умолчанию, а для работы с ним в Windows нужно установить интерпретатор версии 2.5 и библиотеку pyCurl. Все это хозяйство ты можешь найти на нашем диске. Для экспериментов со скриптами рекомендую заранее зарегистрировать новый аккаунт на твиттере вручную. Этот этап автоматизировать мы не будем в связи с наличием хорошей капчи, но много аккаунтов и не нужно, для спама хватит одного. Твиттер APITwitter всегда был приветлив к рекламным агентам. Его авторы создали очень простое API, позволяющее одним POST- или GET-запросом производить любые действия над твиттером. Все запросы отлично описаны в документации (apiwiki.twitter.com). Для каждого действия приводится:
Некоторые примеры, взятые из документации, ты сможешь увидеть на врезках. Кстати, когда будешь производить действия, требующие авторизации, помни, что в запросе нужно посылать логин и пароль с помощью HTTP Basic Authentication. При выборе формата результата мы всегда будем выбирать xml - мне он больше нравится, да и обрабатывать его очень просто. Теперь немного отвлечемся от API твиттера и научимся посылать запросы с помощью Python. Python и cURLВ случае возникновения необходимости выполнения HTTP-запросов я всегда выбираю мощный, универсальный инструмент, который работает во многих языках программирования - cURL. Для его использования подключим библиотеку pycURL:
Чтобы принять данные после запроса и сохранить их, библиотека pycURL требует указать функцию, которая будет принимать данные. Можно, конечно, и самим написать ее, но лучше воспользуемся модулем для работы со строками StringIO. В объекте StringIO есть метод write, идеально для этой цели подходящий. Подключим модуль и объявим объект такими строчками:
Теперь можно объявить объект pycURL и настроить параметры, например, для осуществления запроса главной странички xakep.ru. Полученный результат выведем на экран: Далее, манипулируя методом setopt, мы по желанию сможем изменять наши запросы. Например, если добавить нижеуказанный код, то запрос будет осуществлен через socks с IP 192.168.1.1, размещенным на 2222 порту.
Постинг сообщенийВернемся к горячо любимому твиттеру и попробуем применить наши знания API твиттера путем создания первого скрипта, который будет отсылать сообщения:
В нем, как видно, ничего сложного нет. Главное - не забыть «spiritua:password» заменить на свой логин и пароль, а вместо «TEXT», соответственно, написать нужное сообщение. Чтобы увеличить удобство использования и каждый раз при постинге сообщений не изменять в исходнике текст, заюзаем библиотеку sys для получения аргументов из командной строки:
– и изменим наш «TEXT» на «sys.argv[1]». Вызывать скрипт мы теперь будем так:
Обрати внимание, кавычки обязательны, так как потом скрипт берет только первый аргумент. Без них будет отослано лишь одно слово. Имитация активностиЧтобы пользователи добавили тебя в друзья и долго не удаляли, нужно имитировать активность, вести себя как обычный твиттерянин, лишь иногда публикуя рекламные посты. А не слишком ли тяжело будет придумывать сообщения? Может, проще подсмотреть их у соседа? Сделаем хитро - выберем проявляющего сетевую активность человека и утащим его посты к себе. После написания подобного скриптика для автопостинга, его можно поставить на cron (программа для запуска заданий по расписанию) с ежечасным вызовом. Для реализации этой задачи научимся читать посты юзеров. В твиттер API указано, что нужно использовать GET-запрос следующего вида - Для использования регулярных выражений в Python подключим модуль с названием re и используем его метод findall, который возвратит массив. Получим следующее:
Алгоритм скрипта активности будет такой:
Думаю, теперь ты и сам сможешь его написать… или подглядеть на врезке и нашем диске. Осталось разобрать еще два скрипта, которые связаны с ростом рекламной сети, - то есть, расширением списка друзей. Твиттерянин, где ты?Для поиска друзей я знаю три способа, которые нужно использовать в зависимости от желаемого результата:
Поиск по имени почти не интересен, и я не знаю, где он был бы в нашей деятельности полезен. Поиск по списку друзей - наиболее продвинут и совершенно незаменим в случае, если нужно искать людей определенного круга. Например, мы хотим продавать маечки с нарисованной Бритни Спирс. Ясное дело, нужно найти ее твиттер и достать список тех, кто его читает. Разумеется, на первых порах такой основательный таргетинг мы рассматривать не будем, поэтому в рамках статьи рассмотрим третий вариант - случайный выбор. Для этого лезем в API и видим, что, послав Get-запрос на URL
Получив список из 20 пользователей, нужно попросить их добавить нас в друзья. Благо, существует такая наука психология, и она говорит, что, если добавить пользователя к себе в друзья, то он с большой вероятностью добавит нас и будет читать наши сообщения :). Опять обратимся к API, в котором указано, что для добавления в друзья необходимо послать Post-запрос на URL Переводя все это на Python, получим основные строчки для добавления в друзья (остальное можно подсмотреть на диске):
Теперь берем и соединяем «поиск 20 случайных юзеров» и «добавление в друзья». В результате получаем супер скрипт, который, опять же, ставим на Cron с определенным интервалом, и наблюдаем, как бодро и молодцевато (так говорят у нас в милиции) растет рекламная сеть (блин, не зря мне показалось подозрительной его фотография в погонах – Прим. Лозовского). «Редиска» - плохой человекИ было бы все хорошо, если бы не существовали люди, не желающие ответным жестом добавлять нас с тобой в виртуальные товарищи. Эти люди портят статистику, поэтому я советую периодически от них избавляться. Для этого нужно получить список людей, которых ты добавил друзья, и список тех, кто добавил тебя. Сравниваем списки и кикаем лишних… Для получения списков нужно послать запросы на URL: В итоге, получим следующий код:
В переменных friends, followers будет храниться результат в формате xml, полученный от твиттера. Обработав их уже знакомой нам регуляркой на поиск тегов <screen_name>, получим массивы:
А теперь можно приступать к удалению, посылая запросы на URL
В путь!Вроде бы мы рассмотрели основные тезисы создания рекламной сети в твиттере. Это – базовый набор, которого вполне хватит на первое время. А дальше ты уже сам сможешь их расширять, исходя из своих потребностей, например, добавляя скрипту возможность работать с несколькими аккаунтами или использовать прямые текстовые сообщения, таргетинг и другие занимательные вещи. Напоследок предлагаю ознакомиться с примером из частной практики одного злого хакера. Итак, после регистрации аккаунта он устанавливает фотографию и заполняет все поля в профиле. Далее настраивает крон на запуск имитации активности где-то с периодичностью в 3 часа. Ждет неделю и затем - добавляет в крон запись, позволяющую раз в 3 дня запускать скрипт сначала на очистку от «редисок», а затем - на приглашение 100 новых юзеров. Об аккаунте он забывает до тех пор, пока у него не соберется где-то 2000 фаловеров. На этом он останавливает скрипты роста, оставляя лишь имитацию активности. Приблизительно раз в неделю размещается рекламное объявление. Скрипт имитации активности
Обновление статуса (отсылка сообщения) пользователя
Добавление в друзья
DVDНа диске, кроме исходников и необходимых установочных файлов, ты найдешь также видео автора об установке и настройке среды программирования WARNINGРеклама полностью законна! Но – незаконно копирование в свой твит чужого контента. Этого мы тебе делать не советуем. WWW
|