Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Пишем автореггер под Rambler.Ru

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Пишем автореггер под Rambler.Ru
Имя
Сообщение << Старые топики   Новые топики >>
Пишем автореггер под Rambler.Ru - 2009-09-10 22:26:53.580000   
rankor777

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-23 22:22:11.543333
В наше время спам через PHP-скрипты стал совсем неактуален – на большинстве хостингов спамерский аккаунт прикрывают чуть ли не сразу после регистрации. В связи с этим приходится искать новые лазейки, но самым простым и дешевым способом остается спам через SMTP-серверы известных почтовых сервисов. Также огромной популярностью пользуется спам по ICQ – кому из нас не приходили предложения посеить тот или иной порносайт? =)
Но для массовой рассылки писем требуется достаточно много учетных записей того или иного сервиса, и возникает вопрос – откуда их взять? И тут мы вспоминаем самые распространенные и известные способы:
1. Сбрутить. Да, брут ICQ – достаточно простое и незатратное занятие. А что насчет брутфорса e-mail’ов? Здесь все почти бесперспективно.
2. Вытащить из отчетов троянов. Данный способ еще хуже первого.
3. Зарегистрировать. А если регистрировать на сервере rambler.ru, то в придачу к мылу получаем еще и номер ICQ! Этот способ самый простой и выгодный.

Со способом добычи аккаунтов мы определились. Переходим на http://id.rambler.ru/sсriрts/newuser.cgi и регистрируемся. Как видишь, регистрация проходит в 2 этапа. На первом этапе мы вводим имя, фамилию и желаемый логин, а на втором заполняем остальную инфу – пароль, секретный вопрос, пол и каптчу. Нажимаем «Зарегистрироваться» - и получаем логин к почте на рамблере и, если повезет, новый номер ICQ.

Во время регистрации мы обнаруживаем две проблемы:
1. Номер ICQ регистрируется не всегда
2. Каптча
Но всё не так страшно, как кажется. Первая проблема решается элементарно – прокси. А вот со второй все немного сложнее. Чтобы не вбивать символы с картинки руками (мы ведь пишем автореггер, правда?), нам придется распознавать каптчу автоматически. Но как это сделать? Естественно, писать модуль для оптического распознавания текста мы не будем. Наверняка ты слышал про такой сервис, как anti-captcha, а если не слышал, то я расскажу. Общеизвестно, что в азиатских странах с работой очень туго, и люди там хватаются за любую возможность заработать. Ну и само собой нашлись предприимчивые жители СНГ, организовавшие сервис, в котором эти самые азиаты за сущие копейки перепечатывают текст с картинки в поле браузера. Нам цена 1000 распознаваний обходится в $1. А теперь представь, сколько получает среднестатистический азиат за день работы, учитывая, что до него доходит далеко не вся сумма. Ладно, что-то мы отвлеклись от темы, вернемся к нашему реггеру.
Для написания программы нам понадобятся:
1. Delphi, желательно 2007/2010
2. Набор компонентов Internet Direct, он же Indy.
3. Набор компонентов AlphaControls - по желанию
4. ACMan.pas – юнит, написанный OstWay’ем.

Прикинем примерный план действий. На распознавание каптчи уходит около 10 секунд + еще примерно 5 на остальные шаги регистрации. Итого 15 секунд на 1 аккаунт. Медленно, однако! Чтобы ускорить процесс регистрации, мы напишем многопоточную программу. Потоки реализуем на TThread. TThread - виртуальный класс для «затачивания» под нужды различных приложений, описанный в модуле Classes.
Напишем класс-наследник TThread, для этого нам надо переопределить методы Execute(), Create() и Destroy().


TRegThread = class(TThread) protected procedure Execute(); override; public constructor Create(); destructor Destroy(); override; constructor TRegThread.Create(); begin inherited Create(True); AC := TACMan.Create('http://ac-service.info/', APIKey); end; destructor TRegThread.Destroy(); begin CreateDestroy(True); inherited; end;
Назначение «лишних» строк я разъясню чуть позже.
Работать мы будем с протоколом HTTP, и в этом нам поможет Indy Http (модуль IdHttp).
Из этого модуля нам понадобится класс TIdHttp, в котором, в свою очередь, будем использовать следующие методы и свойства:
• Get(AURL: String): String – для выполнения GET-запросов
• Post (AURL: string; ASource: TStrings): String – для выполнения POST-запросов
• ProxyParams.ProxyServer - адрес прокси
• ProxyParams.ProxyPort – порт прокси

