Электронная библиотека » Дмитрий Артимович » » онлайн чтение - страница 4


  • Текст добавлен: 15 марта 2023, 19:28


Автор книги: Дмитрий Артимович


Жанр: Документальная литература, Публицистика


Возрастные ограничения: +18

сообщить о неприемлемом содержимом

Текущая страница: 4 (всего у книги 13 страниц) [доступный отрывок для чтения: 4 страниц]

Шрифт:
- 100% +

Для низкачастотных запросов создавались дорвеи с тысячами перелинкованных страничек. Такие сайты индексировались поисковиками медленно, но реже вылетали из индекса и не привлекали внимания. На каждой страничке дорвея стоял JavaScript, который не мог выполнить поисковый робот, а вот браузер серфера[13]13
  Серфер, веб-серфер (от англ. surfer) – сленговый термин, обозначает активного пользователя Сети интернет, который перемещается по страницам сайтов.


[Закрыть]
перекидывал его на целевой сайт.

Монетизировать трафик можно было либо на PPC (Pay-Per-Click), либо на одной из партнерских программ[14]14
  Партнерская программа (Affiliate Program) – вид сотрудничества магазина с веб-мастером, при котором веб-мастер приводит покупателей в магазин и получает свою комиссию от каждой продажи.


[Закрыть]
. Ребят, кто занимался таким заработком, называли веб-мастерами.

Партнерских программ существовало очень много. В адалте[15]15
  Адалт (от англ. adult – «взрослый») – сайт со взрослым контентом или тематическими услугами (порнографические ресурсы, интимные магазины и т. д. и т. п.).


[Закрыть]
их насчитывалось сотни. Были ещё партнерские программы по БАДам, всякого рода удлинителям члена и индийским таблеткам.

PPC представляли собой некое подобие поисковиков, только за каждый клик на сайт магазина они платили деньги веб-мастеру. А магазин закупал трафик у PPC по ключевым словам на основе аукциона (примерно так же работает платная реклама Гугла и Яндекса), кто дает большую ставку за бид, тот и показывается сверху. Самые известные у нас были Umax и KlikVip. Партнерские же программы платили процент от продаж.



В 2006–2007 годах начался расцвет фарма партнерок. Продавали они все индийские дженерики[16]16
  Джене́рик (англ. generic drug) – лекарственное средство, содержащее химическое вещество – активный фармацевтический ингредиент, идентичный запатентованному компанией, первоначальным разработчиком лекарства.


[Закрыть]
. Когда «Виагра» в аптеке стоила десятки долларов за таблетку, индийский дженерик Sildenafil на таких онлайн-магазинах имел цену всего несколько долларов. А закупочная цена у фабрик в Индии составляла вообще несколько центов. Партнерок было много: Rx-partners, Evapharmacy, Rx-promotion, Glavmed. Самой раскрученной тогда была партнерка Desp’а – Glavmed. Ее реклама пестрила почти на всех форумах. Glavmed, когда выходил на рынок, сильно снизил цены на медикоменты по отношению к конкурентам. Этот маркетинговый трюк сработал: во-первых, дешевые таблетки лучше расходились, во-вторых, Glavmed перетащил на себя большинство веб-мастеров.

Мы решили сосредоточиться на ключевых словах по таблеткам. На таких конкурентных ключевиках все решала ссылочная масса. То есть недостаточно было просто сделать дорвей, на него нужно было расставить ссылки со сторонних ресурсов. И чем больше, тем лучше.

Набор ссылочной массы решали спамом по гостевым книгам и форумам. Для этого использовались специальные спамилки: Spam It, XRumer. Первая просто искала форму отправки сообщения на странице и постила туда ссылку на ваш дорвей. XRumer был более продвинутый, он умел разгадывать капчи на многих форумах и гостевых книгах автоматически. Вот только у него была одна существенная беда – он постоянно падал.

Кроме всего прочего, форумы и гостевые книги нужно было собирать парсингом гугла. То есть формировался файл запросов (например, inurl: forum) и собиралась выдача гугла.

А еще нужны были прокси, иначе сервер, на котором мы запускали спамилку, завалили бы абузами[17]17
  Абуза – это жалоба, отправленная пользователем хостинг-провайдеру.


