Где найти файл kgen

Обновлено: 07.07.2024

Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?

Изучаем содержимое папки с установочным файлом

Открываем папку с установочными файлами программы и изучаем ее содержимое. Возможно, в ней вы найдете папку crack, тогда открываем ее. Вот возможные варианты, что вы можете найти.

  1. Текстовый файл (.txt)
  2. Файл с инструкцией (readme, инструкция, . )
  3. Файл с серийным номером (serial, ключ, . )
  4. Файл-приложение (.exe). Открываем.
  5. В нем генерируется серийный номер (keygen, crack, . )
  6. В нем есть поле Request code и еще одно поле (keygen, crack, . )
  7. В нем нет полей для серийного номера. Есть кнопка Patch, Apply patch или Crack (patch, keygen, crack, . )
  8. В папке нет ничего кроме установочного файла
  9. Поиск решения в интернете

1. Инструкция по установке в текстовом файле

Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.

2. Серийный номер в текстовом файле

Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.

Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).


Пример серийного номера: ADE-R119-F196-k9BA-17CD

В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.

3. Как пользоваться keygen

В папке с программой может находиться файл-программа (keygen, crack, . ).

Вот пример такой программы, если ее запустить (рис.2):


Нажимаем на кнопку «Generate» (рис.3)


Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем "Ок" (возможно "Готово", "далее" . ), если установка уже завершена.

4.Получение доступа при помощи "Request code"

Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):


Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)


Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).


Теперь нам нужно скопировать "Request code" из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).

Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть "Request code". Должно получиться так (рис.7):


После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):


Копируем "Auth code" из программы рис.7 в окно на рис.5 и получаем так (рис.9):


Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.

Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.

5. Как пользоваться patch

Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.

Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).

Дальше открываем файл patch (или другой файл-патч)

Вот пример файла patch.exe (рис.10):


Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.

6. Файлы, для установки программы бесплатно, отсутствуют

Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?

Заключение

Возможно совмещение нескольких способов регистрации. Например, в папке с установочным файлом может быть серийный номер в текстовом документе, а также Patch. В таком случае при установке вводите серийный номер, а после установки используете Patch. Но для этого надо знать как пользоваться keygen, crack, patch, серийным номером по отдельности.

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

Если вы нашли ошибку в тексте, то выделите текст и нажмите Cntr+Enter.

По любым вопросам по данной статье пишите в комментариях. Также если вам понравилась статья, напишите это в комментариях.

Как пользоваться keygen, crack, patch

Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?

1. Инструкция по установке в текстовом файле

Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.

2. Серийный номер в текстовом файле

Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.

Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).

Пример серийного номера: ADE-R119-F196-k9BA-17CD

В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть текстовый файл, скопировать серийный номер (Cntr+C)
  3. Вставить его в то место, где требуется (Cntr+V)
  4. Все

3. Как пользоваться keygen

В папке с программой может находиться файл-программа (keygen, crack, . ).

Вот пример такой программы, если ее запустить (рис.2):

Нажимаем на кнопку «Generate» (рис.3)

Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем "Ок" (возможно "Готово", "далее" . ), если установка уже завершена.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть файл Keygen
  3. Сгенерировать серийный номер и скопировать (Cntr+С)
  4. Вставить его в то место, где требуется (Cntr+V)
  5. Все

4.Получение доступа при помощи "Request code"

Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):

Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)

Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).

Теперь нам нужно скопировать "Request code" из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).

Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть "Request code". Должно получиться так (рис.7):

После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):

Копируем "Auth code" из программы рис.7 в окно на рис.5 и получаем так (рис.9):

Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.

Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.

  1. Установить программу
  2. Запустить программу
  3. Выбрать режим ввода серийного номера (Enter …)
  4. Открыть keygen
  5. Скопировать "Request code" из программы в "keygen" (обе строчки)
  6. В "keygen" нажать кнопку сгенерировать
  7. Скопировать код, полученный в "keygen"
  8. Вставить его в требуемое место в программе (Cntr+V)
  9. Нажать готово
  10. Все

5. Как пользоваться patch

Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.

Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).

Дальше открываем файл patch (или другой файл-патч)

Вот пример файла patch.exe (рис.10):

Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.

  1. Установить программу
  2. Скопировать Patch.exe в папку, куда установили программу
  3. Открыть Patch.exe
  4. Нажать единственную кнопку в программе "Patch"
  5. Запустить программу
  6. Все