Также нужно каким-то образом хранить Cookie, и, чтобы не обрабатывать их вручную, подключим модуль IdCookieManager, из которого нам понадобится класс TIdCookieManager. Для начала создадим все нужные нам объекты, предварительно прописав их, а также некоторые вспомогательные переменные в разделе private нашего класса.

procedure TRegThread.CreateDestroy(Dest: Boolean = False); begin if NOT Dest then // Если надо создать begin Http := TIdHttp.Create(nil); Cook := TIdCookieManager.Create(Http); Http.CookieManager := Cook; Http.HandleRedirects := True; Http.ProxyParams.ProxyServer := PHost; Http.ProxyParams.ProxyPort := PPort; Http.ConnectTimeout := 6000; Http.ReadTimeout := 15000; Exit; end; if Cook &lt;&gt; nil then // Если надо уничтожить Cook.Free(); if Http &lt;&gt; nil then Http.Free(); end;
Именно эта процедура используется в деструкторе нашего класса.

Распознавание каптчи.

Наверняка тебе интересно, как же распознаются каптчи в нашем реггере? Давай оставим ненадолго наш поток и разберемся с классом TACMan.

Юнит ACMan.pas, содержащий описание класса TACMan написан моим другом с ником OstWay. Чтобы понять, как оно работает, желательно почитать документацию от сервиса Anti-captcha. Порядок действий выглядит примерно так:

1. Передать сервису картинку и свой API-Key.
2. В цикле ждать 1 секунду и запрашивать статус картинки
3. После получения картинки, если она неправильно распознана, можно «пожаловаться» на неправильное распознавание.

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

Для передачи картинок используется протокол HTTP с content-type = multipart/data.
Чтобы не изобретать велосипедов, заюзаем Indy Http, тем более тут потери скорости не так важны =)

Для начала надо создать класс.

constructor TACMan.Create(const AACHost : string; const AApiKey : string); begin FHTTP := TIdHTTP.Create(nil); FACHost := AACHost; FApiKey := AApiKey; end;
• AACHost – текущий сайт сервера (на данный момент ac-service.info)

• AApiKey – ключ API, выданный сервисом.

Далее – передаем картинку сервису.

function TACMan.AntiCaptcha(const AFileName : string; ImgCodec : string; Regsense : Boolean; Min, Max : Byte) : Boolean; var PostData : TIdMultiPartFormDataStream; begin Result := false; PostData := TIdMultiPartFormDataStream.Create; try try PostData.AddFormField('method','post'); PostData.AddFormField('key', FApiKey); PostData.AddFile('file', AFileName, ImgCodec); if Regsense then PostData.AddFormField('regsense', '1') else PostData.AddFormField('regsense', '0'); PostData.AddFormField('min_len', Inttostr(Min)); PostData.AddFormField('max_len', Inttostr(Max)); CID := FHTTP.Post(FACHost + 'in.php', PostData); Result := Pos('OK|', CID) &gt; 0; CID := StringReplace(CID, 'OK|', '', [rfReplaceAll]); except on E : Exception do if Assigned(FonЕггор) then FonЕггор(Self, E.Message); end; finally PostData.Free; end; end;
Полезные параметры:
• RegSense : Boolean – чувствительны ли символы к регистру
• Max, Min : Byte – максимальная и минимальная длина текста на картинке.

Ну и последняя функция, вызываемая для проверки статуса каптчи.

