Форум → Программирование → PHP для идиотов → распределенная система подбора пароля
распределенная система подбора пароля
Страницы: ← Предыдущая страница →
-
10 октября 2007 г. 4:36, спустя 10 минут 36 секунд
1) ;)
2) как вариант. но несколько "неудобочитаемо" при отладке ))
3) какие конкретно моменты не представляешь? ) Как проверить тайм-аут ответа? ) Как отделить "быстрые" машинки от медленных? Как замерить время, за которое машина выполняет задание? ) Система распределения очень проста, для этого не нужно особых знаний ПХП, буквально:
1) при появлении свободной машины отдаем ей весь диапазон перебора.
2) при появлении еще одной свободной машины отдаем САМОЙ НАГРУЖЕННОЙ машине (с самым большим обрабатываемым диапазоном) команду - "а ну-ка поделись половиной несделанного с машиной N2!!!". Самая нагруженная бьет ОСТАВШИЙСЯ диапазон пополам, и отправляет команду новоприбывшему. В итоге получаем почти равномерную загрузку. Разумеется, следует учитывать уровни дискретности (блок в 1000 паролей легче перебрать самому, нежели делить пополам и пересылать другому). -
10 октября 2007 г. 4:48, спустя 12 минут 6 секунд
какие конкретно моменты не представляешь?
да практически все….
Я как представлю скока мути, волосы дыбом становятся, реально задача на Диплом…. -
10 октября 2007 г. 4:56, спустя 8 минут 9 секунд
Я как представлю скока мути, волосы дыбом становятся, реально задача на Диплом….
А кто говорил, что будет легко? ) *постучал 3 раза по дереву, чтобы его не приперло вот так вот с учебой )))*
Мне интереснее, где такие задания дают ))) Где такому учат…если, конечно, это не личная инициатива студента. -
10 октября 2007 г. 19:16, спустя 14 часов 19 минут 46 секунд
<?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>';
}
?>
А вот насчет того, чтобы сделать ее еще и распределенной - вообще не догоняю -
10 октября 2007 г. 20:57, спустя 1 час 40 минут 48 секунд
Очень многа неотформатированных букаф…
Запускаете сценарий по перебору script.php?char=a, он смотрит параметр и начинает перебирать все варианты, начинающиеся на "a", запускаете параллельно script.php?char=b, script.php?char=c, вот и распределенная в простейшем случае :)
Или делаете сайт, раскручиваете его до тех пор, пока на него не будут ходить миллион человек в день и на каждой странице подсовываете пользователем javascript-скриптик, который перебирает небольшую часть возможных вариантов. Распределили вычисления на машины пользователей :) -
12 октября 2007 г. 0:34, спустя 1 день 3 часа 37 минут
Очень многа неотформатированных букаф…
Запускаете сценарий по перебору script.php?char=a, он смотрит параметр и начинает перебирать все варианты, начинающиеся на "a", запускаете параллельно script.php?char=b, script.php?char=c, вот и распределенная в простейшем случае :)
Или делаете сайт, раскручиваете его до тех пор, пока на него не будут ходить миллион человек в день и на каждой странице подсовываете пользователем javascript-скриптик, который перебирает небольшую часть возможных вариантов. Распределили вычисления на машины пользователей :)
надо гугли посоветовать, это в их масштабе)) сервис взлом-забытых-паролей от гугл))https://smappi.org/ - платформа по созданию API на все случаи жизни
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!