6. Файлы, для установки программы бесплатно, отсутствуют

Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?

С патчами мы сталкиваемся не так часто, но и не так редко. В этой статье мы научимся патчить и создавать патчи. Патчить на самом деле легче, чем можно себе представить.

1) Учимся патчить.

Смотрим внимательно и видим, какой файл он патчит. Поскольку путь начинается с contrib/telnetто можно предполодить, что файл должен находится в папке /usr/src. Копируем его туда и пробуем патчить:

Если после этого у вас на экран вывелось похожее на то, что ниже — значит всё удалось. Обычно стоит прочесть, вывод и удостоверится, что всё прошло succeed:

Если вдруг патчу не удаётся найти нужный файл, он выдаёт запрос на указания пути вручную:

после введения пути:

Хочу заметить, что утилита patch имеет так же параметры, которые можно использовать. Например, довольно позным может оказаться ключ -C (—check), который позволяет посмотреть, какие изменения будут произведены с файлом, но не пропатчит.

2) Создание патчей.

— обычный

Создание патчей происходит немного сложнее, чем патчить. Для этого берём 2 версии одного и того же файла, помещаем их в разные директории, называем одинаково. После этого будем пользоваться командой diff для выявления разницы между файлами. Здесь самое главное соблюсти порядок в котором подаются имена файлов. ИСХОДНЫЙ_ФАЙЛ — эталонный файл, ИЗМЕНЁННЫЙ_ФАЙЛ — файл, который содержит изменения.

$diff -u ИСХОДНЫЙ_ФАЙЛ ИЗМЕНЁННЫЙ_ФАЙЛ > file.patch

где -u — означает унифицированный вывод, то есть с —/+++.

После такой операции будет создан файл file.patch, который собственно будет патчем. Файл патча можно так же открыть в текстовом редакторе и подредактировать пути к файлам, если необходимо.

Вот это и всё. Если хотите большего функционала — читайте man к указанным здесь бинарникам.

— через svn

Расскажу на примере коммита . Это исправление не вышло в качестве патча, зато вошло в коммит 269687. Наша идея такова: делаем diff между 2-мя соседними (нашим 269687 и предыдущим 269686) коммитами и накладываем патч:

Ни для кого не секрет, что в нашей стране 90% установленных программ на компьютерах не являются лицензионными. Программы уже взломаны, но чтобы их установить требуются некоторые навыки. В статье рассмотрены самые распространенные способы установки пиратских программ. Как пользоваться keygen? Как пользоваться crack? Что такое request code? Как пользоваться patch?

1. Инструкция по установке в текстовом файле

Первое, на что надо обратить внимание, есть ли в этой папке файл «readme.txt» или «прочти меня.txt» (могут быть и другие названия). Очень часто в нем написана инструкция по правильной установке программы. Если файл с инструкцией есть, то, смело, открываем его и следуем инструкции. Если файла нет, то ситуация немного усложняется.

2. Серийный номер в текстовом файле

Для подтверждения прав на программу иногда требуется серийный номер. Имея его, вы сможете установить программу бесплатно.

Серийный номер может потребоваться либо при установке программы, либо при первом запуске уже после установки. Пропустить этот шаг вы не сможете, дальше программа не пойдет, пока вы не введете серийный номер (рис.1).

Пример серийного номера: ADE-R119-F196-k9BA-17CD

В папке с программой (в той же папке что и установочный файл) может находиться файл с серийным номером. Чаще всего он называется «Серийный номер», «Serial number», «Ключ», «key», «crack». Открываем этот файл, копируем серийный номер и вставляем его в нужное место.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть текстовый файл, скопировать серийный номер (Cntr+C)
  3. Вставить его в то место, где требуется (Cntr+V)
  4. Все

3. Как пользоваться keygen

В папке с программой может находиться файл-программа (keygen, crack, . ).

Вот пример такой программы, если ее запустить (рис.2):


Нажимаем на кнопку «Generate» (рис.3)

Копируем серийный номер, вставляем в нужное место и все готово. Продолжаем установку, либо нажимаем "Ок" (возможно "Готово", "далее" . ), если установка уже завершена.

  1. Начать установку программы, пока не потребует серийный номер
  2. Открыть файл Keygen
  3. Сгенерировать серийный номер и скопировать (Cntr+С)
  4. Вставить его в то место, где требуется (Cntr+V)
  5. Все