[Закрыть]
.

Сначала мы купили Spam It – отдачи от него было мало. Решились приобрести XRumer за $400. Тогда для нас это была приличная сумма. Поскольку он постоянно падал, я написал небольшую программу, которая проверяла, запущен ли хрумер, и в случае падения запускала бы его снова. Благо хрумер сохранял прогресс и при перезапуске просто возобновлял работу.

Вопрос с прокси мы решили по-другому. Они сильно замедляли работу, поэтому было решено найти абузостойкий (bulletproof) хостинг для спама по гостевым книгам. Пошарив по форумам, я нашел украинский хостинг DreamHoster, который за скромную плату $400–500 в месяц согласился предоставить такой сервер. Правда, поработали мы там недолго. При очередной оплате Дрист (так мы его прозвали) нас кинул, деньги так и не вернул. Пришлось искать сервера дальше – перебрать кучу дата-центров, куда я отправлял письмо с вопросом, можно ли от них спамить по гостевым книгам и форумам. И такой нашелся, в Штатах, сервера стоили всего $60-120. Нас предупредили, что ресурсы, шлющие жалобы, нужно просто удалять из базы так, чтобы один и тот же человек больше не абузил.

Выбрав blogspot.com для хостинга и ключевые слова «buy Viagra» и «buy Viagra online», хорошенько их проспамив хрумером, мы смогли вывести эти доры на первые позиции поисковика MSN. Конечно, это был не гугл. Но пару продаж «Виагры» в день MSN приносил. Пока наши доры на blogspot.com не украли.

Для генерации дорвеев я написал небольшую программку DoorIt!. Она создавала страницы по заданому шаблону с заданной плотностью ключевых слов, перелинковывала их. Умела автоматически заливать полученный дорвей по FTP. А также умела парсить Overture – популярный тогда сервис по поиску ключевых слов.

DoorIt! мы с братом продавали по SEO-форумам за $50. Продали всего три-четыре копии, но это был первый софт, который сделали мы сами и смогли продать.

Дорами я занимался параллельно основной работе в «Адаманте» прямо за рабочим компьютером, а также вечерами.

Spamdot

Мой ник[18]18
  Никнейм (ник; англ. nickname) – псевдоним, используемый пользователем в интернете, обычно в местах общения (в блогах, форумах, чатах). Никнейм характеризует представившегося и является многофункциональным средством добавления выразительности в высказывания.


[Закрыть]
на всех форумах тогда был Engel, по названию песни Rammstein, моей любимой со школы группы. Мы, как и любая молодежь, отрицали тогда попсу, которую слушали наши родители. И пытались выделяться тем, что слушаем немецкий рок. Но Rammstein так и остался моей любимой группой на всю жизнь. В одно время я даже покупал плакаты с изображением участников группы и обклеил ими все стены у себя в комнате. А также хотел носить зачесанные назад синие волосы, как Тиль Линдеман. До покраски в синий цвет я так и не дошел, зато отрастил хвостик и проходил с ним пару лет.


Источник: www.gee.ru


Интересно, что следствие ФСБ и многие журналисты, в том числе Брайан Кребс, приписывают ник Engel моему брату, хотя изначально это был мой никнейм.

Занимаясь поиском возможностей заработать в онлайне, я попал на форум спамеров – Spamdot. Форум был всегда закрытым, но тогда для регистрации было достаточно написать админу в аську (ICQ)[19]19
  ICQ (от англ. I seek you – «я ищу тебя») – бесплатная система мгновенного обмена текстовыми сообщениями.


[Закрыть]
, тебе задавали пару вопросов: откуда ты узнал о форуме и чем занимаешься. Я честно ответил: «Пишу софт». Так, на форуме Spamdot появился новый участник Engel с забавной аватаркой черного ангела.

На Spamdot для меня открылась новая вселенная. Одни делали почтовые рассылки за деньги (например, 1 млн адресов по России стоил $100), другие – продавали ту же «Виагру» через спам, третьи – писали софт для спама.

На форуме было представлено несколько категорий продавцов.

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

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

