Microsoft Security Essentials
- 1 year ago
- 0
- 0
Взлом программного обеспечения ( англ. software cracking ) — действия, направленные на устранение защиты программного обеспечения (ПО), встроенной разработчиками для ограничения функциональных возможностей. Последнее необходимо для стимуляции покупки такого проприетарного ПО, после которой ограничения снимаются.
Крэк (также искажённое кряк и, крайне редко, крак ) ( англ. crack ) — программа , позволяющая осуществить взлом программного обеспечения. Как правило, крэк пригоден для массового использования. По сути, крэк является воплощением одного из , зачастую, это обычный патч .
Для слова кряк используются следующие эвфемизмы : «лекарство», «таблэтка», «аспирин» и т. п. Крякер ( англ. cracker ) — человек, который занимается созданием кряков.
Практически любой взлом сводится к использованию одного из следующих способов:
При взломе сложных защит, а также при необходимости достичь максимального эффекта, применяется комбинация вышеперечисленных способов. В редких случаях, это происходит при недостаточной квалифицированности взломщика.
Этот список не является исчерпывающим, а лишь обозначает наиболее встречаемые способы взлома.
Вид взлома, в большинстве случаев, обусловлен видом защиты . Для некоторых защит возможно использовать различные виды взлома, для других — способ может быть единственным.
Как правило, в основе работы крэкера лежит исследование
ассемблерного кода
, полученного из
машинных инструкций
с помощью специально предназначенной для этого программы-
дизассемблера
. В зависимости от выбранного способа взлома результат исследования может использоваться, например, для построения
генератора ключей
или для внесения необходимых изменений в
исполняемый файл
. Последний способ в большинстве случаев наиболее лёгкий, так как не требует изучения алгоритма проверки правильности ключа: зачастую взлом сводится к поиску проверки нескольких условий (наподобие «ВведённоеЧисло
равно
ЭталонномуЧислу?») и замене такого условия на безусловный переход (
goto
,
jmp
), или, реже, на противоположное (то есть для данного примера на «Введённое Число
не равно
Эталонному Числу?»).
Кроме того, внесение изменений в исполняемый файл (
патч
) может производиться с целью отключения нежелательных действий со стороны программы (например, напоминание о необходимости регистрации), сокращения функциональности программы. В этих случаях соответствующие команды процессору часто заменяются на байты со значением 90h (в
шестнадцатеричной системе счисления
), что соответствует
ассемблерной
команде
nop
(
n
o
o
peration
), то есть «пустой команде», не выполняющей никаких действий. Если таких команд много, то применяется безусловный переход (перепрыгивание через ненужный код). Возможно также расширение возможностей программы написанием дополнительного кода, но, как правило, это слишком трудоёмкий процесс, не оправдывающий временных затрат.
Между тем, патч возможен, как правило, в том случае, когда исполняемый файл программы не защищён специальными «пакерами» и «протекторами» — программами, скрывающими реальный код исполняемого файла. Для последнего типа программ зачастую используется самая интеллектуальная часть обратной разработки ( англ. reverse engineering ) — исследование кода программы при помощи отладчика и создание генератора ключей, но возможны и другие решения, например, создание загрузчика (см. выше).
Факт взлома очень трудно доказать: пользовательское соглашение , как правило, запрещает декомпиляцию программы, а закон — создание и распространение результата такой работы. Однако декомпилированный текст продукта по окончании работы легко уничтожить , а результат работы — распространить по защищённым каналам и выложить на сервере, хостящемся в стране с более либеральными законами. В распространении крэкерам помогают и файлообменные сети , поскольку в большинстве из них крайне трудно найти оригинальный источник файла, а уничтожить все его копии и вовсе невозможно.