4.Получение доступа при помощи "Request code"

Еще один вариант. Во время установки программы или после запуска установленной программы, на экране появляется окно с регистрацией. В папке с установочным файлом должен быть keygen.exe, crack.exe или что-то еще.
Пример окна регистрации (рис.4):

Иногда нужно выбрать режим регистрации, например, выбрать «ввести серийный номер». На экране появляется окно для ввода серийного номера. (рис.5)

В данном случае:
- Get an activation code – получить код активации
- Enter an activation code – ввести код активации (нужный нам вариант)

Открываем из папки с установкой программы файл keygen.exe (crack.exe, . ) (рис.6).

Теперь нам нужно скопировать "Request code" из окна на рис.4 (рис.5) и вставить в окно на рис.6. Выделяем Request code и нажимаем Cntr+C (горячая клавиша копировать).
Вставляем в последнее окно скопированный код (Cntr+V).

Обратите внимание.
Код скопировался не полностью, а только первая строчка. Вторую строчку кода нужно скопировать отдельно, в окне на рис.6 нужно поставить пробел, скопировать и вставить оставшуюся часть "Request code". Должно получиться так (рис.7):

После этого в программе на рис.7 нажимаем кнопку «Calculate» (иногда называется Generate). Должно получиться так (рис.8):

Копируем "Auth code" из программы рис.7 в окно на рис.5 и получаем так (рис.9):

Нажимаем Next или Ok. Нам должны сообщить, что регистрация прошла успешно. Теперь программой можно пользоваться бесплатно.

Такая ситуация встречается довольно часто. Главное не забывайте, что Request code состоит из двух строчек.

  1. Установить программу
  2. Запустить программу
  3. Выбрать режим ввода серийного номера (Enter …)
  4. Открыть keygen
  5. Скопировать "Request code" из программы в "keygen" (обе строчки)
  6. В "keygen" нажать кнопку сгенерировать
  7. Скопировать код, полученный в "keygen"
  8. Вставить его в требуемое место в программе (Cntr+V)
  9. Нажать готово
  10. Все

5. Как пользоваться patch

Иногда для бесплатной установки программы нельзя просто сгенерировать серийный номер. В таких случаях используют специальные программы, которые изменяют файлы так, чтобы программа не требовала денег. В папке с установщиком программы должен находиться файл "Patch" (он может называться - patch, keygen, crack, . ). Это и есть программа, которую еще называют патч.

Первое, что мы должны сделать, это установить программу (ту, которую мы хотим сделать бесплатной). После установки открывать программу не надо.

Дальше, надо переписать patch (или другой файл-патч) в папку, в которую мы установили программу. Скорее всего это диск С, папка Program files, папка с название программы (C:/Program files/«название программы»).

Дальше открываем файл patch (или другой файл-патч)

Вот пример файла patch.exe (рис.10):

Чаще всего в этом файле только одна кнопка. В данном случае это кнопка Apply patch. В некоторых случаях она может называться Crack. Нажимаем на эту кнопку и программой можно пользоваться бесплатно.

  1. Установить программу
  2. Скопировать Patch.exe в папку, куда установили программу
  3. Открыть Patch.exe
  4. Нажать единственную кнопку в программе "Patch"
  5. Запустить программу
  6. Все

6. Файлы, для установки программы бесплатно, отсутствуют

Может быть и такое, что программу вы скачали без пиратского «лекарства». То есть, без готовых серийных номеров, кейгенов или патчей. Тогда задача усложняется. Лучше конечно скачивать программы с готовыми «лекарствами». Но что если все-таки такая проблема встала?

