PHP для идиотов
→ распределенная система подбора пароля • 10 октября 2007 г. 19:16
<?php /* вывод формы для выбора метода перебора */ echo ' <form action=md5.php method=POST> <table border=1 align=center width=60%> <tr bgcolor=#ED9F4C align=center> <td><h3><input type=radio name=method checked=1 value=brute> Прямой перебор</h3>&l...
<?php
/* вывод формы для выбора метода перебора */
echo '
<form action=md5.php method=POST>
<table border=1 align=center width=60%>
<tr bgcolor=#ED9F4C align=center>
<td><h3><input type=radio name=method checked=1 value=brute> Прямой перебор</h3></td>
<td><h3><input type=radio name=method value=dict> Перебор по словарю</h3></td>
</tr>';
echo '
<tr bgcolor=#FBFBD1>
<td valign=top>
Количество символов: от <input type=text value='.(!empty($_POST['min'])?$_POST['min']:'1').' name=min size=2 maxlength=2> до <input type=text value='.(!empty($_POST['max'])?$_POST['max']:'3').' name=max size=2 maxlength=2><br>
Использовать символы:<br>
<input type=checkbox checked=true name=big_AZ> A - Z<br>
<input type=checkbox checked=true name=small_az> a - z<br>
<input type=checkbox checked=true name=digits> 0 - 9<br>
<input type=checkbox checked=true name=spec> <input type=text value="!@#$%^&*()_-" name=spec_str><br>
</td>
<td valign=top>Адрес словаря: <input type=text value="http://" name=path2dic></td>
</tr>
</table>';
echo '
<p align=center>
MD5-хэш: <input type=text name=hash size=40 maxlength=32 value='.(!empty($_POST['hash'])?$_POST['hash']:'').'>
<br><br>
<input type=submit value="Начать перебор">
</p>
</form>';
/* проверка, выбран ли метод перебора */
if (!empty($_POST['method']))
{
/* проверка, указан ли хэш */
if (!empty($_POST['hash']))
$hash = $_POST['hash'];
else
{
echo 'Ошибка: не введен хэш!';
exit;
}
/* задаем начальные значение для пароля и количества комбинаций*/
$pass = 'не найден';
$combs = 0;
/* проверка, выбран ли метод перебора */
if (!empty($_POST['method']))
{
/* проверка, указан ли хэш */
if (!empty($_POST['hash']))
$hash = $_POST['hash'];
else
{
echo 'Ошибка: не введен хэш!';
exit;
}
/* задаем начальные значение для пароля и количества комбинаций*/
$pass = 'не найден';
$combs = 0;
if ($_POST['method'] == 'brute')
{
//строка символов, которые допустимы в пароле
$str = '';
//подключение символов от A до Z
if (!empty($_POST['big_AZ']) && $_POST['big_AZ'])
for($i=65;$i<91;$i++)
$str .= chr($i);
//подключение символов от a до z
if (!empty($_POST['small_az']) && $_POST['small_az'])
for($i=97;$i<123;$i++)
$str .= chr($i);
//подключение цифр от 0 до 9
if (!empty($_POST['digits']) && $_POST['digits'])
$str .= '0123456789';
//подключение символов, которые ввел пользователь
if (!empty($_POST['spec']) && $_POST['spec'] && !empty($_POST['spec_str']))
$str .= $_POST['spec_str'];
//проверка на пустую строку
if ($str == '')
{
echo 'Ошибка: не выбраны символы для перебора!';
exit; //выход
}
//проверка, заданы ли значение длины пароля
if (empty($_POST['min']) || empty($_POST['max']))
{
echo 'Ошибка: не задана одна из величин!';
exit;
}
$min = $_POST['min'];
$max = $_POST['max'];
//проверка на размеры минимального и максимального значений
if ($min>$max)
{
echo 'Ошибка: неверно заданы величины!';
exit;
}
//подсчет количества возможных сочетаний
for($i=$min;$i<=$max;$i++)
$combs += pow(strlen($str),$i);
$l = strlen($str);
$a[100][2] = '';
$c[100] = 0;
$y = 0;
/* перебор всех возможных сочетаний символов */
for($m=$min;$m<=$max;$m++)
{
$inc = $m;
for($f=0;$f<100;$f++)
$c[$f] = 0;
for($j=0;$j<$l;$j++)
{
$a[$j][1] = $str[$j];
$a[$j][2] = $j;
}
do
{
$cur = '';
for ($j=0;$j<$inc;$j++){
for ($k=0;$k<$l;$k++){
if ($c[$j]==$a[$k][2])
{
$cur.=$a[$k][1];
$k=$l+1;
}
}
}
//если хэш текущей строки равен указанному хэшу
if ($_POST['hash'] == md5($cur))
{
$pass = $cur; //запоминаем текущую строку как пароль
break; //прерываем выполнение цикла перебора
}
$c[$inc-1]+=1;
for ($j=$inc-1;$j>0;$j–){
if ($c[$j]>$l-1){
$c[$j]=$c[$j]-$l;
$c[$j-1]=$c[$j-1]+1;
}
}
}
while ($c[0]<$l);
//если пароль найден
if ($pass != 'не найден')
break; //прерываем выполнение цикла
}
}
if ($_POST['method'] == 'dict')
{
//проверка, указан ли путь к словарю
if (!empty($_POST['path2dic']))
{
$path2dic = $_POST['path2dic'];
//заносим все слова из файла в массив
$words = @file($path2dic) or die('Ошибка: словарь не найден!');
//подсчет количества слов
$combs = count($words);
$pass = '';
//перебор массива
for($i=0;$i<$combs;$i++)
{
//если идентичный хэш найден
if (md5(trim($words[$i])) == $hash)
{
//запоминаем пароль
$pass = trim($words[$i]);
//заканчиваем перебор
break;
}
}
}
}
echo '<table border=1><tr><td>';
echo 'Кол-во комбинаций: <font color=green>'.$combs;
echo '</font></td></tr><tr><td>Пароль: <font color=red>'.$pass;
echo '</font></td></tr></table>';
}
?>
А вот насчет того, чтобы сделать ее еще и распределенной - вообще не догоняю
PHP для идиотов
→ распределенная система подбора пароля • 9 октября 2007 г. 18:43
PHP для идиотов
→ распределенная система подбора пароля • 9 октября 2007 г. 18:25
Надо создать распределенную систему подбора пароля. В роли исходной информации выступают пароль, зашифрованный алгоритмом MD5, длина пароля, используемый алфавит. Программу подбора пароля желательно написать на php. Типа один комп одну часть пароля подбирает, второй - другую,тртий-третью и т.д. А...
Надо создать распределенную систему подбора пароля. В роли исходной информации выступают пароль, зашифрованный алгоритмом MD5, длина пароля, используемый алфавит. Программу подбора пароля желательно написать на php. Типа один комп одну часть пароля подбирает, второй - другую,тртий-третью и т.д.
Алгоритм шифрования MD5 приведен по адресу
http://quazer.ssea.ru/teach/tnp/ Мучаюсь около месяца и ничего не могу сделать….
Может это для кого-то как орешки, поэтому помогите пожалуйтса, срочно нужно.