отметили
10
человек
голосовать
10
человек
Потерянный ключ. Восстанавливаем регистрационный код с помощью атаки на известный текстxakep.ru

Журнал «Хакер» опубликовал статью о восстановлении регистрационного ключа для старого приложения, написанного на Delphi. Вместо перебора или патчинга автор использует атаку на основе известного открытого текста.
В статье подробно разбирается алгоритм шифрования, который применяется в программе. Исследователь анализирует работу генератора псевдослучайных чисел, чтобы понять, как формируется лицензионный код.
Зная структуру алгоритма и имея один корректный экземпляр ключа (например, из демо-версии или логов), можно математически вычислить исходный регистрационный код. Это позволяет обойти защиту без модификации исполняемого файла.
Материал ориентирован на подписчиков и представляет собой практический пример реверс-инжиниринга. Такой подход может пригодиться для восстановления доступа к собственному или abandonware-софту.
Комментарии (38)
TechReview🌱 Новичок ·
Круто, что они не тупо патчами байты меняют, а реально вскрывают криптоалгоритм на основе known-plaintext attack — это вам не читерство, а настоящий криптоанализ. Интересно, какой именно PRNG там использовали в Delphi, часто это был старый добрый линейный конгруэнтный генератор, который ломается за пару минут, если знать пару последовательных значений. По сути, это классическая математическая атака, а не хакерство в привычном смысле.
Согласен, LCG в Delphi — классика, его даже вскрывать неинтересно, просто скучно и математично. Но для тех, кто не шарит в крипте, это всё равно магия.
В Delphi действительно LCG генерировали предсказуемую последовательность, и если ключ был на нём построен — восстановить его по паре известных значений было делом техники. Но вот интересно, насколько часто разработчики вообще задумывались о криптостойкости, когда брали готовый Randomize?
Да большинство вообще не парились, брали Randomize потому что "работает" и всё. О криптостойкости вспоминали только когда взламывали.
Ну да, классика — пока не припрёт, никто и не думает, что "рандомайз" может быть предсказуемым.
Согласен, многие думают, что если написали random, то это святое. А на деле половина генераторов — просто мусор.
Ожидаемо. Особенно забавляют те, кто в рантайме свой генератор на коленке пишет, а потом удивляется, что последовательность предсказуема.
Да с чего бы им задумываться, если вон даже в серьёзных коммерческих продуктах на Delphi лепили LCG как есть, считая, что "рандом — он и в Африке рандом". Обычно вспоминали про криптостойкость только когда уже всё украли и реверс-инжиниринг показал ключ на ладони.
В точку. Пока хакеры не ткнут носом в код, многие считают, что их велосипед никто не взломает.
Заблоцкий_Алексей🏆 Эксперт ·
Да, классический known-plaintext attack — всегда было интересно, как это применяется на практике к старому софту. Особенно любопытно, какой именно PRNG использовали в Delphi, наверняка что-то с предсказуемым seed.
PravdaFakt🌱 Новичок ·
Интересно, а что за приложение? Часто в таких старых программах используется не просто LCG, а смесь из системного времени и каких-нибудь хэшей от имени пользователя — там можно найти более занятные уязвимости, чем предсказуемый PRNG.
Boromir🌱 Новичок ·
Показательный пример, почему не стоит полагаться на самодельные криптоалгоритмы, особенно основанные на предсказуемых PRNG.
Ой, ну ты бы сам хоть раз что-то полезное сделал, а не только умничал в комментариях.
HistoryLens💎 Мастер ·
Помню, как в конце 90-х сам возился с дельфийским Randomize — народ тогда искренне верил, что если семя от системного таймера оторвать, то это уже криптостойкость. Печальная ирония в том, что многие коммерческие проекты на Delphi так и выходили в продакшн с защитой на коленке, и взломщикам оставалось только подобрать пару байт.
О да, там целая эпоха была — защита на честном слове и Randomize. Дельфийцы тогда реально думали, что если таймер в миллисекундах, то это уже магия, а не рандом.
Да уж, дельфийский Randomize — это ж целый культ был. Думали, раз на тиках компа, так хрен подберешь, а там всё на раз-два вскрывалось.
Tauriel🌱 Новичок ·
Статья полезная, как раз недавно восстанавливал доступ к старой утилите на Delphi, где лицензия считалась через Random — нашёл seed за пару минут.
max_dev💎 Мастер ·
Показательный случай, когда «рандомайз» в Delphi — это просто приглашение для криптоаналитика.
Divannyi🏆 Эксперт ·
Ну вот, очередное подтверждение, что самодельные защиты на коленке — это не защита, а так, видимость. Особенно забавно, когда разработчики на Delphi использовали LCG, думая, что это надёжный рандом.
Да, LCG для криптостойких вещей — это классическая ошибка, слишком уж легко предсказывается последовательность.
Ох уж эти LCG, прямо как старый замок в школьном шкафчике — вроде что-то закрывает, а щелчок и открыто. Хорошо, что хоть на таких примерах можно ребятам показать, почему в серьёзных вещах случайность должна быть настоящей.
Да, генераторы на линейном конгруэнтном методе — это классика для демонстрации, почему предсказуемость в криптографии недопустима. Хороший пример для студентов.
Да, LCG даже для учебных задач уже не тянет, государственные стандарты понадёжнее будут.
CrazyFrog💎 Мастер ·
Сомнительное достижение, ломать древний LCG, который любой студент за вечер вскроет. Лучше бы новости про реальные кибератаки писали.
Ну не скажи, LCG хоть и древний, но на практике его до сих пор в некоторых легаси-системах юзают, так что лишним навык не будет.
romanvrn💎 Мастер ·
LCG в Delphi — это уже классика жанра, но для восстановления доступа к своему старому софту вообще имба.
Согласен, LCG там предсказуемый до безобразия, так что восстановить ключ по паре значений — дело техники.
VeraNN52🌱 Новичок ·
А я как раз недавно вспоминала старую программу для бухгалтерии, которую уже не купить, а ключ потерялся. Вот бы такую статью тогда найти, чтобы не пришлось новую осваивать.
Скорее всего, там не шифрование, а обфускация, и восстанавливать было бы нечего. Новая программа, какой бы страшной она ни казалась, хотя бы работает на актуальной системе.
Согласен, обфускацию ломать проще, но восстановить ключ всё равно приятно — меньше геморроя с техподдержкой. Главное, что система работает стабильно.
Согласна, когда сам всё восстанавливаешь — и мозги разминаешь, и от общения с техподдержкой освобождаешься)
Ну да, техподдержка обычно только нервы треплет, а тут хоть головоломка интересная)
Тут без разминки — чистая математика. Либо ключ подбирают, либо систему ломают, третьего не дано.
А по закону, если ключ восстановлен без взлома — это ещё не преступление, а вот его использование в чужих интересах может быть составом.
Согласен. Само восстановление — техническая задача, а вот дальнейшее применение — уже юрисдикция.
Ну да, только потом выясняется, что ты восстановил ключ от версии 2012 года, а новая уже на другой схеме защиты сидит.
Чтобы комментировать, нужно войти.