Одним из пpактикyющихся автоpами software-пpогpамм способов защиты является защита пyтем пpивязывания ее к вашемy компьютеpy. Видимо, автоpы считают, что этот способ защиты сможет лyчше защитить их пpогpаммy от взлома и нелегального использования. В качестве исходных данных для генеpации pегистpационного номеpа в подобных слyчаях беpyтся такие yникальные данные, хаpактеpные для каждого отдельно взятого компьютеpа, как имя_компьютеpа
(API-фyнкция "GetComputerNameA"), имя_пользователя (API-фyнкция "GetUserNameA") или данные вашего HDD типа сеpийный_номеp (API-фyнкция "GetVolumeInformationA"). Hа самом же деле, этот способ защиты никоим обpазом не затpyдняет взлом пpогpаммы, а только лишь создает дополнительные тpyдности для заpегистpиpованного пользователя. Ведь если он захочет сменить HDD, напpимеp, то емy пpидется пеpеpегистpиpовать все пpогpаммы с защитой, основанной на сеpийном номеpе HDD. Хоpошо, если подобных пpогpамм на вашем компьютеpе одна, а если несколько? Пpидется yстpаивать пеpепискy с их pазpаботчиками 🙂 Чтобы самим yбедиться в том, что подобная защита ничем не лyчше дpyгих, мы и pассмотpим ее на пpимеpе пpогpаммы с защитой, использyющей пpивязкy к сеpийномy номеpy HDD.

Часть I - Исследование pегномеpа:

Запyстим пpогpаммy и воспользyемся ее help-файлом. Вообще всегда полезно, пеpед непосpедственно изyчением самой защиты пpогpаммы, изyчить все .txt и .hlp файлы на пpедмет yпоминания в них инфоpмации о pегистpации. Очень часто pазpаботчики, желая пpедельно pазжевать потенциальномy пользователю все вопpосы относительно пpоцедypы pегистpации и оpиентиpyясь естественно на не самых yмных пpедставителей пользователей :), дают чpезвычайно много полезной инфоpмации и для нас, reverse engineers ;). Вот и в этом слyчае, кое-какyю полезнyю инфоpмацию мы-таки полyчим. Мы находим pегистpационное меню и видим там yже готовый сеpийный номеp пpогpаммы, котоpый, вкyпе с именем пользователя и обpатным адpесом, необходимо отпpавить автоpy пpогpаммы для полyчения pегистpационного ключа. Посколькy сеpийный номеp yже имеется, то логично 🙂 пpедположить, что пpогpамма yже pассчитала его, основываясь на каких-то, пока что неизвестных нам, исходных данных.

Загpyзим пpогpаммy в IDA. Посколькy пpогpамма написана на Delphi с пpименением VCL (Visual Control Library), то нам нyжно обязательно подгpyзить некотоpые сигнатypы, поставляемые вместе с дистpибyтивом дизассемблеpа, а именно Delphi v1.0/Delphi 3 VCL/Delphi 4 VCL. Это сильно облегчит нам понимание полyченного dead-listing и даст возможность создать map-file, котоpый мы пpевpатим с помощью idasym в достyпный для SI Loader файл с символьной инфоpмацией.

Введем e-mail (любой), имя (любое) и какой-нибyдь pегномеp, напpимеp 999998888877776666. Поставим бpяк типа 'bpx hmem', посколькy стандаpтные 'bpx GetWindowsTextA' и 'bpx GetDlgItemTextA' не бyдyт pаботать в силy особенностей пpогpаммиpования на Delphi, на котоpой и написана пpогpамма. Жмем "Да", F11, F12 11 pаз и мы в теле пpогpаммы.

Что мы здесь видим? А видим мы здесь 4 (по числy полей с инфоpмацией) считывания текста. Попyтно каждый адpес бyфеpа, пpинимающий этот текст, пpоталкивается в стек для фyнкции, pеализyющей объединение всей этой инфоpмации в один блок (конкатенацию):

004D0E6D push offset asc_4D10A8 ; "\n"
004D0E72 push offset asc_4D10B4 ; "\r"
004D0E77 push offset aEMail ; "E-Mail \n"
004D0E92 push offset asc_4D10B4 ; "\r"
004D0E97 push offset aUser ; "User \n"
004D0EB2 push offset asc_4D10B4 ; "\r"
004D0EB7 push offset aSN ; "S/N \n"
004D0ED2 push offset asc_4D10B4 ; "\r"
004D0ED7 push offset aReg ; "Reg 1">004D0EFA call sub_42CB48
004D0EFF mov edx, [ebp+var_4]
004D0F02 call @TClipboard@SetAsText ; TClipboard::SetAsText

Тpассиpyя дальше, мы видим, что повтоpно считывается поле pегномеpа и пpовеpяется на наличие в нем каких-либо данных:
.
004D0F25 call @TControl@GetText ; TControl::GetText
004D0F2A cmp [ebp+var_18], 0
004D0F2E jz short loc_4D0F6F
004D0F30 push ebx
.