function TACMan.GetCaptchaStatus : TACStatus; var res : string; begin Result := csNone; try res := FHTTP.Get(FACHost + 'res.php?key=' + FApiKey + '&action=get&id=' + CID); if Pos('ERROR_', res) &gt; 0 then Result := csError else if Pos('CAPCHA_NOT_READY', res) &gt; 0 then Result := csReady else if Pos('OK|', res) &gt; 0 then begin Result := csOk; FCaptchaCode := StringReplace(res, 'OK|', '', [rfReplaceAll]); end; except on E : Exception do if Assigned(FonЕггор) then FonЕггор(Self, E.Message); end; end;
Ну и для того, чтобы понять, распозналась ли каптча, напишем еще одну функцию, уже в классе TRegThread.

function TRegThread.RecognCap(const AFileName: String): String; var i : Byte; cs : TACStatus; begin Result := ''; if AC.AntiCaptcha(AFileName, 'image/pjpeg', true, 0, 0) then for i := 1 to 15 do begin Sleep(1000); cs := AC.GetCaptchaStatus; if cs = csReady then Continue else if cs = csOk then Result := AC.CaptchaCode; Break; end; end;
Функция возвращает либо код с картинки, либо пустую строку.

Более подробно ознакомиться с классом ты можешь открыв прилагаемый к статье юнит.
Многопоточность

Вернемся к классу TRegThread. Для того, чтобы зарегистрировать акк, нужно выполнить следующие действия:
1. Пройти первый этап регистрации, отправив имя, фамилию и желательный логин.
2. Получить страницу второго этапа регистрации, из нее выдрать картинку
3. Распознать картинку, передать ее вместе с остальными параметрами в скрипт
4. Разобраться, зарегистрировали ли нас

Всего для выполнения этих действий у нас будет 2 метода, рассмотрим их по порядку.

function TRegThread.GetCaptcha(): String; var Str : String; SL : TStringList; MS : TMemoryStream; begin Result := '#ERROR'; SL := TStringList.Create(); Generate(); try Str := Http.Get('http://id.rambler.ru/sсriрt/newuser.cgi'); except {$IFDEF RDEBUG} SL.Text := Str; SL.Free(); {$ENDIF} Exit; end; Pass := Name + IntToStr(Random(9)); SL.Add('back=&step=one&login=' + Nick + '&firstname=' + Name + '&lastname=' + SNAME); try Str := Http.Post('http://id.rambler.ru/sсriрt/newuser.cgi', SL); Except SL.Free(); Exit; end; Num := Copy(Str, Pos('/captcha/', Str) + 9, 40); Num := Copy(Num, 1, Pos('.jpg', Num) - 1); Num := Trim(Num); MS := TMemoryStream.Create(); try Http.Get('http://id.rambler.ru/captcha/' + Num + '.jpg', MS); except MS.Free(); Exit; end; MS.SaveToFile(FPath + Num + '.jpg'); MS.Free(); Result := RecognCap(FPath + Num + '.jpg'); end;
Функция GetCaptcha() выполняет первый шаг, получает и распознает каптчу.


function TRegThread.RegNew(Img: String): Boolean; var Str : String; SL : TStringList; begin Result := False; SL := TStringList.Create(); SL.Add('back=&step=two&step=one&login='+Nick+'&domain=rambler.ru&firstname=' + Name+'&lastname='+SNAME+'&password='+Pass+'&password2='+Pass+ '&question=Девичья фамилия матери&answer=as223as&recoverpassword='+ '&icq_mode=getnew&icq_nick='+Name+'&icq=&icq_passw='+Pass+'&bday=&bmonth='+ '&byear=&gender=1&number='+Num+'&hash='+Img); try Str := Http.Post('http://id.rambler.ru/sсriрt/newuser.cgi', SL); except if Http.ResponseCode &lt;&gt; 302 then begin SL.Free(); Exit; end; end; ICQ := Copy(Str, Pos('"icq.cgi"&gt;', Str) + 10, 9); If NOT IsNumber(ICQ) then ICQ := ‘’; end; SL.Free(); Result := True; end;
Функция RegNew() завершает регистрацию, в случае успешной реги возвращает True и копирует номер ICQ в переменную ICQ (String), в противном случае – возвращает False.

Остался главный метод потока – Execute().

