В этой статье я опишу очень интересный способ сделать генератор ключей прямо из программы которую мы хотим сломать.
Данный способ подходит в том случае, если в программе очень много проверок, NOP'ить их дело не благодарное!
Инструмент:
IDR - Отладчик для Delphi приложений + База знаний Delphi7 kb7.bin
OllyDBG - Отладчик.
Для начала скачаем программу LiveStatParser - парсер ключевых слов из системы Liveinternet
(она будет в архиве в конце статьи)
Открываем данный софт в IDR, кликаем по форме ПКМ и открываем процедуру OnCreate:
Интересный компонент! Не много погуглив я выяснил что данный компонент имеет много типов защиты, в данной программе тип PASSWORD, что, собственно, облегчает нам задачу.
По адресу 00557C1D в регистр ECX заносится наш ключик (валидный), вот его и надо вывести пользователю что бы тот в свою очередь просто ввёл его.
Строка выделенная синим - проверка, она проверяет результат StrCmp, а эта функция в свою очередь просто сравнивает строки. Многие сейчас подумали - 1 NOP и готово! Но так не интересно...
Спустимся чуть ниже:
А вот тут уже выводится другой ключ! Но нам нужно вывести именно валидный, как мы знаем он брался из регистра EBP со смещением 10, а тут 18. Что надо сделать? Правильно,изменить смещение на 10.
Открываем в OllyDBG нашу программу, переходим на адрес 00557D0D (Сtrl+G) и с помощью пробела открываем редактор:
Меняем эту строчку, в результате должно получится так:
Сохраняем, запускам и видим:
Профит! Пробуем вставить этот ключик в файл key.key и смотрим результат:
Оригинальная (не модифицированная версия) спокойно прошла проверку! А это значит что мы только что сэкономили160р и можем пользоваться лицензионным софтом бесплатно.
Умельцы конечно же без проблем могут сделать кейген т.к. компонент валяется в свободном доступе, но цель данной статьи была показать банальную уязвимость алгоритма проверки.
Выводы:
Конечно же использование паблик компонентов для защиты своего софта плохая идея, ведь крякер знает этот компонент и знает его слабые места. Но даже если вы придумали защиту сами, то не храните ключ регистрации в открытом виде, ведь его можно легко вывести вместо хеша как в данном примере. Даже если вы сделаете кучу проверок (мне попадался приватный софтец для стима где однотипные проверки были в каждой функции) то ключ легко отлавливается и с помощью него можно зарегистрировать программу, но я сделал просто кейген т.к. алгоритм генерации ключа был не сложный.
Данный способ подходит в том случае, если в программе очень много проверок, NOP'ить их дело не благодарное!
Инструмент:
IDR - Отладчик для Delphi приложений + База знаний Delphi7 kb7.bin
OllyDBG - Отладчик.
Для начала скачаем программу LiveStatParser - парсер ключевых слов из системы Liveinternet
(она будет в архиве в конце статьи)
Открываем данный софт в IDR, кликаем по форме ПКМ и открываем процедуру OnCreate:
Интересный компонент! Не много погуглив я выяснил что данный компонент имеет много типов защиты, в данной программе тип PASSWORD, что, собственно, облегчает нам задачу.
По адресу 00557C1D в регистр ECX заносится наш ключик (валидный), вот его и надо вывести пользователю что бы тот в свою очередь просто ввёл его.
Строка выделенная синим - проверка, она проверяет результат StrCmp, а эта функция в свою очередь просто сравнивает строки. Многие сейчас подумали - 1 NOP и готово! Но так не интересно...
Спустимся чуть ниже:
А вот тут уже выводится другой ключ! Но нам нужно вывести именно валидный, как мы знаем он брался из регистра EBP со смещением 10, а тут 18. Что надо сделать? Правильно,изменить смещение на 10.
Открываем в OllyDBG нашу программу, переходим на адрес 00557D0D (Сtrl+G) и с помощью пробела открываем редактор:
Меняем эту строчку, в результате должно получится так:
Сохраняем, запускам и видим:
Профит! Пробуем вставить этот ключик в файл key.key и смотрим результат:
Оригинальная (не модифицированная версия) спокойно прошла проверку! А это значит что мы только что сэкономили160р и можем пользоваться лицензионным софтом бесплатно.
Умельцы конечно же без проблем могут сделать кейген т.к. компонент валяется в свободном доступе, но цель данной статьи была показать банальную уязвимость алгоритма проверки.
Выводы:
Конечно же использование паблик компонентов для защиты своего софта плохая идея, ведь крякер знает этот компонент и знает его слабые места. Но даже если вы придумали защиту сами, то не храните ключ регистрации в открытом виде, ведь его можно легко вывести вместо хеша как в данном примере. Даже если вы сделаете кучу проверок (мне попадался приватный софтец для стима где однотипные проверки были в каждой функции) то ключ легко отлавливается и с помощью него можно зарегистрировать программу, но я сделал просто кейген т.к. алгоритм генерации ключа был не сложный.
Интересная статья
ОтветитьУдалитьЗаебись статья, как обычно ничего не понял :)
ОтветитьУдалитьVans класс
ОтветитьУдалитьСПС!
ОтветитьУдалитьЧО? 0_о
ОтветитьУдалитьесть способ гораздо проще сломать эту программу всего с помощи одного IDR
ОтветитьУдалитьПожалуй тоже похвастаюсь:
УдалитьЯ могу с помощью хекс редактора её сломать.
P.S. Не знал что с помощью IDR можно ломать софт, расскажите как?
нет так сказать дфм файл имеет 'константы' для алгоритма шифрования они начинаются после UniqueCodeID = после равно идет 4 строчки алгоритма шифрации ключа через идр их выдрать как нех делать потом эти строчки пилим в дфм файле генератора и получаем кейген работающий на константах того приложения
УдалитьДля начала это не взлом. Посмотреть эти строки можно через что угодно (например ресторатор) и изменить их там же на свои.
УдалитьУ меня LSP ошибку пишет
ОтветитьУдалитьМолодец, брат! Хорошо его заткнул.
ОтветитьУдалитьБольше не работает этот софт,наверное из-за того что поменяли на https адресс ливера.Ванс,исправь если можно,а то годный софт и очень нужен.
ОтветитьУдалить