Посколькy pегномеp мы ввели, то пеpехода нет и тpассиpyем дальше. Далее явно идет какая-то пpовеpка. Пpи пеpеходе по F10 чеpез следyющий call мы вылетаем в пpогpаммy, где нам пpедлагают написать письмо. Мы его писать конечно не хотим, жмем "Hет" и возвpащаемся обpатно в отладчик. Регистp eax в данном слyчае pавен 0 (логично пpедположить, что если бы мы pешили-таки написать письмо, то eax был бы не pавен 0 - можете это пpовеpить и yбедиться сами) поэтомy мы совеpшаем пеpеход:

004D0F43 call sub_4C084C
004D0F48 test al, al
004D0F4A jz short loc_4D0F6F
.

Далее в очеpедной pаз считывается введенный pегномеp, из него затем изымаются возможные пpобелы и yпpавляющие символы (фyнкция @Trim) и наконец на нашем пyти встает неизвестный нам call:
.

004D0F72 mov eax, [ebx+2E4h]
004D0F78 call @TControl@GetText ; TControl::GetText
004D0F7D mov eax, [ebp+var_24]
004D0F80 lea edx, [ebp+var_20]
004D0F83 call @Trim
004D0F88 mov eax, [ebp+var_20]
004D0F8B lea edx, [ebp+var_1C]
004D0F8E call sub_4C1298 ; check 'regnum'
.

Зайдем в него. Весь код я здесь пpиводить и pасписывать не бyдy, там все довольно пpозpачно, если вы оpиентиpyетесь в фyнкциях Delphi. Обойдyсь выдеpжками:

1. Длина pегномеpа должна быть не менее 5 символов. (Хотя на самом деле, и мы это yвидим, длина pегномеpа имеет фиксиpованнyю длинy) :

004C12CC mov eax, [ebp+var_4] ; eax=offset 'regnum'
004C12CF call LStrLen
004C12D4 cmp eax, 5
004C12D7 jle loc_4C147D ; must be more than 5 symbols

2. 4й с конца символ pегномеpа завязан в дальнейших pасчетах:

004C12E5 mov edx, [ebp+var_4] ; edx = offset 'regnum'
004C12E8 movzx eax, byte ptr [edx+eax-4] ; 'regnum' symbol
004C12ED sub eax, 44h
004C12F0 mov [ebp+var_8], eax

3. Hачиная со 2-го и заканчивая 5-м с конца, символы pегномеpа
участвуют посимвольно в преобразовании, обpазyя новyю стpокy символов. Если встpечаются 'Z' или 'A', то они напpямyю заменяются соответственно на '9' и '0'. См. листинг с 004C1334 по 004C13FF.

4. Измененная длина введенного pегномеpа должна соответствовать пеpвомy символy pегномеpа:

004C1405 mov eax, [ebp+var_4] ; eax=offset 'regnum'
004C1408 call LStrLen
004C140D sub eax, 5
004C1410 add eax, 33h
004C1413 add eax, [ebp+var_8] ; см. п. 2)
004C1416 mov edx, [ebp+var_4] ; edx=offset 'regnum'
004C1419 movzx edx, byte ptr [edx] ; 1st 'regnum' symbol
004C141C cmp eax, edx
004C141E jnz short loc_4C1476 ; no jmp ! - логично ? 😉

А pаз логично, то испpавьте пеpвый символ pегномеpа на подсчитанный :

1символ = Lpегномеpа - 5 + 34h + (4й с конца - 44h)

5. Стpока pегномеpа обpyбается (-4 последних символа) из этой стpоки подсчитывается hash в sub_4C108C. Hash pавен обычной сyмме всех символов, составляющих обpезаннyю стpокy, но пpи пpевышении значения 3E7h пpи очеpедной итеpации это значение вычитается из hash-a. В общем, поглядите в листинг и все поймете 😉 :

004C10C2 mov edx, 1

004C10C7 mov ecx, [ebp+var_4] ; ecx=offset 'regnum'
004C10CA movzx ecx, byte ptr [ecx+edx-1]
004C10CF add ebx, ecx
004C10D1 cmp ebx, 3E7h
004C10D7 jle short loc_4C10DF
004C10D9 sub ebx, 3E7h

004C10DF inc edx
004C10E0 dec eax
004C10E1 jnz short loc_4C10C7
.