Продавцы email-баз. Их было один-два человека всего.

Спонсоры – партнерские программы.

И мы решили: если идти в спам, то первое, что нужно, – это почтовые базы. Покупать смысла не имело – непонятно, какого качества окажется база. По хорошим email-базам рассылают, а не продают.

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

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



Писал веб-паука я около двух месяцев. Мой рабочий день выглядел так: подъем в 11 утра, сбор за 15 минут, выдвижение к метро, сон, стоя в метро полчаса, по выходе на Сенной площади баночка энергетика, перезарядка, баночка энергетика в обед, 9 часов на работе, метро, поездка домой, баночка энергетика, работа над пауком полночи, сон 4–5 часов. И все повторяется снова. Только на выходных я мог выспаться.

Зато у меня скопилась огромная гора пустых банок из-под энергетика.

Поскольку времени было в обрез, я пристрастился ужинать в KFC. Ох, как глуп я был! На курочке, бургерах и коле я набрал вес – с 77 кг до 110! Весь мой, некогда красивый, рельф покрыл толстый слой жира.

Возвращаемся к пауку. Я реализовал свой парсер HTML для экономии памяти, ведь приложение работало в несколько сотен потоков. Тот же libxml был непозволителен, поскольку делал слишком много динамических аллокаций памяти, а это дорого по производительности. И еще он съедал память. Много бессонных ночей я провел в отлаживании многопоточной работы. Например, крашился[20]20
  Краш или крэш (англ. crash – крушение) – непредвиденное завершение работы программы. В терминологии программирования критическая ошибка, которая приводит к аварийному завершению программы («падению»), также называется крэшем или «крашем».


[Закрыть]
один поток, а ошибка вылезала совсем в другом.

Распределение нагрузки между несколькими рабочими серверами выглядело так: брались домены, которые нужно обойти, и делились по количеству серверов. Сам парсер не выходил за пределы изначального домена и его уровня, то есть, если он бегал по домену второго уровня, он не переходил на субдомены. А результаты своей работы парсер клал в два больших файла:

Мыла[21]21
  Мыло – электронная почта (email), сообщение в электронной почте или адрес электронной почты.


[Закрыть]
с повторами, так как делать фильтрацию на уникальность в процессе работы было проблематично – накладно по расходу памяти.

Собранные новые домены и субдомены.

Оба файла за время работы набирали несколько гигабайт. Вылезло сразу несколько новых проблем.

Существовало много сайтов-ловушек (honeypot) с мусорными адресами, то есть целые страницы, на которых были размещены сотни сгенерированных адресов. Проблема осложнялась тем, что многие сгенерированные мэйлы были на вполне себе настоящих доменах, и отбросить их на стадии MX-валидации не представлялось возможным.

Наш паук игнорировал файл robots.txt, и мы получали абузы за скан сайтов – тех мест, куда паук не должен ходить. А делать парсер robots.txt совсем не хотелось.

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

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

Вторую проблему решили проще. Купили домен id-search.org, на нескольких языках написали «Мы группа ученых из… Новосибирского университета. Создаем поискового робота. Если вы заметили у себя в логе веб-сервера чрезмерную активность IDBot, пожалуйста, пишите нам на [email protected]». Пауку задали строку User-Agent’а[22]22
  User-Agent – идентификационная строка клиентского приложения, использующая определенный сетевой протокол; обычно используется для приложений, осуществляющих доступ к веб-сайтам – браузеров, поисковых роботов и «пауков».


[Закрыть]
«IDBot/1.0; +http://www.id-search.org/». 99 % абуз стали приходить теперь нам.

Для третьей проблемы пришлось делать отдельную утилиту. Ее делал мой брат. Назвали MailListManager. Набор из трех утилит DoorIt! MailParser, MailListManager отныне назывался Spam Studio.



Утилита умела дедапить[23]23
  Дедап (от англ dedup/deduplicate) – удаление повторов.


[Закрыть]
почтовые адреса, домены, разбивать большие листы на части, удалять адреса по блэклисту, перемешивать и считать строки в файлах.

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

И так нужно было опробовать все в действии. Для этого мы заказали десять серверов на общую сумму $1000 за месяц. В течение этого месяца мы собрали 100 млн свежих почтовых адресов.

