Автор работы: Пользователь скрыл имя, 30 Ноября 2013 в 13:53, статья
Эта статья посвящена достаточно актуальной в настоящее время тематике - защите программ от взлома и нелегального копирования. Этой теме посвящено много статей, одна из наиболее интересных (из тех, которые попались мне) - статья "Защита shareware-программ" Владимира Каталова в Компьютерре Online#240. Он привел ряд советов по написанию shareware программ и я не хочу повторяться - сходите, почитайте.
Советы по формированию регистрационных кодов
Формирование кодов может вестись по следующим основным направлениям:
Жестко фиксированные коды, прошитые в программу. Их обычно немного и их огласка сводит защиту к нулю.
Некий алгоритм проверки кода. Немного лучше первого, но лишь немного. Возьмите за пример код Windows - его знает любой пользователь
Алгоритм проверки кода, использующий имя пользователя. Очевидно, что для каждого имени будет уникальный номер (или номера - их может быть несколько, в зависимости от алгоритма). Это уже лучше, но нелегальное распространение держится на эгоизме зарегистрированных пользователей - ничто не мешает им предать имя/пароль огласке, но тогда хотя бы можно вычислить виновника и заблокировать его код
Алгоритм проверки кода, использующий имя пользователя и некоторые уникальные или динамически изменяющиеся параметры, например информацию о компьютере. Это надежно, дает привязку к компьютеру, но в наш век постоянных апгрейдов очень неудобен.
On-Line регистрация. Состоит
в том, что программа в On-Line связывается
с сайтом разработчиков (или компании,
осуществляющей продужу софта) и передает
туда ревизиты пользователя. В ответ программе
передается регистрационная информация.
Этот метод может и хорош для ряда программ,
но на мой взгляд не выдерживает никакой
критики по двум соображениям:
1. Никто не может гарантировать, что конкретно
передаст программа в Инет. А передать
она может все, что угодно - параметры компьютера,
пароли, любые данные и т.п.
2. Конкретный пользователь ножет не иметь
доступа к Инет. Это особенно важно для
программ, работа которых не связана напрямую
с Сетью. И зарегистрировать такую программу
его практически никто к себе на компьютер
не пустит (из соображений п.п. 1)
Рекомендовать тут что-либо бесполезно, но я например использую разновидности метода 3.
Защита от компьютерного пиратства. Русский стиль.
По данным BSA (Business Software Alliance), доля нелегальных копий программных продуктов в России составляет 95 % -- это дает основание относиться к компьютерному пиратству как к национальному бедствию.
С ростом объемов продаж отечественного софта стали расти и потери российских производителей ПО от пиратства. Соответственно, все более высокие требования стали предъявляться ими к качеству систем защиты от нелегального копирования.
Время тоже диктует свои коррективы. В середине 90-х годов программная защита (то есть защита, построенная на основе создания некопируемых дискет, “привязки” ПО к уникальным характеристикам компьютера и т.п.) начала сдавать свои позиции. Она морально устарела и уже в принципе не могла надежно защищать новейшие программные продукты. Вместо нее на российский рынок начала выходить программно-аппаратная защита -- электронные ключи.
Электронные ключи -- это небольшие электронные устройства, подсоединяемые, как правило, к параллельному порту ПК и служащие для защиты программ от их нелегального использования. За несколько лет своего существования эти устройства прошли большой путь развития. Современные электронные ключи -- это устройства с энергонезависимой памятью (то есть памятью, не требующей для хранения записанных в нее данных никаких источников энергии), предназначенной для хранения данных по защите, “прозрачные” для принтеров и других периферийных устройств. Наиболее “продвинутые” модели имеют множество специальных свойств, повышающих уровень их надежности, совместимости, стойкости ко взлому.
Сегодня электронные ключи -- абсолютные лидеры отечественного рынка защиты. Универсальность применения, удобства для пользователей защищенных программ, высокий уровень совместимости с новейшим программным и аппаратным обеспечением -- все это стало гарантом их постоянно растущей популярности и обеспечило им прекрасные перспективы.
Разумеется, электронные ключи имеют и качественно более высокий уровень защищенности от взлома, чем программная защита. Однако не следует думать, что они являются некоей панацеей, обеспечивающей абсолютно “неснимаемую” защиту. Отечественные хакеры пребывают в постоянном поиске новых методов взлома; и в плане взлома программно-аппаратной защиты ими уже накоплен богатый опыт. Сегодня в первую очередь страдают морально устаревшие электронные ключи (а такие, учитывая скорость развития технологий, уже существуют), либо те, разработчики которых не учитывают особенностей хакерского движения в России. В результате среди имеющихся сегодня на рынке систем программно-аппаратной защиты есть и такие, взломать которые русским хакерам не сложнее, чем простенькую программную защиту.
Так с какими же методами взлома защиты приходится сталкиваться сегодня электронным ключам? И какие свойства они должны иметь, чтобы успешно противостоять этим методам? Об этом мы сейчас и поговорим.
Как сегодня “ломают” защиту
Постоянно растущая популярность электронных ключей заставляет хакеров изобретать все более эффективные методы взлома программно-аппаратной защиты. На сегодняшний день в их арсенале множество методов, решающих задачу взлома с той или иной эффективностью. Часть этих методов воздействуют на аппаратную часть защиты (то есть на сам электронный ключ), часть -- на программную (то есть на программные модули защиты, различными путями “вживленные” в защищенную программу). Нередко комбинируют несколько различных методов, чтобы добиться лучшего эффекта.
Рассмотрим наиболее популярные из современных методов взлома программно-аппаратной защиты.
Создание аппаратной копии электронного ключа
Воспользовавшись специальными программными или аппаратными средствами, хакеры считывают содержимое микросхемы памяти электронного ключа и переносят эту информацию в аналогичные микросхемы памяти других электронных ключей. Таким образом создаются аппаратные копии электронного ключа, пригодные для работы с защищенной программой. Часто такая работа выполняется хакерами как заказная -- запись ключевой информации производится в электронные ключи самого заказчика нелегальных копий программы. Иногда в качестве “вторичных носителей” ключевой информации используются электронные ключи, собранные самими хакерами в кустарных условиях, что называется, “на коленке”.
Создание аппаратных копий ключа применимо только в тех случаях, когда хакеру известен конкретный тип микросхемы памяти, когда хакер имеет специальное аппаратное устройство (программатор) для записи данных в микросхему памяти ключа-копии и, самое главное,-- при условии, что память электронного ключа никак не защищена от ее нелегального считывания. Именно это третье условие и стало “ахиллесовой пятой” некоторых марок электронных ключей, именно слабость (а то и полное отсутствие) защиты данных в памяти ряда ключей обусловило распространение этого метода взлома.
Методу присущи несколько недостатков. Главный из них в том, что, даже получив нелегальную копию программы, не удастся решить задачу ее незаконного распространения -- ведь копия так и осталась защищенной, просто теперь она “привязана” к “левому” электронному ключу. Кроме этого, достаточно велика стоимость такого копирования -- зачастую дешевле просто купить легальную копию продукта. Поэтому такой метод не получил столь широкого распространения, как следующий.
Создание эмулятора электронного ключа
Хакер, изучив внутреннюю логику работы электронного ключа, создает некий программный модуль -- резидент, DLL, драйвер и т.п., -- который в той или иной степени эмулирует (то есть воспроизводит) работу электронного ключа. Качественно написанный эмулятор способен воспроизвести работу ключа во всех тонкостях, включая особенности протокола обмена между защищенной программой и ключом, генерацию им верных ответов для “всех случаев жизни” и т.д. В результате защищенная программа будет спокойно работать, даже не подозревая, что имеет дело отнюдь не с электронным ключом, а с программным “суррогатом-заменителем”.
По степени универсальности эмуляторы можно разделить на универсальные (эмулируют работу любого электронного ключа определенной марки) и неуниверсальные или crack'и (эмулируют работу всех ключей конкретного пользователя защиты, ключей, поставляемых с определенным программным продуктом или с определенной его версией, либо одного конкретного ключа).
По принципу организации эмуляторы можно разделить на эмуляторы структуры ключа (как правило, это универсальные эмуляторы ключей без аппаратных алгоритмов либо ключей с примитивно простыми аппаратными алгоритмами) и эмуляторы ответов электронных ключей. При этом первые воспроизводят структуру электронного ключа во всех ее тонкостях, что и обусловливает их универсальность, а вторые используют специально созданную таблицу верных ответов ключа.
Но в любом случае эмуляторы должны верно воспроизводить не только посылаемые ключом данные, но и протокол обмена с ним (в противном случае защищенная программа не сможет “понять” переданных эмулятором данных).
Эмуляторы электронных ключей -- это мощный и эффективный метод взлома программно-аппаратной защиты, получивший достаточно широкое распространение. Разработчики электронных ключей используют следующие методы борьбы с эмуляцией:
“Плавающий” протокол обмена с электронным ключом. Данные, передаваемые между электронным ключом и программой, искусственно “зашумляются”, причем с течением времени характер передаваемого вместе с данными “шума” меняется хаотическим образом. Так как эмулятор обязан воспроизводить не только поступающие от ключа данные, но и все особенности протокола обмена с ним, “зашумление” протокола обмена сильно усложняет (и удорожает) задачу написания эмулятора, вынуждая его быть слишком сложным. В настоящее время практически все разработчики электронных ключей применяют “плавающие” протоколы обмена.
Использование для защиты аппаратных алгоритмов электронного ключа. Оно позволяет существенно усложнить логику работы ключа -- на запрос программы он будет возвращать нечто гораздо более сложное, чем просто “да / нет”. Соответственно, для того чтобы написать универсальный эмулятор такого ключа, нужно как минимум составить список верных ответов на все возможные вопросы, что может быть чрезвычайно трудоемко и дорого.
Сегодня электронные ключи многих марок содержат аппаратные алгоритмы, отличающиеся степенью сложности и свойствами. Однако, к сожалению, отнюдь не всякий аппаратный алгоритм способен надежно защитить электронный ключ от эмуляции. Для этого аппаратный алгоритм должен быть сложным, чтобы хакер не смог его вычислить эмпирическим путем; он должен уметь обрабатывать большой объем информации за один сеанс (например, если алгоритм может одновременно преобразовывать только 2 байта данных, это означает, что количество всех возможных вопросов -- а значит и ответов -- ключа равно... 65536! Для составления полной таблицы ответов такого ключа хакеру потребуется меньше часа); электронные ключи у разных пользователей системы защиты должны содержать разные аппаратные алгоритмы, чтобы хакер не смог написать универсальный эмулятор для всех электронных ключей этой марки.
Отделение модуля автоматической защиты
Метод автоматической защиты готовых программ (его еще называют методом envelope или “конвертом” защиты) доступен практически во всех системах программно-аппаратной защиты. Его преимущества очевидны: при помощи специальной утилиты в считанные секунды можно “надеть” защиту на любую готовую программу. Экономится масса времени, которого всегда не хватает, не требуется никаких навыков в области построения защиты, а порой этот метод вообще является единственно возможным (например, если по каким-либо причинам Вам недоступны исходные тексты защищаемых программ). Однако у этого метода есть своя “ахиллесова пята”. Так как защита устанавливается на готовую программу, она не может образовать с программной неразрывного целого. Модуль автоматической защиты как бы “приклеивается” к программе, а это значит, что у хакера есть теоретическая возможность отделить, “отклеить” его -- причем без ущерба для самой программы. Российскими хакерами накоплен в этом плане огромный опыт, есть даже специальные утилиты автоматического взлома программ, защищенных таким методом.
Абсолютно надежного способа противодействия взлому автоматической защиты не существует, и ее взлом -- это лишь вопрос времени. А время взлома такой защиты, в свою очередь, зависит от ее качества. В наибольшей степени страдает автоматическая защита тех систем, разработчики которых не учли специфических приемов взлома ее местными хакерами. Но существует и весьма надежная автоматическая защита, которая не поддается хакерским утилитам автоматического взлома и вынуждает хакеров выполнять свою работу вручную. Соответственно возрастает стоимость взлома, и в ряде случаев оказывается более выгодным приобрести легальную копию программы.
Другой действенный метод спасти защиту от быстрого взлома -- это комбинирование автоматической защиты с защитой при помощи функций API. В этом случае хакер, даже “отсоединив” модуль автоматической защиты, не получит незащищенной программы -- во многих местах ее тела останутся нетронутыми вызовы функций API защиты.
Удаление вызовов функций API
Помимо автоматической защиты, в распоряжение пользователя предоставлен набор функций API защиты. Как правило, API существуют для всех популярных языков программирования и содержат самые разнообразные функции. Пользователь защиты должен вписать вызовы нужных функций в исходный текст защищаемой программы, скомпилировать и слинковать его с соответствующим объектным модулем API. В результате защита будет внедрена глубоко в тело программы, и при правильной организации логики своей работы будет составлять с программой неразрывное целое. Взломать защиту такого типа хакеру гораздо сложнее, чем автоматическую -- хотя бы потому, что невозможно создать универсальное средство автоматического взлома. Поэтому на взлом программ, защищенных при помощи API, хакеры идут лишь на очень выгодных для себя условиях. При помощи дисассемблеров и отладчиков они изучают логику работы программы, находят места, в которых происходят вызовы функций API (либо точки входа в сами эти функции -- смотря что оказывается проще), и нужным образом исправляют программный код. Для борьбы с этим методом взлома есть несколько испытанных способов:
Информация о работе Защита программ от взлома и нелегального копирования