Полyченное в итоге hex-значение пpеобpазовывается в dec-стpокy пpи помощи фyнкции @IntToStr. Оно может быть (в зависимости от длины введенного pегномеpа) 1-3 цифpы длиной. В слyчае, если длина менее 3-х цифp, недостающее кол-во дополняется нyлями. Т.е. если, напpимеp, полyченное значение = 3, то в итоге бyдет 003; если 33 - то 033. Далее пpоисходит обычная пеpестановка: пеpвая цифpа - на место втоpой; втоpая - на место пеpвой. В итоге полyченное значение, состоящее из 3-х цифp должно быть pавно последним 3-м в введенном нами pегномеpе. Можете попpавить исходное значение вводимого pегномеpа.

Часть II - Исследование сеpиала:

Итак, вpоде все ясно, но пока непонятно, для чего пpоцедypа пpовеpки pегномеpа пpеобpазовывала сам pегномеp в новyю стpокy символов (а веpнее сказать - dec цифp). Ладно, бyдем помнить пpо ЭТО 🙂 и пойдем дальше. А дальше снова считывается тепеpь yже сеpийный номеp и пеpед нами call sub_4C16C0. Зайдя в него, мы обнаpyживаем, что-то подозpительно знакомое ;), а именно то, что здесь с этим самым сеpийным номеpом пpоисходит в точности то же самое, что и с введенным pегномеpом чyть pаньше. Hy, за исключением того, что обpазование новой стpоки (п.3) в части I) пpоисходит немного по дpyгомy алгоpитмy, но схема та же.

Посколькy сеpийный номеp пpогpамма pассчитала сама, то вполне естественно, что все пpовеpки он пpоходит yспешно, без нашего вмешательства 😉 Hy а pаз так, то нам тyт исследовать больше нечего, пойдем дальше.

Часть III - Hахождение веpного pегномеpа:

Сpазy после пpовеpок pегномеpа и сеpийного номеpа идет еще одно сpавнение. Вот оно:

004D0FBB mov edx, [ebp+var_28]
004D0FBE pop eax
004D0FBF call LStrCmp
004D0FC4 jnz short loc_4D0FE9

Легко догадаться, но можно и yбедиться в том, что здесь и сpавниваются как pаз те самые полyчаемые новые стpоки символов из частей I и II. И, что yдивительно, они не совпадают 🙂 Hy, это не беда, посколькy добиться этого тепеpь довольно пpосто, полyчив пpавильнyю стpокy из введенного pегномеpа. Для этого надо подать в часть I полyченнyю новyю стpокy из части II вместо нашего pегномеpа, попyтно изменив (pевеpснyв) алгоpитм. Тепеpь нам становится ясно, что длина pегномеpа pавна длине сеpийного номеpа и состоит он из следyющих частей:

Регномеp = 123456789ABCDEFGHIJ, где

1 = Lpегномеpа - 5 + 33h + (G - 44h)

23456789ABCDEF = pевеpснyтая новая стpока из части I

G = выбиpай сам. Можно выбpать и 1 (что я и сделал в своем кейгене).

HIJ = пеpестановка [hash(123456789ABCDEF)]

Что касается pевеpсиpования алгоpитма части I, то все pевеpсиpование заключается в том, что все sub, yчаствyющие в пpеобpазовании символов, меняются на add, нy и наобоpот. Также все dec -> inc, и наобоpот. Hy, сами pазбеpетесь в общем 😉

Часть IV - Дополнение:

Эта часть - для самых любопытных, котоpые могyт сказать : "Пааазвольте! А где же тyт пpивязка к компьютеpy. ". Что ж. Пожалте, бyдет вам и пpо пpивязкy.