Как попробовать базу на деле? На Spamdot можно было арендовать два спам-ботнета: Reactor Mailer (Srizbi botnet) и Obulk Psyche Evolution (Cutwail). Reactor стоил $4000 за месяц без учета загрузок. Obulk имел два тарифа: так же, как Reactor, $4000 в месяц, или $1200 и 20 % продаж с партнерских программ.

Где взять деньги на аренду софта? Продать собранную базу почтовых адресов. Базу мы продали в одни руки за $4000. Арендовать решили Obulk по тарифу $1200, плюс 20 % от наших продаж.

Теперь нужно было купить загрузки. Загрузки (installs) – это установки вашего бота на машины пользователей. Цены за 1000 загрузок зависят от страны и качества (другой мути, что грузят параллельно с вами). Чем больше грузят параллельно, тем меньше живут ваши загрузки. Цена за 1000 может варьироваться от десятков долларов до сотен, в зависимости от страны. Самые дешевые – микс, самые дорогие – Соединенные Штаты. В спаме очень важна постоянная смена IP, поэтому лучше всего подходят дешевые загрузки – микс (все страны вперемешку).

Вот только дешевые микс-загрузки умирали моментально. Вам только что прогрузили 10 000 установок, а на следующий день в онлайне всего 100 ботов. Решение пришло неожиданно. А что если взять Loader.exe[24]24
  Лоадер (от англ. Loader) – программа, которая разворачивает на машине пользователя бота.


[Закрыть]
, переименовать его в SCR (такие расширения имеют скринсейверы) и сделать рассылку: «Смотрите. Здесь скринсейвер с голой Анджелиной Джоли». Сработало! Европейцы охотно запускали такой файл и, наверное, сильно удивлялись, не найдя внутри сисек Джоли.

Но и чистейшие европейские загрузки жили так же – два дня. Что-то тут было не так. Для проверки честности продавца ботнета я запустил бота на виртуальной машине VMWare[25]25
  VMware Workstation – система виртуализации для настольного компьютера.


[Закрыть]
. И периодически, раз в несколько дней, сниффером проверял трафик. Всего два-три дня, и бот начал слать чужие письма. Мы предъявили веские доказательства воровства владельцу спам-ботнета. Отныне для нас ботнет был бесплатный, а Google (ник владельца на Spamdot) обязался выплатить нам 10 000 баксов неустойки двумя частями – 5000 сразу и 5000 чуть позже.

Спустя какое-то время пришло время выплаты второй части компенсации. Но Google почему-то забыл о ней. Пришлось создавать тему на Spamdot в разделе «Кидалы». Действовали мы медленно, без нажима, давая человеку осознать суть происходящего.

Ко мне в личных сообщениях вылез Spm – владелец конкурирующего ботнета Reactor Mailer. Он пытался «за Родину, за правду» добиться публикации лога сниффера. А нам в первую очередь нужен был сервер для рассылок, поэтому Spm был послан.

Таблеточные спонсоры на Spamdot были представлены: Mailien, Spam It (то же, что и Glavmed, только для почтового спама), EvaPharmacy и несколько других, помельче.

Мы решили работать со Spam It. Это был август 2007 года, и мы заработали в этот месяц с него около $8000.

Наша база конвертировалась просто отлично.

Увольнение

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

К тому времени я уже два года работал в «Адаманте», и моя зарплата выросла с $400 до $1800. Подходили сроки сдачи демоверсии издателю, а в некоторых местах EFT (Exodus From Earth) показывали слишком низкий FPS. Дамир временно назначил меня главным по задачам, связанным с проблемами производительности. Я впервые в жизни возглавил небольшое направление. Мою зарплату подняли еще на $200, как раз на время работы по оптимизации.

Как только этап был завершен, Дамир позвал меня к себе в кабинет:

– Извини, вышла ошибка. Я ошибочно поднял тебе зарплату.

Возникло такое гадкое ощущение, что меня использовали. Бухгалтерия в «Адаманте» была двойная. Зарплату платили в конвертах. Я прекрасно понимал, что они как добавили, так же и заберут. А тут вроде и спам нормально пошел.

