Нужно вычислить ключ из декриптора.

Тема в разделе ".:: Уязвимости", создана пользователем t0os, 14 май 2009.

Статус темы:
Закрыта.
  1. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    Вообщем, имеются функции для криптовки:

    Код:
    <?php
    function encrypt($string, $key) {
    $result = '';
    for($i=0; $i<strlen($string); $i++) {
    $char = substr($string, $i, 1);
    $keychar = substr($key, ($i % strlen($key))-1, 1);
    $char = chr(ord($char)+ord($keychar));
    $result.=$char;
    }
    
    return base64_encode($result);
    }
    
    function decrypt($string, $key) {
    $result = '';
    $string = base64_decode($string);
    
    for($i=0; $i<strlen($string); $i++) {
    $char = substr($string, $i, 1);
    $keychar = substr($key, ($i % strlen($key))-1, 1);
    $char = chr(ord($char)-ord($keychar));
    $result.=$char;
    }
    
    return $result;
    }
    
    ?> 
    
    у меня есть закриптованный этой функцией файл. но без ключа ничего не получается. как бы ключ оттуда вытащить? можно брутфорсер написать, канеш. но это извращение. может что попроще есть?
     
  2. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.039
    Не специалист в php
    но вроде тут в коде и криптовка и декриптовка и в обоих функциях переменная $key
    С точки зрения математики найти неизвестное нельзя ... в php фиг его знает .. люди бывает чудеса творят
    с брутом будут проблемы тк вы незнаете что должно получиться на выходе ..
    как вы определите что брут подобрал нужный кей ??
     
  3. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    Да,с брутом я погорячился. У меня только входные данные для расшифровки.

    Хотя, можно брутить, пока ошибка скрипта выводится. Если ошибки не будет, значит, скорее всего, ключ подобран.
     
  4. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Откуда функция, если не секрет? )
     
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    561
    Математика говорит- неизветных должно быть столькоже, сколько уравниний. То бишь нужен вариант до и после крипта. Брут написать несложно



    PHP:
    define('MAX_LENGTH'8);
    define('TRUE_CODE''$vars_is_true = "ABCDEFGHIJKLMNOPQRSTUVWXYZqwertyuiop[]asdfghj";');
    $fp=fopen('brute.txt''a');
    function 
    check($key)

     eval(
    decrypt(  encrypt(TRUE_CODE$key) , $key)); //
      
    if(@$vars_is_true == 'ABCDEFGHIJKLMNOPQRSTUVWXYZqwertyuiop[]asdfghj'){
      echo 
    '<br> НАШЛИ ЗНАЧЕНИЕ `'.$key."`\r\n";
      exit;
     }
    }
     
    function 
    recurse($width$position$base_string)
    {
     for(
    $ii=32$ii<127$ii++){ 
      if (
    $position  $width 1) {
       
    recurse($width$position 1$base_string ord($ii));
      }
      
    check($base_string ord($ii));
     }
     
    }
    for (
    $i 1$i MAX_LENGTH 1; ++$i) {
     echo 
    'Текущая рекурсия  '.$i."<br>\n";
     
    recurse($i0'');
     
    flush();
    }
    echo 
    "НИЧЕГО НЕ НАЙДЕНО";
    function 
    encrypt($string$key) {
    $result '';
    for(
    $i=0$i<strlen($string); $i++) {
    $char substr($string$i1);
    $keychar substr($key, ($i strlen($key))-11);
    $char chr(ord($char)+ord($keychar));
    $result.=$char;
    }
    return 
    base64_encode($result);
    }
    function 
    decrypt($string$key) {
    $result '';
    $string base64_decode($string);
    for(
    $i=0$i<strlen($string); $i++) {
    $char substr($string$i1);
    $keychar substr($key, ($i strlen($key))-11);
    $char chr(ord($char)-ord($keychar));
    $result.=$char;
    }
    return 
    $result;
    }
    Запустил получил значение
    :yahoo::yahoo::yahoo:
    51
    :yahoo::yahoo::yahoo:
    Вроде подходит
     
    t0os нравится это.
  6. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    Jeurey, не секрет - нарыл на простарах интернета :D
    KillDead, спасибо, сейчас буду пробовать :)
     
  7. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    t0os: а что за код? и как используется?

    если php код и вызывается eval(), то с высокой вероятностью первые символы будут "<?"
    второе , символы внутри имеют ограниченное множество (скорее всего это латиница + цифры + знаки препинания), а не все 256
    это тоже может снизить число возможных ключей
     
  8. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    561
    Немного ступил - в коде eval(decrypt( encrypt(TRUE_CODE, $key) , $key)); //
    евал **х не нужен, нужно просто известную строчку кодировать и декодировать. И заменить ord на chr
    Вообщето скорее всего так (ключ это латиница + цифры + знаки препинания), но есть возможность использовать даже некоторые непечатные
     
  9. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    KillDead:
    не вчитывался в твой код, только что заметил
    но разве decrypt( encrypt(TRUE_CODE, $key) , $key) === TRUE_CODE при любом $key ?
     
    KillDead нравится это.
  10. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    561
    :Dда, при любом. Только что заметил. Просто чел попросил ключ вытащить. А очень часто ключ так же должен сгенерирован по определённому алгоритму. Надо было проверить это в первую очередь.:D
     
Статус темы:
Закрыта.