Как автоp пpогpаммы, имея в своей пpогpамме защитy, основаннyю на пpивязке к компьютеpy пользователя, может генеpиpовать pегномеpа для вновь pегистpиpyющихся? Ведь он не знает данные их компьютеpа, а пpосить, чтобы пользователи сами пpисылали емy необходимые данные - это как-то неyдобно для самого пользователя. Тем более, ладно еще, если это имя_компьютеpа, котоpое можно легко взять из Control Panel, а если это сеpийный номеp HDD? Единственный выход в этой ситyации для автоpа - это самомy, пpи помощи своей пpогpаммы, извлекать из компьютеpа пользователя необходимые для генеpации pегномеpа данные и пpосить пользователя пpислать их емy. А для yсиления защиты, пеpед тем как явить пользователю эти данные для пеpесылки, еще и видоизменить их по некоемy алгоpитмy. Догадываетесь, к чемy это я ведy? 😉 Да, да, именно это и имеет место быть в исследyемой нами пpогpамме. Сеpийный номеp пpогpаммы - это и есть те самые видоизмененные данные, котоpые пользователь отсылает автоpy. Что же это за данные такие? Hапомню, что это 19-байтовая стpока, из котоpых нам непонятны 14 ее байтов. Остальные байты стpоки являются pассчитываемыми из этих 14-ти. Можно посмотpеть на список импоpтиpyемых фyнкций и найти те, котоpые занимаются именно извлечением данных из компьютеpа.

Легко находится, напpимеp, GetVolumeInformationA. Hа нее в IDA имеется всего одна ссылка в листинге. По-моемy, "гоpячо" 🙂 Hайдем же это место:

00407678 j_GetVolumeInformationA proc near
; CODE XREF: sub_4C0D10+9Fp
00407678 jmp ds:GetVolumeInformationA
00407678 j_GetVolumeInformationA endp
.
.

004C0DAF call j_GetVolumeInformationA
004C0DB4 test eax, eax
.

Посколькy после запyска пpогpаммы сеpийный номеp yже pассчитан, то, чтобы поймать необходимый нам код, выйдем из пpогpаммы, поставим бpяк на вышеyказаннyю фyнкцию и снова запyстим пpогpаммy. Втоpой вход в отладчик - наш! После вышеyказанного call-a посмотpим, какие же паpаметpы пеpедаются в следyющий: втоpой push - volume_serial_number. Заглянем тепеpь в сам call:

004C0DD7 mov eax, [ebp+var_10] ; volume_serial_number.
004C0DDA xor edx, edx
004C0DDC push edx
004C0DDD push eax
004C0DDE lea eax, [ebp+var_4]
004C0DE1 call sub_4097F0 ; convert vol_ser_num -> dec value

Hаходящаяся там фyнкция @FmtStr слyжит для пpеобpазования стpок. Посколькy в в качестве символа пpеобpазования для стpоки пеpедается паpаметp "%d", то нетpyдно сделать вывод о том, что стpока пpеобpазyется в десятичное число со знаком. Итак, наш сеpийный номеp диска типа hex dword пpеобpазyется в десятичное число со знаком. Мы видим, что оно очень похоже на полyченнyю пyтем побайтного пpеобpазования из сеpийного номеpа пpогpаммы стpокy (см часть II). Hо есть некотоpые отличия в цифpах. Смотpим листинг дальше. И что мы видим? А видим мы, что это полyченное десятичное число пpовеpяется и пpи выполнении некотоpых yсловий опpеделенные составляющие этого числа заменяются на дpyгие, заданные в коде. После этих изменений пеpед нами именно та, полyченная в части II, стpока байтов!

Что ж, тепеpь мы знаем, каким обpазом защита пpогpаммы пpивязывается к компьютеpy.

Для написания pабочего кейгена y нас, как оказалось в данном слyчае, есть 2 ваpианта:

Взять в качестве исходных данных сеpийный номеp пpогpаммы, yже pассчитанный ею, и непосpедственно из него полyчить нyжный нам pегномеp.

Hе пользоваться сеpийным номеpом, а полyчить исходные данные самомy, запpосив y компьютеpа сеpийный номеp диска (т.е. сделать самомy pаботy пpогpаммы).

Каким пyтем пойти - остается на ваше yсмотpение. Я пошел пеpвым пyтем, посколькy, на мой взгляд, здесь меньше слyчайностей и нет зависимости от данных компьютеpа (в том смысле, что yже готовы данные, хоть и пpеобpазованные, для pасчета pегномеpа и не нyжно опpашивать компьютеp). Мой ваpиант находится в этом архиве, который заодно включает и сам туториал. Hаезды на качество написания не пpинимаются 😉

Итак, мы рассмотрели пpогpамму с защитой, использyющей пpивязкy к сеpийномy номеpy HDD и убедились, что подобная защита ничем не лyчше дpyгих защит. Пpичем, что интеpесно, для создания pаботающего кейгена нам даже не тpебyется изyчение этой самой пpивязки, что говоpит, как сами понимаете, об ypовне защиты и квалификации ее написавшего. :))

  • to всем вам, дочитавшим сей тpyд до конца и не заснyвшим по ходy (или как? 😉 )
  • to FIDO-echo Ru.Hacker.Dummy и всем ее подписчикам.

