пятница, 8 февраля 2013 г.

Генератор ключей из программы

В этой статье я опишу  очень интересный способ сделать генератор ключей прямо из программы которую мы хотим сломать.

Данный способ подходит в том случае, если в программе очень много проверок, 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р и можем пользоваться лицензионным софтом бесплатно.

Умельцы конечно же без проблем могут сделать кейген т.к. компонент валяется в свободном доступе, но цель данной статьи была показать банальную уязвимость алгоритма проверки.

Выводы:
Конечно же использование паблик компонентов для защиты своего софта плохая идея, ведь крякер знает этот компонент и знает его слабые места. Но даже если вы придумали защиту сами, то не храните ключ регистрации в открытом виде, ведь его можно легко вывести вместо хеша как в данном примере. Даже если вы сделаете кучу проверок (мне попадался приватный софтец для стима где однотипные проверки были в каждой функции) то ключ легко отлавливается и с помощью него можно зарегистрировать программу, но я сделал просто кейген т.к. алгоритм генерации ключа был не сложный.



12 комментариев:

  1. Заебись статья, как обычно ничего не понял :)

    ОтветитьУдалить
  2. есть способ гораздо проще сломать эту программу всего с помощи одного IDR

    ОтветитьУдалить
    Ответы
    1. Пожалуй тоже похвастаюсь:
      Я могу с помощью хекс редактора её сломать.

      P.S. Не знал что с помощью IDR можно ломать софт, расскажите как?

      Удалить
    2. нет так сказать дфм файл имеет 'константы' для алгоритма шифрования они начинаются после UniqueCodeID = после равно идет 4 строчки алгоритма шифрации ключа через идр их выдрать как нех делать потом эти строчки пилим в дфм файле генератора и получаем кейген работающий на константах того приложения

      Удалить
    3. Для начала это не взлом. Посмотреть эти строки можно через что угодно (например ресторатор) и изменить их там же на свои.

      Удалить
  3. У меня LSP ошибку пишет

    ОтветитьУдалить
  4. Молодец, брат! Хорошо его заткнул.

    ОтветитьУдалить
  5. Больше не работает этот софт,наверное из-за того что поменяли на https адресс ливера.Ванс,исправь если можно,а то годный софт и очень нужен.

    ОтветитьУдалить