Я взял отпуск. Первый раз за два года. Отпускные нам, естественно, не давали, просто продолжали платить зарплату в конвертах.

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

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

– Дим, у тебя что-то случилось?

– Да, я уволился.

Никакой личной неприязни к Артёму я не испытывал. Он все-таки уговорил меня позже приехать и подписать документы об увольнении.

Дамир решил мне гневно высказать:

– Ты просто взял все бросил и исчез.

«Осталось только добавить: как ты посмел, смерд?» – подумал я, развернулся и ушел.

Так в «Адаманте» я оставил свою первую трудовую книжку.

СПАМ

Почтовые рассылки

Как я подозреваю, Google воровал не только ботов, но и почтовые базы. Отдача с нашей базы резко упала через пару месяцев. Взамен Google залил нам миллиардную базу мусорных адресов. С нее особо ничего не продавалось. Зато мы могли ее продавать на Spamdot и иметь хоть какой-то небольшой дополнительный заработок. Нечестно, согласен.

Я решил заняться рассылками по России – один миллион доставленных писем за $100. Купил отдельный телефон с левой симкой. Несколько раз в неделю я делал рассылки с предложением проспамить ваш товар. После отвечал на телефон и ставил рассылки.

Кто-то был доволен, кто-то – нет. Некоторые звонили и предъявляли потом претензии: мол, отдача никакая, возвращайте деньги.

Близилась зима 2007 года. Мы хотели провести Новый год где-нибудь вдали от Питера или Кингисеппа. Для этого нужно было купить машину. Мы с братом подумывали о «Шевроле Ниве» и поехали в автосалон выбирать. В автосалоне во всей красе, кроме «Нив», стояли УАЗики – «Хантер» ы и «Патриоты». Нам настолько понравился «Патриот» (большой, вместительный, проходимый), что в итоге мы взяли его в кредит.



Потом докупали достаточно много примочек: хромированный обвес, аудиосистему, перетяжку салона натуральной кожей и т. п. За все время эксплуатации у УАЗа несколько раз тёк радиатор, сгорал генератор, заклинивал руль, отваливалась рулевая балка, а масло вытекало через прокладку на поддон двигателя.

С рулевой балкой и сервисом – отдельная история. Ехали мы как-то с братом из Кингисеппа в Петергоф. Посередине шоссе кто-то вырыл канаву, возможно, клали кабель или трубу. При этом никакого знака дорожных работ не было. У легковой машины перед нами колеса после удара встали под 45 градусов. Мы же отделались тем, что погнули рулевую балку. Решено было сразу ехать в сервис. В сервисе нам сказали, что новых балок нет, но они выпрямят и поставят старую. Через несколько месяцев на проселочной дороге балка полностью отвалилась, и машина осталась без рулевого управления. Хорошо, что скорость была низкая – не более 15 км/ч.

Новый год 2007–2008 мы провели в коттеджном поселке под городом Луга, арендовав на четыре дня коттедж за 120 тысяч рублей, и это еще без завтраков. Цены были задраны космические, при этом нам отдельно продавали дрова для камина. И, как оказалось, за новогоднюю программу нужно было еще доплатить. Жидовский сервис. Хотя я практически не встречал хорошие российские отели.

После Нового года хозяйка питерской квартиры опять завела разговор о том, что мне придется съехать… На этот раз, взвесив все за и против, я реально решил съехать. Денег было мало, находиться в Питере смысла не имело – можно было работать откуда угодно, где есть интернет.

Я решил забрать вещи и уехать домой. Так мы с братом и сделали. Забрали все, вплоть до обоев, которые мы клеили сами. А ключи от железной двери, что ставили за свой счет, согнули и выбросили. Загрузили вещи в кузов УАЗика и поехали в Кингисепп. Хозяйка звонила мне после этого всего один раз. На звонок я не ответил.

NorthWind

