![]() |
Помогите разгадать алгоритм.
Уважаемые коллеги помогите расшифровать алгоритм генерации пароля.
Есть простенький сайт на 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 вариантов за месяц можно управиться. |
hakerovchanen Скорее всего, наверное, может быть - будете знать точно алгоритм, тогда приходите. Экстрасенсорные способности летом отключаются.
З.Ы, gdsgfagincvjskadnvuaisherknjxckvznrhbzxjdfkndskr - хэш пароля, наверное, как нибудь, что нибудь его декодирует |
Цитата:
+ По-моему, серверное время любезно присылается в заголовке Date, не? |
имхо локальный генератор нужно не одновременно запускать, а запускать раньше, но в коде добавить генерацию не одного пароля а списка, и вывод сделать: пароль - время с точностью до нужного, тоесть запускаете генератор и он генерит и выводит все что на генерил, потом обращаетесь к сайту, получаете пароль... и уже тогда парсите сгенеренный файл по нужному времени.. да и алго генерации уже реализовано в коде?
|
Цитата:
Astrologer,У Вас в практике подобный алгоритм встречался? Или может где-нибудь есть класический алгоритм генерации пароля с помощью "часов"? |
Цитата:
А вот интересно можно ли как то Аpach "замкнуть" что бы он вместо испольнения скрипта просто показал исходный код? |
Цитата:
|
| Время: 20:02 |