Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > розшифровать md5 скриптом ПХП


Автор: Strilo4ka 23.9.2009, 13:40
 читал книгу и наткнулся на вот это

 
Код

 error_reporting(E_ALL & ~E_NOTICE); 

  // Устанавливаем неограниченное время выполнения скрипта 
  set_time_limit(0); 

  // Читаем пароли из файла password 
  $pass = file("password"); 
  foreach($pass as $password) 
  { 
    // Замеряем время, затраченное на подбор пароля 
    $begin = time(); 
    echo decrypt_md5(trim($password),""); 
    $end = time(); 
    echo "  (На подбор затрачено ".($end - $begin)." секунд) <br>"; 
  } 

  // Функция посимвольного перебора пароля 
  // $pass - расшифровываемый пароль 
  // $answer - текущий ответ, при первом вызове - пустая строка 
  function decrypt_md5($pass, $answer) 
  { 
    $arr = array('a','b','c','d','e','f', 
                 'g','h','i','j','k','l', 
                 'm','n','o','p','q','r','s', 
                 't','u','v','w','x','y','z'); 
    // Будем считать, что пароль не превышает 
    // 4 символов 
    $max_number = 3; 
    if(strlen($answer) > $max_number) return; 

    for($j = 0; $j < count($arr); $j++) 
    { 
      $temp = $answer.$arr[$j]; 
      if(md5($temp) == $pass) return $temp; 
      // Рекурсивно вызываем фукнцию для увеличения 
      // длины подбираемого пароля 
      $result = decrypt_md5($pass, $temp); 
      // Если функция возвращает непустую строку, 
      // следовательно, найден ответ и дальше искать 
      // не следует 
      if(strlen($result) > 0) return $result; 
    } 
  }

   

Для шыфрования паролей прибегают зачастую к необратимому шыфрованию. Однако это вовсе не значит, что пароль, особенно простой, невозможно подобрать.
Тут приведен пример подбора пароля методом перебора символов из массива $arr. Если надо можно дописать масив $arr нужными символами. Пароли располагаються в файле password, расположенном в той же директории, что скрипт. Переменная $max_number задает максимальный размер подыскиваемого пароля. Для каждой хеш - сумы ис файла ищется пароль (хеш сума подставляеться в рекурсивную функцию которая ищет пароль для определенного хеша). В начале скрипта снимаеться ограничение на время, просто пароль долго подбираеться. 

Как видно здесь ищеться пароль хеш-сумы md5() - 32 розряда. Может быть и 16 розрядов. Для этого в md5() функции надо указать необязательный второй параметр. Можна код описаный выше переделать и под другую необратимую функцию, и даже, например, под функцию password СУБД MYSQL:

Код

<? 
// Устанавливаем неограниченное время выполнения скрипта 
set_time_limit(0); 
$db=@mysql_connect('localhost','root','',MYSQL_CLI  ENT_SSL) or die('Не вдалося з\'єднатися з базою даних'); 
@mysql_select_db('dog') or die('Не вдалося вибрати базу даних'); 

// Читаем пароли из файла password 
$pass = file("password"); 
foreach($pass as $password) 
{ 
// Замеряем время, затраченное на подбор пароля 
$begin = time(); 
echo decrypt_pass(trim($password),""); 
$end = time(); 
echo " (На подбор затрачено ".($end - $begin)." секунд) <br>"; 
} 

// Функция посимвольного перебора пароля 
// $pass - расшифровываемый пароль 
// $answer - текущий ответ, при первом вызове - пустая строка 
function decrypt_pass($pass, $answer) 
{ 
$arr = array('a','b','c','d','e','f', 
'g','h','i','j','k','l', 
'm','n','o','p','q','r','s', 
't','u','v','w','x','y','z', 
'A','B','C','D','E','F', 
'G','H','I','J','K','L', 
'M','N','O','P','Q','R','S', 
'T','U','V','W','X','Y','Z', 
'1','2','3','4','5','6','7','8','9','0'); 
// Будем считать, что пароль не превышает 
// 4 символов 
$max_number = 4; 
if(strlen($answer) > $max_number) return; 



for($j = 0; $j < count($arr); $j++) 
{ 
$temp = $answer.$arr[$j]; 
//пассворд функция 
$p=mysql_query("Select password('$temp')"); 
$row=mysql_fetch_array($p); 
//print_r($row); 
//$temp=$row[0]; 
//echo $temp; 
if(($row[0]) == $pass) return $temp; 
// Рекурсивно вызываем фукнцию для увеличения 
// длины подбираемого пароля 
$result = decrypt_pass($pass, $temp); 
// Если функция возвращает непустую строку, 
// следовательно, найден ответ и дальше искать 
// не следует 
if(strlen($result) > 0) return $result; 
} 
} 
?>