Система антиспама Mail.ru в 2010 году состояла из Kaspersky Anti-Spam (или коротко – KAS) и разработанной в Mail.Ru системой фильтрации спама – MRAS (Mail.Ru Anti-Spam). В 2009–2010 годах. Mail.ru столкнулся с волной спама: копии брендов, телефонов, онлайн-знакомства. Причем то был спам внутренний, когда рассылки делали изнутри самого же сервиса, и он оказался не готов к этому. Поэтому в срочном порядке разработчики стали подкручивать фильтры, что приводило даже к тому, что отсекалась часть легитимной переписки. К спам-шторму Mail.ru имели отношение напрямую я и мой брат.

К 2009 году очень многие пользователи интернета все больше переходили на крупные почтовые хостинги, такие как Gmail.com, AOL.com, Yahoo.com, а в Росии – Mail.ru и Yandex.ru.

Когда на одном домене сидит несколько десятков или даже сотен миллионов пользователей, то ему бороться со спамом куда проще. Сервис просто ведет мониторинг IP-адресов, с которых шлют почту. Проверяют адреса по блэклистам Spamhaus, частоте отправки. Например, если конкретный IP-адрес не принадлежит крупному почтовому хостингу, но при этом шлет несколько сотен тысяч однотипных почтовых сообщений – он банится.

На Spamdot стали зарождаться сервисы рассылки через Web, а софт для такой рассылки назывался вебмейлер. Отличие его было в том, что слал он почту не через протокол SMTP[26]26
  SMTP (англ. Simple Mail Transfer Protocol – простой протокол передачи почты) – это широко используемый сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.


[Закрыть]
, а через http(s)[27]27
  HTTP (англ. HyperText Transfer Protocol – «протокол передачи гипертекста») – протокол прикладного уровня передачи данных, изначально в виде гипертекстовых документов в формате HTML, в настоящее время используется для передачи произвольных данных.


[Закрыть]
, эмитируя действия пользователя. То есть робот логинился на сайте того же Gmail.com и отправлял письма из веб-интерфейса.

Я уже не помню, кто закинул нам идею сделать подобный софт под Mail.ru. Задача осложнялась тем, что на Mail.ru при отправке определенного числа писем с одного аккаунта появлялась капча[28]28
  Ка́пча (от CAPTCHA – англ. Completely Automated Public Turing test to tell Computers and Humans Apart – полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей) – компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером.


[Закрыть]
. И эту задачу нужно было решить.

Следующей программой в составе пакета Spam Studio стал вебмейлер NorthWind.

Тут нам и пригодился XRumer, который умел разгадывать капчи. Только не он сам, а его создатель – человек под ником Botmaster. Мы предложили ему сотрудничество: за $4000 сделать нам модуль в виде отдельной библиотеки для распознавания капчи под Mail.ru с поддержкой на год, а далее уже платную поддержку. Так вопрос с капчей был решен.



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

Многопоточную часть я взял из предыдущего софта MailParser. Встроенный в паука парсер HTML умел только выделять ссылки, мне же требовалось парсить страницу, выделять не только ссылки, но и формы с полями. Пришлось подключить libxml, на ней и сделал парсер, который умел читать HTML-формы, задавать значение полей и отправлять назад, на сервер POST запрос. Сами же сервисы, такие как Mail.ru и Gmail.com, наследовали виртуальный интерфейс парсера.

Виртуальные интерфейсы я полюбил еще в «Адаманте». Там их взяли на вооружение после того, как посмотрели код Half-Life – 2. В этой игре каждая библиотека экспортировала наружу чисто виртуальный класс (C++). Эту фишку я использовал позже во всем нашем софте.

Далее у интерфейса реализовывалось несколько виртуальных методов: Login, Spam, Logout. Зайти, отправить письмо (несколько раз), выйти. Все остальное было общее для всех: загрузка базы адресов, загрузка аккаунтов, загрузка списка прокси.

К тому времени появилось уже несколько сервисов по продаже аккаунтов (login: password) для разных сайтов. Обычно 1000 штук стоила от $5 до $30.

Мой брат сделал для вебмейлера систему генерации письма на основе макросов. Макросы нужны были для рандомизации текста. Например, текст мог выглядеть так:

Привет, {ROT: NAME}

Покупай точную копию часов Hublot по ссылке {URL}

{BUY}.

