AOL сошел с ума или авторегер на mail.com

Не понятно какие тараканы укусили админов AOL, но подконтрольный AOL’у сервис mail.com с какого-то перепуга отменил капчу при регистрации мыла.

В связи с этим событием, с которым может сравнится только финал ЧМ-2010, в адекватности судьи которого, кстати, я не уверен и не признаю никакого другого ЧМ кроме Нидерландов,  я считаю просто необходимо написать авторегер под эту штуку.

Сам скрипт авторега я не написал еще, да думаю и не надо, каждый и сам сможет переписать выложенный здесь код под свои нужды. А написал я класс или точнее сказать скрипт-библиотеку, естественно на Ruby, который содержит все необходимые методы для регистрации мыла, быть может заисключением проверки адреса на существование.

Сам скрипт

#!/usr/bin/ruby
require ‘net/http’
require ‘net/https’

def str2pc(str)
if !str then return “|ERR=#{str}|” end
i=0
pc=”
while i<str.size do
pc+=”%#{str[i].to_s(16)}”.upcase
i+=1
end
return pc
end

class Acc
attr_accessor :login,:pass,:domain
def initialize(login,pass,domain)
@login=login
@pass=pass
@domain=domain
@http=Net::HTTP.new(‘signup.mail.com’, 443)
@http.use_ssl = true
@path=’/UserInformationB.aspx’
end

def get_headers(refer)
return headers = {
‘Cookie’ => @cookie,
‘Referer’ => refer,
‘Content-Type’ => ‘application/x-www-form-urlencoded’,
‘User-Agent’=> ‘Mozilla/5.0 Gecko/20090909 Windows NT 5.0/9′
}
end

def get_fst_cook
begin
resp, data = @http.get(@path, nil)
@cookie = resp.response['set-cookie']
@__VIEWSTATE=data.split(“__VIEWSTATE\” value=\”")[1].split(“\”")[0]
@__EVENTVALIDATION=data.split(“__EVENTVALIDATION\” value=\”")[1].split(“\”")[0].gsub!(/([^a-zA-Z0-9])/){str2pc($1)}
rescue
return e
end
return 0
end

def reg
begin
data = “__VIEWSTATE=#{@__VIEWSTATE}&__EVENTVALIDATION=#{@__EVENTVALIDATION}&hOptin=2&hdCheckbox=1&hdCampaignCheckbox=0&RefenceCode=event01&TrkID=0000&FirstName=fdsjhfj&LastName=jkvhfsdjk&drpMonth=06&drpDay=07&drpYear=1975&Username=#{@login}&Domainname=#{@domain}&Password=#{@pass}&PasswordConfirm=#{pass}&setpw=False&SecQuestion=3&SecAnswer=bhgfhgfhjfghgfhg&Agreed=Create+Account”
resp, data = @http.post(@path, data, self.get_headers(‘https://signup.mail.com/UserInformationB.aspx’))
@cookie = @cookie+resp.response['set-cookie']
@path=resp['location']
resp, data = @http.get(@path, self.get_headers(‘https://signup.mail.com/UserInformationB.aspx’))
@path=resp['location']
resp, data = @http.get(@path, self.get_headers(“https://signup.mail.com/#{@path}”))
rescue => e
return e
end
return 0
end
end#class

#EXAMPLE
accs=Acc.new(“test”,”example”,”california.usa.com”) #test@california.usa.com:example
puts accs.get_fst_cook
puts accs.reg

Немного разберем скрипт.

Итак, он содержит 1 функцию – str2pc и класс Acc. str2pc преобразует символы в процент-код.

Класс Acc

  • метод get_headers – возвращает заголовок пакета
  • метод get_fst_cook – получает необходимые кукисы и параметры для дальнейшей регистрации
  • метод reg – собственно сама регистрация

Рассмотрим подробнее метод get_fst_cook. Он получает страницу регистрации /UserInformationB.aspx методом GET, а в месте с ней и первые кукисы. Далее парсит страницу на 2 необходимых параметра:

  1. __VIEWSTATE
  2. __EVENTVALIDATION

причем в __EVENTVALIDATION попутно заменяются все символы, неудовлетворяющие регулярному выражению ([^a-zA-Z0-9]) на процент-код.

Метод reg. Отправляет собственно сам POST-запрос регистрации, а затем 2 GET запроса на страницы /UserInformationB.aspx и той, на которую стоит переадресации в полученном пакете. Последний запрос не обязателен и регистрация пройдет и без него, однако он нужен если вы не хотите получить при входе на мыло страницу о успешной реги и прочей фигне.

Как использовать класс

Все очень просто и пример описан под комментарием #EXAMPLE:

  1. в конструкторе вводим логин, пароль и домен – accs=Acc.new(“test”,”example”,”california.usa.com”)
  2. вызываем get_fst_cook, в случае ошибки возвращает текст ошибки, иначе 0 – accs.get_fst_cook
  3. вызываем reg, в случае ошибки возвращает текст ошибки, иначе 0 – accs.reg

Это все. Чтобы сделать из этой библиотеки полноценный авторегер особого ума не надо, и если же вы все-таки его сделаете незабудьте выложить в паблик.

Скачать скрипт в нормальном виде можно здесь.

P.S. хочу также сказать спасибо nonamez’у за его пост в его блоге, где он поведал о плагине для FireFox Live HTTP Headers, без него было бы тяжко разбирать снифером HTTPS-пакеты. Статью можно прочитать здесь.

6 Comments to “AOL сошел с ума или авторегер на mail.com”

  1. Павел пишет:

    Не совсем получилось…

    require “lib”

    names = []
    families = []
    words = []
    domains = []

    IO.readlines(‘../common/names.txt’).each { |line| names << line }
    IO.readlines('../common/family.txt').each { |line| families << line }
    IO.readlines('../common/words').each { |line| words << line }
    IO.readlines('domains').each { |line| domains <>

    Макар;Масмехов;cambersjugged;toriamosfan.com;go92_toxemia0
    0
    /usr/local/lib/ruby/1.8/net/http.rb:1474:in `initialize’: undefined method `empty?’ for nil:NilClass (NoMethodError)
    from /usr/local/lib/ruby/1.8/net/http.rb:1592:in `initialize’
    from /usr/local/lib/ruby/1.8/net/http.rb:772:in `new’
    from /usr/local/lib/ruby/1.8/net/http.rb:772:in `get’
    from ./lib.rb:68:in `reg’
    from reg.rb:23
    from reg.rb:13:in `times’
    from reg.rb:13

    Говорит, что resp['location'] = nil
    @path = resp['location']

  2. Павел пишет:

    Исходники.

    авторегер:
    http://codepaste.ru/3656/

    твоя либа (дописаная):
    http://codepaste.ru/3657/

  3. lukmus пишет:

    Я тут решил зайти на мыла, которые были нареганы авторегом с одного IP и вот что я увидел вместо списка писем

    Вывод: авторег должен работать через прокси.

  4. IvanaFukalot пишет:

    Как вставить рисунок в комментарий ?

  5. lukmus пишет:

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

  6. DarkMist пишет:

    Лукмус руль!!! Давай больше “тем”, спс за скрипт)
    Да прибудет с тобой Сила !

Leave a Reply to DarkMist

(обязательно)

(обязательно)