Взлом программного обеспечения
Взлом программного обеспечения (англ. software cracking) — действия, направленные на устранение защиты программного обеспечения (ПО), встроенной разработчиками для ограничения функциональных возможностей. Последнее необходимо для стимуляции снимающей подобные ограничения покупки проприетарного ПО.
Крэк (также искажённое кряк и, крайне редко, крак) (англ. crack) — программа для взлома программного обеспечения. Как правило, крэк пригоден для массового использования. Зачастую, это обычный патч.
Для слова крэк используются следующие эвфемизмы: «лекарство», «таблэтка», «аспирин» и т. п.[1] Крэкер (также искажённое крякер) (англ. cracker) — человек, который занимается созданием крэков.
Виды взлома
[править | править код]Практически любой взлом сводится к использованию одного из следующих способов:
- Ввод серийного номера (регистрационного кода) (жарг. серийник) (англ. serial number, S/n) — взлом программы введением правильного регистрационного ключа (или фразы), полученного нелегальным способом. Ключ может генерироваться на основе какой-либо информации (имени владельца ПО, характеристик аппаратной части компьютера, и т. п.), либо иметь фиксированное значение. Для генерации регистрационного ключа используется тот же алгоритм, что и в программе.
- Примечание 1: Регистрационный код может распространяться в ключевом файле (файле лицензии) (англ. keyfile), который обычно помещается в каталог с установленной программой.
- Примечание 2: Для массового взлома, зачастую, создаётся (и в дальнейшем используется) генератор ключей (жарг. кейген) (англ. keygen сокр. от key generator) — программа для генерации регистрационных ключей. Данный вид взлома наиболее востребован (особенно, когда программа часто обновляется или ключ генерируется на основе какой-то информации) и поэтому наиболее ценится. Как правило, требует бо́льшей квалификации взломщика по сравнению с другими видами взлома.
- Использование загрузчика (жарг. лоадер) (англ. loader) — способ обходить некоторые виды защиты ПО, использующие внешние системы. Состоит в изменении определённых фрагментов программы в оперативной памяти сразу после её загрузки, но перед запуском (то есть перед выполнением кода в точке входа).
- Применение (бинарного) патча (часто жарг. крэк или кряк от англ. crack) (англ. byte patch) — способ, похожий на «загрузчик», но модификация производится статически в файлах программы. Как правило, это один из самых простых и быстрых способов взлома ПО[2].
- Использование взломанной версии файла(ов) (англ. cracked) — подмена оригинальных файлов программы файлами, которые уже взломаны.
- Использование эмулятора ключа (англ. key emulator) — способ используется для обмана защит, построенных на использовании в качестве защиты электронного ключа (как правило, подключаемого к LPT- или USB-порту компьютера). Заключается в снятии дампа внутренней памяти ключа. Файл с содержимым памяти подаётся на вход специальной программе — эмулятору, которая подключает свой драйвер-фильтр в стек драйверов и обманывает защищённую программу, эмулируя работу с аппаратным ключом. При наличии в программе обращений к ключу для аппаратного шифрования участка памяти этот метод используется в связке с методом Бинарный патч.
- Подмена официального сайта программ и/или соответствующее изменение настроек с целью обойти проверку ключа, если она была вынесена разработчиками на какой-либо интернет-ресурс (в абсолютном большинстве случаев — для предотвращения взлома, реже — для учёта и ведения статистики, сбора сведений). Часто осуществляется на примитивном уровне путём модифицирования файла hosts и запуска различных эмуляторов, иногда — использованием различных программ (Денвер) или использованием реально существующего веб-ресурса.
- Запрет доступа программы к интернету (жарг. заофлайнивание) заключается в комплексе действий, направленных на осуществление принудительного запрета доступа программы к интернету. Выполняется в тех случаях, когда программа требует активации лицензионного ключа через интернет (как правило, через официальный сайт разработчика), либо в случаях, когда программа связывается с сервером разработчика для обмена данными или обновления. Как правило, модифицируется локальный DNS-файл компьютера (/etc/hosts или его аналог), чтобы «обнулить» доступ к конкретному серверу разработчика или устанавливается специальная утилита, которая блокирует доступ программы в интернет (более громоздкое решение). Более радикальный способ — физическое отключение от интернета. Это действие обычно производится после введения ключа, сгенерированного кейгеном.
- Скачивание из интернета или с другого компьютера уже взломанной или купленной игры. Перекачивание лицензионной копии игры с компьютера друга взломом не является, но суть та же.
При взломе сложных защит, а также при необходимости достичь максимального эффекта, применяется комбинация вышеперечисленных способов. В редких случаях, это происходит при недостаточной квалифицированности взломщика.
Этот список не является исчерпывающим, а лишь обозначает наиболее распространённые способы взлома.
Вид взлома, в большинстве случаев, обусловлен видом защиты. Для одних защит можно использовать различные виды взлома, для других — способ может быть единственным.
Принципы взлома
[править | править код]Как правило, в основе работы крэкера лежит исследование ассемблерного кода, полученного из машинных инструкций с помощью специально предназначенной для этого программы-дизассемблера. В зависимости от выбранного способа взлома результат исследования может использоваться, например, для построения генератора ключей или для внесения необходимых изменений в исполняемый файл. Последний способ в большинстве случаев наиболее лёгкий, так как не требует изучения алгоритма проверки правильности ключа: зачастую взлом сводится к поиску проверки нескольких условий (наподобие «Введённое Число равно Эталонному Числу?») и замене такого условия на безусловный переход (goto, jmp), или, реже, на противоположное (то есть для данного примера на «Введённое Число не равно Эталонному Числу?»).
Кроме того, внесение изменений в исполняемый файл (патч) может производиться для отключения нежелательных действий программы (например, напоминание о необходимости регистрации), сокращения её функциональности. В этих случаях соответствующие команды процессору часто заменяются на байты со значением 90h (в шестнадцатеричной системе счисления), что соответствует ассемблерной команде nop (no operation), то есть «пустой команде», не выполняющей никаких действий. Если таких команд много, то применяется безусловный переход (перепрыгивание через ненужный код). Возможно также расширение возможностей программы написанием дополнительного кода, но, как правило, это слишком трудоёмкий процесс, не оправдывающий временных затрат.
Патч возможен, как правило, когда исполняемый файл программы не защищён специальными «пакерами» и «протекторами» — программами, скрывающими реальный код исполняемого файла. Для последнего типа программ зачастую используется самая интеллектуальная часть обратной разработки (англ. reverse engineering) — исследование кода программы при помощи отладчика и создание генератора ключей, но возможны и другие решения, например, создание загрузчика.
Правовые аспекты деятельности
[править | править код]Факт взлома очень трудно доказать: пользовательское соглашение, как правило, запрещает декомпиляцию программы, а закон — создание и распространение результата такой работы. Однако декомпилированный текст продукта по окончании работы легко уничтожить, а результат работы — распространить по защищённым каналам и выложить на сервере, хостящемся в стране с более либеральными законами. В распространении крэкерам помогают и файлообменные сети, поскольку в большинстве из них крайне трудно найти оригинальный источник файла, а уничтожить все его копии и вовсе невозможно.
См. также
[править | править код]Примечания
[править | править код]- ↑ Хайдарова В. Ф. Краткий словарь интернет-языка / под ред. С. Г. Шулежковой. — 2-е изд. — М.: Флинта, 2013. — С. 132—133. — 326 с. — 1000 экз. — ISBN 978-5-9765-1187-3.
- ↑ Brian Warner. Что такое крэк? // Компьютерная газета : газета. — Минск, 2009. — 11 июля. Архивировано 24 июня 2021 года.