Здесь NAME, URL, BUY – это макросы, которым задаются значения до начала рассылки, а ROT означает «выбирать значения макроса NAME последовательно, по кругу». Были и другие префиксы.

Проект получился коммерчески очень удачным. После Mail.ru мы добавили Yandex.ru, Gmail.com, AOL.com, Yahoo.com и другие почтовые сервисы. Мы продали вебмейлер более 12 клиентам по цене от $4000 за копию. Любой дополнительный сервис стоил денег. Также мы сдавали вебмейлеры в аренду. А Mail.ru тем временем захватила волна спама. На это компания отреагировала усилением фильтрации, да с такой степенью, что их фильтры рубили часть легитимной переписки.

В 2009 году новые владельцы Spamdot, партнерская программа Spam It, решили провести конкурс среди участников форума. Суть конкурса была в том, что участникам выдается небольшая почтовая база со специально вставленными контрольными адресами, далее по ней в определенное время нужно провести рассылку. Организаторы проверяют контрольные ящики и распределяют места. Я тогда получил статус Master of Inbox на Spamdot. Рассылки делал вебмейлером через Яндекс. Почту.

Botnet

Архитектура

Настоящий спамер должен иметь свой ботнет. Тогда и загрузки, и базы будут в безопасности. Так мы и решили с братом. Для этого нужно было сделать максимально эффективного бота – экономного к памяти, не грузящего CPU и невидимого. И написать максимально эффективный к системным ресурсам сервер управления, чтоб не разориться на железе. Например, у Cutwail серверная часть была написана на Python и не держала больше четырех тысяч онлайна. Онлайн ботнета – это количество ботов, отстучавших на сервер управления в течение некоторого времени. Боты подключаются к серверу, например, раз в минуту, отчитываются о выполненных задачах и получают новые. Держать постоянные соединения нет смысла. Бот того же Cutwail работал в usermode, то есть его трафик был виден снифферам (работающим на уровне ядра операционной системы), и он был уязвим к антивирусам.



Разработка началась с посещения мной «Буквоеда» рядом с метро «Площадь Восстания» в Питере. Там я отыскал штук пять книг по руткитам[29]29
  Руткит (англ. rootkit, то есть «набор root-а») – набор программных средств, обеспечивающих маскировку объектов (процессов, файлов, каталогов, драйверов).


[Закрыть]
и одну – по разработке драйверов. Из всех книг по руткитам самая ценная была книга Хоглунда и Батлера «Руткиты: внедрение в ядро Windows». В ней было очень много реальных примеров кода.

Мне в то время очень хотелось равняться на Reactor Mailer (Srizbi). Его бот был руткитом ядра ОС Windows. Windows – самая распространенная десктопная операционная система, и писать руткит под Linux коммерчески невыгодно. Srizbi общался напрямую с драйвером сетевого адаптера по интерфейсу NDIS (Network Driver Interface Specification), то есть был невидим для любого антивируса и сниффера.

Книга «Руткиты: внедрение в ядро Windows» как раз и описывала работу бота в ядре операционной системы: как прятать файлы, как прятать драйверы и процессы в памяти, как работать с сетью на низком уровне. Чего мне не хватало, так это знаний в разработке драйверов. Ведь, по сути, хороший руткит режима ядра – это драйвер, который сам себя и маскирует.

Итак, нужно было сделать:

• Сервер управления ботнетом. Требования по памяти и CPU очень критичны. Серверное приложение должно было уместиться на средненьком сервере с 8 Гб памяти, при этом выдерживать онлайн 60 тысяч ботов.

• Бота – руткит режима ядра операционной системы: скрытие своего файла на диске, ключей в реестре, скрытие сетевого трафика, минимальная нагрузка на CPU, минимальный расход оперативной памяти.

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

• Веб-интерфейс управления ботнетом.



Архитектуру ботнета в виде модульной структуры я взял из «Адаманта», а они, в свою очередь, с Half-Life 2. Мне очень понравилась идея экспортировать из модуля в виде библиотеки всего две функции: Create Module и Delete Module. Первая возвращает интерфейс IModule, который и реализует функциональность. В сам же модуль передаются интерфейсы IKernel – функций ядра, ISocks – сетевого интерфейса и т. д. Все красиво и прозрачно.

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

