Помогите разгадать алгоритм.

Discussion in 'PHP' started by hakerovchanen, 5 Jun 2009.

  1. hakerovchanen

    hakerovchanen New Member

    Joined:
    4 Jun 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Уважаемые коллеги помогите расшифровать алгоритм генерации пароля.
    Есть простенький сайт на Perl, на котором, зная пару логин и административный e-mail можно поменять пароль (он приходит на административный e-mail) Просто приходить письмо с новым паролем никакие подтверждения в письме нажимать не надо.
    Пароль генерируется скорее всего с использованием Perl модуля Time::HiRes (количество секунд и микросекунд , начиная с 1 января 1970 г 00:00:00).Ни какой функции rand() скорее всего не применяется.
    Те если бы удалось в идеале синхронизировать (до микросекунды)запуск скрипта смены пароля на тестовом логине и на интересующем логине то на тестовый ящик пришел бы такой же пароль как и на административный e-mail интересующего меня логина.
    Пароль генерируется из 8 знаков. Используются только заглавные латинские буквы и цифры. Т.е. всего 36.Те надо выдавать “случайные” числа в диапозоне 0-35
    Матрица соотношений скорее всего такая
    0-0
    1-1

    9-9
    10-A
    11-В

    35-Z

    Алгоритм генерации первой буквы следующий:
    Модуль модуля Time::HiRes выдает количество секунд и миллисекунд с начало эпохи
    Реальный пример 1243815304.0XXXXX (в эту секунду было сгенерировано 2 пароля 42RGZWUF и 42RP5PE9)
    Колличество секунд делим на 36.
    1243815304/36=34550425,111111111
    Целую часть умножаем на 36
    34550425*36=1243815300

    От начального значения отнимает то что перемножили, получаем число в диапозоне 0-35
    В данном случаи 4
    1243815304-1243815300=4
    Код 4 соответствует числу 4 в пароле (по матрице соотношений)
    4=4
    Первый знак получается почти с точность 100% если знаешь время запуска скрипта.
    Если получиться запустить тестовый скрипт и скрипт смены пароля ”жертвы”с точность до десятый доли секунды то совпадет 2я цифра если с точность до сотой доли то совпадет 3я цифра и все дольше ни как большую точность настроить не получается.
    Алгоритм расчета 2го знака по аналогии не подходит.
    Я думал что если помножить 1243815304.0XXXXX на 10 и взять целую честь и повторить все операции то получится 2я цифра но это не так.
    12438153040/36=345504251,11111111111111111111111
    345504251*36=12438153036
    12438153040-12438153036=4
    4=4 а нужно 2
    Понятно что десятые, сотые, тысячный и т.д. вычисляться должны экспериментально (ведь время запуска на локальном компьютере и на сайте будут иметь разницу в десятых-сотых секунды.
    ). Те подставляем наиболее подходящее (от 0 до 9)в данном случаи лучший вариант для десятых это ноль.
    Может кто-нибудь уже сталкивался с подобной проблемой или знает алгоритм ?
    Или смог синхронизировать запуск скриптов с очень высокой тольность?
    Нужно просто одновременно запустить 2 ссылки вида http://www.site-gde-nuzhno-uznat-parol.com/cgi-bin/pass?login=login&email=email@email.com
    (Я просто засунул эти 2 линка в HTML фрем с 2 окнами. И открывал в браузере на локальной машине.)

    Или как то по-другому можно решить это проблему?
    Понятно, что можно перебором, но это очень долго(36^N). А зная алгоритм это всего 10^5 вариантов за месяц можно управиться.
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    hakerovchanen Скорее всего, наверное, может быть - будете знать точно алгоритм, тогда приходите. Экстрасенсорные способности летом отключаются.

    З.Ы, gdsgfagincvjskadnvuaisherknjxckvznrhbzxjdfkndskr - хэш пароля, наверное, как нибудь, что нибудь его декодирует
     
    _________________________
  3. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Вообще-то, все эти махинации называются 1243815304 mod 36

    + По-моему, серверное время любезно присылается в заголовке Date, не?
     
  4. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    имхо локальный генератор нужно не одновременно запускать, а запускать раньше, но в коде добавить генерацию не одного пароля а списка, и вывод сделать: пароль - время с точностью до нужного, тоесть запускаете генератор и он генерит и выводит все что на генерил, потом обращаетесь к сайту, получаете пароль... и уже тогда парсите сгенеренный файл по нужному времени.. да и алго генерации уже реализовано в коде?
     
  5. hakerovchanen

    hakerovchanen New Member

    Joined:
    4 Jun 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Да присылается только в стандартном формате dd-mm-yy-hh-mm-ss.
    Astrologer,У Вас в практике подобный алгоритм встречался? Или может где-нибудь есть класический алгоритм генерации пароля с помощью "часов"?
     
  6. hakerovchanen

    hakerovchanen New Member

    Joined:
    4 Jun 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    LEE_ROY,Да с синхронизацией похоже дохлый номер.
    А вот интересно можно ли как то Аpach "замкнуть" что бы он вместо испольнения скрипта просто показал исходный код?
     
  7. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    http://il.php.net/manual/ru/function.mktime.php