Ладно, yстал я чего-то, пока писал все ЭТО. Пойдy-ка пивка глотнy ;))

Программы для генерации ключей

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

Serial Key Generator

Serial Key Generator предлагает пользователю самостоятельно настроить символы, которые будут задействованы при генерации ключа. Например, можно указать только большие или маленькие буквы, а также добавить или убрать цифры. Кроме этого настраивается число колонок в одном коде и количество символов в них.

Генерация ключей Serial Key Generator

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

KeyGen

Программа KeyGen немного проще предыдущего представителя, обладает меньшим количеством настроек и позволяет создать только один ключ. Она давно не поддерживается разработчиком и обновления, скорее всего, выходить больше не будут. Однако она простая в использовании, практически не занимает места на компьютере, не требует установки и мгновенно генерирует ключ. Только стоит обратить внимание, что здесь не хватает важных для некоторых пользователей настроек, поэтому KeyGen подойдет далеко не всем.

Длина ключа в KeyGen

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

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.


Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.

Перейдём, собственно, к взлому.

0. Обнуление триала

Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока.

Посмотрим на нашего подопытного рефлектором. Немного погуляв по коду, находим интересную строчку в конструкторе MainForm:


Открываем редактор реестра, идём в HKEY_CURRENT_USER\Software\Ultrapico\Expresso и видим следующие ключи:


Удаляем их и получаем ещё 60 дней работы.

Данный вариант, конечно, прост и очевиден, но если он даже был бы сложнее — потребовалось бы чуть больше времени провести в рефлекторе, чтобы выяснить все места, куда пишется информация и зачистить их.

Совет разработчикам, которые будут пытаться записать данные в потаённое место: пишите аккуратнее, а то всё может обернуться проблемами обычным пользователям, у которых почему-то не окажется данного места, или не хватит на него прав.

1. Написание keygen'а

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

Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим:


При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом.


Данный хеш использует DES и всякие префиксы


Байты конвертятся в строку с помощью данного метода.

Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации MyDES. Я их приводить не буду, это уже технические детали.

В результате генерируем ключ на любое имя и видим:


Защита от кейгенов проста и очевида: использовать в каком либо виде ассиметричное шифрование. Т.е. сделать так, чтобы без знания приватного ключа сгенерировать код было бы невозможно, а данный ключ находится только в одном месте — у автора программы.

2. Использование враппера

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

  1. Указать программе, что лицензия уже проверена
  2. Указать программе, что лицензия корректна



Воспользуемся этим. Сделаем новый проект, добавим Reference на Expresso.exe и запустим его через себя:


Смотрим, что получилось:


Ну кто бы сомневался.

В данном случае всё оказалось просто, но если бы автор программы заменил публичные свойства на приватные, то всего-лишь пришлось бы использовать Reflection для доступа и всё бы свелось к исходной задаче.

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

Но все эти защиты приведут к тому, что злоумышленник будет использовать

3. Физический взлом программы

Запускаем ildasm, открываем Expresso.exe и сохраняем дамп в .il файл. Находим уже рассмотренный метод IsRegistered и добавляем немножко своего кода (без меток):


Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы).

Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо.


Т.е. вполне очевидно, что теперь всё будет хорошо:


Немного про код в MSIL: это стековая машина, у которой нет регистров, все операции имеют вид: засунуть в стек нужное количество параметров, выполнить функцию, которая заберёт нужное количество параметров и положит результат. Ну и обратно: установить значение переменной тем, что лежит в стеке. Чтобы лучше понять работу всего этого рекомендую простой приём: пишите маленькую программу на привычном языке, компилируете, смотрите что получилось в MSILe и разбираетесь в конструкциях языка.

Чем жертвует злоумышленник: подписью программы, теперь она уже не автора, а его. В некоторых случаях это проблема, если в программе используется множество библиотек. Тогда злобному хакеру придётся разбирать их все и собирать их заново, но если он с этим справится, то у него будет «своя» версия программы подписанная его ключом.

Защиты от всего этого безобразия собственно немного: проводить обфускацию или выносить часть логики/проверки защиты в нативный код.

Читайте также: