Как запустить файл keygen exe

Обновлено: 05.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) коммитами и накладываем патч:


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 и разбираетесь в конструкциях языка.

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

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

Одним из п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 ;))

Что делать, если защитник WINDOWS 10 не дает включить активатор Компьютерная помощь, Активатор, Windows 10, Длиннопост

- В свободной форме комментировать и обсуждать посты и другие комментарии.

- Оскорблять кого-либо из пользователей пикабу.

- Размещать контент не по теме сообщества (последнее решение за модератором).

- Размещать рекламу (контент и/или ссылки на платные программы).

Бан можно получить:

- За регулярное нарушение правил

Будьте культурными няшами и все будет хорошо :)

@ingreme, 200 рублей лицензионный ключ на али Win 10 Pro с моментальной доставкой избавит вас от проблем с активаторами, ради которых приходится отключать системы безопасности ОС.

А вообще есть такая штука как defender control от sordum.

спасибище тебе огромное! только твоя подсказка помогла, добрый человек!

Спасибо большое. Только что возникла такая проблема и ваш пост очень помог. Сохраню-ка я его на будущее.

О, спасибо. Не показывал екзешный файл кряка. Нашел и восстановил его благодаря этому посту.

Зачем вообще Windows 10 крякать?

Она продолжает обновляться и исправно работать и без этого говна.

Че за говно ты юзаешь, господи.
Используй нормальный Windows 10 digital activation, он не слетает даже после полной переустановки системы и форматирования диска.

А лицензию купить не? Не хотите? Юзайте свободное ПО!
ЗЫ: у меня и дома, и на работе, 2 ОС. В том числе лицензионная Windows. Офиса Libreoffice хватает.

@moderator, тут спрашивают как Windows крякнуть


Обновление Windows 10

Обслуживаю оргтехнику и компы в офисах. Пришел по заявке - не печатает. Отвалилась сетевая печать. Замучал весь системник где установлен принтер, - ставлю сетевой доступ - "ОК", захожу смотрю, снова нет доступа. Сносил все настройки сети, не помогло. Начал переустановки системы, заявка из соседнего кабинета - не печатает. Причем только этот комп не может подключиться к удалённому принтеру, остальные могут. Стал играть в детектива, что, как, когда - оказалось компьютер обновился и после этого всё пропало. Пришлось удалить последнее обновление КВ 5003137 и сразу всё заработало, на следующий день ещё на 3 компьютерах такая же фигня. Удаляю эту обнову, пытаюсь отключить автообновление, но всё равно это не правильно, а вот что сделать чтоб правильно. Win 10 2004. Тру админы помогите!


Крик души, сил моих уже нет. BSODы с рандомной ошибкой

Получилось длинно, но я прошу - кто разбирается в компах, не проходите мимо пожалуйста!

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

В общем, ближе к сути. Собрал я компьютер следующей конфигурации:

Материнка - Asus Prime B450 Plus

Видеокарта 0 Asus PCI-Ex GeForce GTX 1660 Super Dual EVO OC 6GB GDDR6

Оперативная память 2 плашки - HyperX DDR4-3200 8192MB PC4-25600 Fury Black (HX432C16FB3/8)

Процессор - AMD Ryzen 5 3600 (3.6GHz 32MB 65W AM4) Box (100-100000031BOX)

SSD - Western Digital Green SSD 240GB M.2 2280 SATAIII 3D NAND (TLC) (WDS240G2G0B)

HDD - Western Digital Blue 1TB 7200rpm 64MB WD10EZEX 3.5 SATA III

Блок питания - DeepCool 600W (DA600)

4 кулера PcCooler F122B 120 мм (3 на вдув, 1 на выдув)

Корпус, думаю, вообще не имеет значения.

Месяц данная сборка работала идеально, никаких проблем. Но потребовалась переустановка винды, так как была проблема с аккаунтом Origin, которая, как выяснилось не имела отношения к системе. Первый раз стояла Win10 x64 скачанная с сайта майкрософт, потом была установлена пиратка (каюсь), но даже с ней все некоторое время работало хорошо.

