Мыла[21] с повторами, так как делать фильтрацию на уникальность в процессе работы было проблематично — накладно по расходу памяти.
Собранные новые домены и субдомены.
Оба файла за время работы набирали несколько гигабайт. Вылезло сразу несколько новых проблем.
Существовало много сайтов-ловушек (honeypot) с мусорными адресами, то есть целые страницы, на которых были размещены сотни сгенерированных адресов. Проблема осложнялась тем, что многие сгенерированные мэйлы были на вполне себе настоящих доменах, и отбросить их на стадии MX-валидации не представлялось возможным.
Наш паук игнорировал файл robots.txt, и мы получали абузы за скан сайтов — тех мест, куда паук не должен ходить. А делать парсер robots.txt совсем не хотелось.
Файлы с почтовыми адресами и доменами нужно было объединять с нескольких серверов и фильтровать на уникальность. То есть это работа с файлами размера заведомо большего, чем размер оперативной памяти.
Проблему первую мы пытались решить, отсекая все адреса, если их было больше определенного количества на странице. Но от этой идеи отказались, так как фильтр часто рубил и настоящие ящики. В итоге так ничего и не сделали.
Вторую проблему решили проще. Купили домен id-search.org, на нескольких языках написали «Мы группа ученых из… Новосибирского университета. Создаем поискового робота. Если вы заметили у себя в логе веб-сервера чрезмерную активность IDBot, пожалуйста, пишите нам на support@id-search.org». Пауку задали строку User-Agent’а[22] «IDBot/1.0; +http://www.id-search.org/». 99 % абуз стали приходить теперь нам.
Для третьей проблемы пришлось делать отдельную утилиту. Ее делал мой брат. Назвали MailListManager. Набор из трех утилит DoorIt! MailParser, MailListManager отныне назывался Spam Studio.
Утилита умела дедапить[23] почтовые адреса, домены, разбивать большие листы на части, удалять адреса по блэклисту, перемешивать и считать строки в файлах.
Удаление дупликатов в больших файлах (не помещающихся в оперативной памяти) работало так: сначала файл дробился на мелкие фрагменты, которые сортировались в памяти и сохранялись на диск, потом отсортированные фрагменты одновременно читались и соединялись в один результирующий файл с удалением дупликатов (для этого и нужна была сортировка по алфавиту).
И так нужно было опробовать все в действии. Для этого мы заказали десять серверов на общую сумму $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], переименовать его в SCR (такие расширения имеют скринсейверы) и сделать рассылку: «Смотрите. Здесь скринсейвер с голой Анджелиной Джоли». Сработало! Европейцы охотно запускали такой файл и, наверное, сильно удивлялись, не найдя внутри сисек Джоли.
Но и чистейшие европейские загрузки жили так же — два дня. Что-то тут было не так. Для проверки честности продавца ботнета я запустил бота на виртуальной машине VMWare[25]. И периодически, раз в несколько дней, сниффером проверял трафик. Всего два-три дня, и бот начал слать чужие письма. Мы предъявили веские доказательства воровства владельцу спам-ботнета. Отныне для нас ботнет был бесплатный, а Google (ник владельца на Spamdot) обязался выплатить нам 10 000 баксов неустойки двумя частями — 5000 сразу и 5000 чуть позже.
Спустя какое-то время пришло время выплаты второй части компенсации. Но Google почему-то забыл о ней. Пришлось создавать тему на Spamdot в разделе «Кидалы». Действовали мы медленно, без нажима, давая человеку осознать суть происходящего.
Ко мне в личных сообщениях вылез Spm — владелец конкурирующего ботнета Reactor Mailer. Он пытался «за Родину, за правду» добиться публикации лога сниффера. А нам в первую очередь нужен был сервер для рассылок, поэтому Spm был послан.