Показать сообщение отдельно

Перебор пароля по словарю. MD5-хеш (C#)
  #7  
Старый 06.03.2009, 22:39
c0n Difesa
Участник форума
Регистрация: 01.01.2009
Сообщений: 144
С нами: 9135082

Репутация: 154
По умолчанию Перебор пароля по словарю. MD5-хеш (C#)

Введение. Описание программы.

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


Основная часть. Составление и кодирование алгоритма.

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

1. Открыть файл с хешем (input.txt) и открыть файл с паролями (pass.txt).

2. Перевести все символы хеша в верхний регистр. Данная операция позволит корректно сравнивать его с генерируемыми нами хешами (при генерации все символы в хеше в верхнем регистре).

3. Прочитать i-ю строчку файла, где i принадлежит отрезку [0; EndOfFile] (это не столь важно, т.к. строка из файла будет считываться до тех пор, пока не окажется пустой).

4. Сгенерировать хеш прочитанной строчки.

5. Сравнить с целевым хешем. Если равны – вывести строку, соответствующую сгенерированному хешу. Если не равны – продолжить шаги 3-5.

6. Если достигнут конец файла, то уведомить пользователя о том, что пароль не найден.

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

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace MD5Brute
{
    class Programm
    {
        static void Main(string[] args)
        {
            //убедиться, что в командной строке указано имя файла
            if ((args[0].Length == 0) || (args[1].Length == 0))
            {
                Console.WriteLine("Error: Missing Input file or Pass file");
                Console.ReadKey();
            }
            else
            {
                //открыть файл с хешем
                StreamReader reader = new StreamReader(args[0]);
                string EnemyHash = reader.ReadLine(); //прочитать хэш
                reader.Close();
                EnemyHash = EnemyHash.ToUpper(); //перевести все символы в верхний регистр
                //открыть файл с паролями
                reader = new StreamReader(args[1]);
                //перебрать каждую строку
                for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
                {
                    string CurrentHash = string.Empty;
                    //сгенерировать MD5-хеш
                    foreach (byte b in new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(line)))
                    {
                        CurrentHash += b.ToString("X2");
                    }
                    //сравнить хеши
                    if (CurrentHash == EnemyHash)
                    {
                        Console.WriteLine("Password: "+line);
                        Console.ReadKey();
                        return;
                    }
                }
                Console.ReadKey();
                Console.WriteLine("No Password");
                return;
            }
        }
    }
}
Формат запуска программы: md5brute.exe <%DIRECTORY%/input.txt> <%DIRECTORY%/pass.txt>


Заключение.

Конечно до полноценного брутфорсера этой программе далеко, но данные исходные коды вполне могут лечь в основу системы авторизации, продвинутого переборщика паролей, системы распределенных вычислений и чего-либо другого. По крайней мере, читатель теперь сумеет сгенерировать MD5-хеш.
 
Ответить с цитированием