Потом начали вылетать BSODы с рандомными ошибками. Выискивая инфу по инету, было проделано практически все что предлагалось:

- Переустановка системы (разные дистрибутивы, сейчас опять стоит официальная Win10. BSODы вылазили даже сразу после установки, когда еще не успевал даже первый полноценный запуск происходить)

- Откаты драйверов и их переустановка (в том числе драйвер Realtek, на который тоже жаловались люди в интернете)

- Проверка оперативной памяти встроенным в винду ПО и с помощью MemTest (ошибок не обнаружено)

- Несколько проверок системных файлов через командную строку (один раз было что-то обнаружено и исправлено, не помогло)

- Использован DISM /RestoreHealth (не помогло)

- Проверены жесткие диски с помощью встроенных в винду инструментов (не помогло)

- Проведены чистки реестра с помощью CCleaner

- Пробовал менять плашки памяти местами, оставить только одну, потом оставить только вторую, проверка контактов (не помогло)

- Пробовал установку винды на другой жесткий диск (не помогло)

- Проверка температур (все в норме)

- Сброс БИОС до значений по умолчанию

- Было обнаружено что частота памяти в биосе выставлена на 2400, установил на 3200 (не помогло, но тут я не силен, может при изменении предустановок частоты тайминги тоже нужно поменять?)

- Чиста системного блока

- Откаты обновлений винды

Я уже даже не помню точно всё что проделано. Сейчас у меня в голове остались только пара самых невероятных мыслей - замена батарейки биос, или же где-то на контакты попала кошачья шерстинка и развиваясь на ветру от кулеров замыкает контакты (полный бред, дальше скажу почему), и. всё. Все идеи кончились, я уже понятия не имею что не так? Я тупо в отчаянии, так как ущемлял себя во всем ради семьи 10 лет и не обновлял железо, а тут. все новое, все хорошее, все совместимо, все с*ка дорогое и такая хрень.

Я готов заплатить (в разумных пределах) тому кто реально сможет помочь. Приглашать мастера на дом - бред, так как начнется разводняк "установка драйвера 27 штук по 150 грн.". Нести в ремонтную мастерскую? Рискую остаться без парочки конденсаторов или чипов. Обратиться и сдать железо по гарантии? - Не примут, так как я понятия не имею что конкретно работает не так как должно - оперативка в норме, все остальное вроде тоже в норме, а так как собирал сам, то весь комп не считается готовым изделием, и на гарантийный ремонт могут принять только конкретную часть, при наличии жалоб на ее работу.

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

Было опытным путем замечено что BSOD в 95% случаев появляется когда не запущены игры. То-есть - сидишь хоть целый день играешь и все хорошо, но стоит только выйти из игры, и в течении минуты вылетает BSOD. Либо вылетает при просмотре видео на ютубе и при обычном сёрфинге в инете. Или даже просто в режиме простоя. Логика подсказывает что все-таки что-то связано с оперативкой, так как видимо при освобождении оперативки от файлов игры и происходит стоп-ошибка. Но оперативка проверена тремя способами, и никаких ошибок и неисправностей не обнаружено. Еще я размышляю над вариантом неправильной работы какой-нибудь шины, через которые проходят данные, но как это проверить? И разве ошибка не должна быть одинаковой?

Я готов предоставить любую информацию по запросу тем, кто готов помочь - скрины биоса, настроек, температуры, фотки системного блока внутри. Надеюсь на Вашу помощь, и заранее спасибо!

Ниже ссылка на последние минидампы. Те которые с большим промежутком времени - это как раз то что я говорил - при запущенной игре все хорошо, после выхода - BSOD. Дампы за вчера - обычный сёрфинг в интернете и просмотр видео. И последний дамп - пока писал этот пост (удивительно что только один).

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