В даной примере на каждом переборе идет запрос к СУБД для того чтоб узнать саму хеш суму для подобраного пароля и сравнить ее со строкой с отпечатком в файле password. Если отпечатки равны то пароль, который шыфруеться функциеей password() в СУБД найден и будет выведен на екран и если есть в файле следущие пароли они будут также перебиратся. Следует сказать что такие приложения лучше делать на компилируемых а не на интерпретируемых языках програмирования, но никто не запрещает использовтаь и интерпретатор для етих нужд!

За ошыбки тысячу извинений!!!

Автор: MoLeX 24.9.2009, 05:43
не понял смысл топика. от нас что требуется?!

Добавлено через 51 секунду
Strilo4ka, лучше не извиняйся, а открой Word и в нем исправь ошибки - читать больно

Автор: Strilo4ka 24.9.2009, 08:12
от вас ниче не требуеться! Просто написал если кому интересно...

Автор: Ипатьев 24.9.2009, 08:36
Я вижу, автор старательно и последовательно нарывается на статью 272 УК РФ. Про другие страны не знаю, но там наверняка есть аналогичные. 

Автор: MoLeX 24.9.2009, 08:50
Ипатьев, это все ерунда, по сравнению с тем что md5 хэш
Цитата

розшифровать


нельзя, только подбор

Автор: icewind 24.9.2009, 08:52
Цитата(Strilo4ka @  23.9.2009,  13:40 Найти цитируемый пост)
// Будем считать, что пароль не превышает 
// 4 символов 

Ни один уважающий себя разработчик не позволит вводить пароли короче 4 символов... Это глупость полная, а такой алгоритм подбора на практике не применим.

Нормальный пароль R.6&a)F3@gJ и 


Цитата(Strilo4ka @  23.9.2009,  13:40 Найти цитируемый пост)
// Замеряем время, затраченное на подбор пароля 

 превратится в  "Тихо встречаем старость перед монитором" а ведь хешировать можно не только голый пароль...

Автор: MoLeX 24.9.2009, 09:00
Цитата(icewind @  24.9.2009,  08:52 Найти цитируемый пост)
а ведь хешировать можно не только голый пароль... 


Цитата(icewind @  24.9.2009,  08:52 Найти цитируемый пост)
Ни один уважающий себя разработчик не позволит вводить пароли короче 4 символов... 

ну не глупость, ведь как ты заметил голый пароль не кто не позволит, а чтонибудь вот такое:
Код

md5($pass."\nKEY\n".$login);


и ваш скрипт нервно курит в стороне

Автор: icewind 24.9.2009, 09:05
Естественно, но это только в дополнение к нормальному паролю имхо.

Автор: Strilo4ka 24.9.2009, 11:56
понятно вопросов нет что может использоваться "соленый хеш" тогда скрипт в одно место. А по поводу
icewind "Ни один уважающий себя разработчик не позволит вводить пароли короче 4 символов... Это глупость полная, а такой алгоритм подбора на практике не применим" длину пароля можно увеличить в скрипте есть переменная. А все возможные символы можно указать в масиве $arr но понятно что будет дольше бодбирать!!!

Автор: MoLeX 24.9.2009, 12:09
Strilo4ka, на самом деле это не нужно
http://aisys.ru/mdcrack/

Добавлено через 40 секунд
куда логичнее прогонять хэш по существующей базе

Автор: Strilo4ka 24.9.2009, 12:13
согласен MoLeX!!! знал что есть такие...  В книге Кузнецова 2-ое издание встретил этот скрипт и написал. Этой книги в паблик нет, ее покупать надо.  А по поводу таких сервисов встречаються и платные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)