procedure TRegThread.Execute(); var Capt : String; begin while not Stop do begin NextProxy(PHost, PPort); CreateDestroy(); Capt := GetCaptcha(); if Capt = '#ERROR' then begin AddList('', 0); CreateDestroy(False); Continue; end; if RegNew(Capt) then AddList(Nick + ';' + Pass); CreateDestroy(True); end; end;
Неизвестные тебе функции ты можешь найти в юните RegThread.pas, т.к. в статью они просто не влезут =(

Заключение


В этой статье я рассказал о самом простом методе обхода Captcha – защиты, применимом к любому сайту, где для регистрации надо ввести текст с картинки. Вооружившись знаниями, полученными после ее прочтения, и классом TACMan ты сможешь написать хоть автореггер ICQ, хоть спамер по социальным сетям, а также многие другие приложения.
Разработка GUI и всего остального юнита Main ложится на твои плечи (Ну, если уж станет совсем влом это делать, качай компонент AlphaControls и используй мои исходники, только не забывай про копирайты ;))

P.S. Исходники выкладывать не буду, по понятным причинам. Кому надо - тот допишет ;)

RankoR, Ax-Soft.Ru (с) 2009

P.S. Ребят, движок у вас долбанутый - свои же теги не понимает xD
P.P.S Привет 2 exbw ;)
Post #: 1
RE: Пишем автореггер под Rambler.Ru - 2009-09-10 23:56:27.393333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: rankor777

Также огромной популярностью пользуется спам по ICQ – кому из нас не приходили предложения посеить тот или иной порносайт? =)


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

quote:

ORIGINAL: rankor777

В этой статье я рассказал о самом простом методе обхода Captcha – защиты, применимом к любому сайту, где для регистрации надо ввести текст с картинки


именно поэтому хорошая капча должна предлагать решить, скажем, логарифмическое уравнение (или хотя бы посчитать кошечек)
Post #: 2
RE: Пишем автореггер под Rambler.Ru - 2009-09-11 00:22:02.293333   
GANSGALLER

Сообщений: 41
Оценки: 0
Присоединился: 2009-01-25 18:23:02.696666
В целом неплохо, но использование компонентов - явно не катит, особенно для приложения использующего потоки, имхо онли winsock.
Post #: 3
RE: Пишем автореггер под Rambler.Ru - 2009-09-11 17:31:56.643333   
rankor777

Сообщений: 17
Оценки: 0
Присоединился: 2008-08-23 22:22:11.543333
OSCAR - проприетарный протокол? Интерееесно, а что же тогда делает документация по нему на dev.aol.com? Вернитесь из 2006 г!
Насчет использования компонентов - это смотря для каких целей. Автореггеру погрешность в полсекунды не так важна, как бруту например. Если так рассуждать, то можно уж сразу писать на асме (и сеть, и формы, и скины на асме реализовывать) - он же еще быстрее пашет ;)
Post #: 4
RE: Пишем автореггер под Rambler.Ru - 2009-09-11 18:00:47.263333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: rankor777
OSCAR - проприетарный протокол?

да, а ты не знал? Открытый, но пропиетарный. Читай тут: http://dev.aol.com/aim/oscar/
quote:

While AOL does not endorse any instant messaging libraries, we recommend that you use one of the libraries already available, including AOL's SDK. Regardless of whether you write your own library or use an existing library, you must agree to and follow the Open AIM Platform Developer Agreement and Terms of Service in order to use the AIM API. You may use this documentation of the OSCAR protocol to develop, test, and deploy your own instant messaging client and you may release that client under an open source or a proprietary license.

То есть используя протокол в своей программе, я принимаю условия лицензии. Заглянем в лицензию? Мне очень понравились строчки, запрещающие блокировать рекламу, оговаривающие какие окошки программа должна показывать… Гг, программеры работающие с этим протоколом все поголовно рабы aol.
Post #: 5
RE: Пишем автореггер под Rambler.Ru - 2009-09-12 14:41:21.653333   
ghostonline

Сообщений: 228
Оценки: 0
Присоединился: 2008-12-17 08:34:55.816666
ТС не слушай никого - твори добро:D 
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Пишем автореггер под Rambler.Ru







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.