Это была очень интересная и творческая работа, я полностью погрузился в процесс. А моему брату это было очень удобно, он делал только веб-интерфейс на PHP и модифицировал систему макросов от NorthWind для работы в ботнете, при этом у него оставалось еще уйма свободного времени. Он взял на себя роль СТАРШЕГО, восполнив на тот момент мою потребность в родителе и наставнике. Потребность в родителе, который мог сказать те самые слова «отличная работа, молодец», в родителе, который мог бы посоветовать, как поступить в сложной ситуации.

Позже ботнет получит название Festi. ФСБшники при аресте моего брата ошибочно решат, что это он написал ботнет, а его ник на Spamdot был Engel. С их же подачки это подхватит и Брайан Кребс.

Бот

Программирование драйверов сильно отличается от разработки прикладных программ. Если вы знакомы с кольцами привилегий процессора, то знаете, что ядро Windows и драйверы работают на нулевом. А процессоры архитектуры x86 реализуют четыре кольца привилегий для процессов, нулевое использует ядро операционной системы – у него есть полный доступ ко всему оборудованию. Прикладные процессы же работают в четвертом кольце, любое прямое обращение к оборудованию или вызов каких-либо привилегированных инструкций вызывает исключение, которое обрабатывается ядром ОС. Более того, любое падение прикладного процесса (например, обращение по несуществующему адресу, деление на ноль) никак не влияет на работу операционной системы и остальных прикладных процессов. В то время как ошибка в коде драйвера часто приводит к BSOD (Blue Screen Of Death – синий экран смерти). Требования к разработке драйверов и квалификации программиста возрастают на порядки. Если бы, например, руткит писал Botmaster (создатель XRumer, который постоянно падает), – капец машинам пользователей.



Далее хороший бот должен иметь минимальный размер. Большую часть кода в таких небольших программках несет The C runtime Library (CRT), которая линкуется к любому стандартному проекту по умолчанию. И прибавляет к небольшому файлу весом 30 Кб еще пару мегабайт. В CRT идут все стандартные функции С-шных библиотек, обкрутка входной точки в исполняемый файл и т. п. Единственное решение – отключать ее.

Отключив CRT, я сразу лишился стандартных функций malloc/free – выделение/освобождение памяти, без которых программировать крайне сложно. Также не были доступны функции работы со строками, которые требовались модулю спама.

В ядре операционной системы память делится на два типа: выгружаемые страницы и невыгружаемые. Выгружаемые страницы, как следует из их названия, могут выгрузиться ядром ОС на диск, в файл подкачки. Невыгружаемые всегда остаются в памяти. Если процессор обращается по адресу страницы, отсутствующему в данный момент в памяти, генерируется прерывание (Interrupt Request – IRQ[30]30
  IRQ (от англ. interrupt request, «запрос на прерывание») – специальный сигнал, который сообщает процессору о необходимости прервать выполнение текущей программы, сохранить ее состояние в стеке и перейти к заранее заданному адресу памяти. Сам этот процесс называется прерыванием, и нередко саму аббревиатуру IRQ для краткости расшифровывают просто как «прерывание». Поддержка прерывания обеспечивается специальным контроллером прерываний, давно уже ставшим частью чипсета.


[Закрыть]
). Прерывание перехватывает ядро ОС и подгружает нужную страничку в память. Все внешние устройства уведомляют ОС через прерывания. Хитрость заключается в том, что у каждого прерывания есть приоритет, и прерывание с более высоким приоритетом вытесняет прерывание с более низким. Теперь представьте, что случится, если сработает прерывание с приоритетом выше прерывания на подгрузку странички памяти, а обработчик этого прерывания находится на выгруженной страничке в файле подкачки. Всё, операционной системе – хана. Такие детали постоянно нужно держать в голове.

Внимание! Это не конец книги.

Если начало книги вам понравилось, то полную версию можно приобрести у нашего партнёра - распространителя легального контента. Поддержите автора!

Страницы книги >> Предыдущая | 1 2 3 4
  • 0 Оценок: 0

Правообладателям!

Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Популярные книги за неделю


Рекомендации