Автор работы: Пользователь скрыл имя, 30 Ноября 2013 в 13:53, статья
Эта статья посвящена достаточно актуальной в настоящее время тематике - защите программ от взлома и нелегального копирования. Этой теме посвящено много статей, одна из наиболее интересных (из тех, которые попались мне) - статья "Защита shareware-программ" Владимира Каталова в Компьютерре Online#240. Он привел ряд советов по написанию shareware программ и я не хочу повторяться - сходите, почитайте.
Комбинирование защиты при помощи функций API с автоматической. Хорошая автоматическая защита умеет защищать программу и от дисассемблера, и от отладчика. Следовательно, для того чтобы использовать свой инструментарий в полную силу, хакер будет вынужден сначала “снять” модуль автоматической защиты, что резко увеличит стоимость взлома. Кстати, именно поэтому все разработчики защиты рекомендуют комбинировать оба метода. Модуль автоматической защиты должен образовывать “внешний уровень обороны”, защищая программу от дилетантов и скрывая от любопытных глаз ядро защиты, реализованное функциями API.
Усложнение логики работы самих модулей защиты. Профессиональные системы защиты имеют в своем арсенале много внутренних методов борьбы с изучением логики их работы. Кодирование тела модулей автоматической защиты и библиотек API, “зашумление” фрагментов их кода, подсчет контрольных сумм важных участков кода -- эти и многие другие меры способны существенно усложнить процесс исследования хакером логики работы самих модулей защиты.
Разработка нетривиальной логики взаимодействия программы и защиты. Не приходится рассчитывать на приемлемый уровень защищенности программы, если информация, возвращаемая функциями API, используется программой для банального сравнения: “верно / неверно”. Есть множество эффективных приемов усложнения логики работы программы с модулями защиты. Откладывание реакции программы на информацию, полученную от ключа, использование ответных данных ключа в качестве индексов каких-либо массивов, подсчет контрольных сумм данных с использованием значений, полученных от ключа и т.д.-- это лишь наиболее простые из таких приемов. Воспользовавшись ими и им подобными, можно создать защищенную программу, разобраться в логике работы которой хакеру будет очень и очень сложно. В результате шансы удалить из программы все вызовы функций API без последствий для самой программы станут минимальными. “Осколки” защиты постоянно будут проявляться во взломанной программе, ограничивая ее возможности и нарушая нормальный ход ее работы. Такую программу можно рассматривать лишь как демонстрационную -- ведь пользователь не сможет использовать все ее возможности и рано или поздно будет вынужден приобрести легальную копию такой программы. Ниже мы еще рассмотрим некоторые методы усложнения логики взаимодействия программы и защиты.
Использование ответов аппаратных алгоритмов в работе программы. На этапе установки защиты важные для программы данные можно закодировать при помощи аппаратного алгоритма ключа и в таком виде записать их в тело программы. В процессе работы программа в нужные моменты будет запускать аппаратный алгоритм, декодирующий эти данные, а затем использовать их по назначению. При такой схеме организации защиты даже полное удаление из программы всех обращений к функциям API ничего не даст хакеру. Ведь защищенная программа содержит свои важные данные в кодированном виде, и раскодировать их, кроме электронного ключа, некому...
Итак, как видите, есть много способов взлома даже такой мощной защиты, как электронные ключи. А есть ли система защиты, способная по-настоящему хорошо противостоять всем этим методам? Несомненно, в природе не существует защиты, самим фактом своего существования сводящей на нет все усилия хакеров по ее взлому. Любая система защиты -- это не готовое решение, это инструмент. И воспользоваться этим инструментом можно по-разному. Можно подойти к вопросу формально, потратить на процесс защиты от силы 10-15 минут -- и результат будет неудовлетворительным, даже если используется самая лучшая защита в мире! А можно, изучив систему во всех тонкостях, реализовать все возможности защиты -- и, как говорится, результат превзойдет ожидания. Иными словами, очень многое зависит от квалификации и трудолюбия программиста, “надевающего” защиту на программу. И в этом нет ничего удивительного: ведь, к примеру, и с помощью одного и того же компилятора можно создать надежный, мощный, конкурентоспособный программный продукт, а можно и такой, который, кроме “зависания” операционной системы, не способен сделать ничего.
Но все же главное зависит от возможностей самого инструмента, самой системы защиты. Ведь чем этих возможностей больше, чем лучше они реализованы, тем быстрее и проще можно добиться хорошего результата.
Вот почему ключевым моментом, влияющим на всю последующую работу с защитой, является сам процесс выбора конкретной системы. При этом не стоит уповать только лишь на громкие имена и регалии ее разработчиков. Рынок защиты -- особенно в нашей стране -- меняется очень динамично, российские хакеры с поразительной легкостью свергают с пьедесталов, казалось бы, “непотопляемых” лидеров, и их место занимают другие. В такой ситуации человеку, не владеющему полной картиной происходящего на рынке, легко стать жертвой иллюзий и поставить на “героя вчерашних дней”. Поэтому проблему выбора защиты нужно решать комплексно, отталкиваясь от своих собственных нужд и от объективной технической информации о той или иной системе защиты. И, при прочих равных условиях, лучше отдать предпочтение той из них, которая имеет действительно серьезные характеристики.
Технология Stealth на страже ваших доходов
Накал борьбы между разработчиками защиты и хакерами непрерывно растет. Хакеры без устали создают все более совершенные технологии взлома защиты. Появление таких методов взлома, как эмуляторы электронных ключей, их аппаратное копирование и т.п., заставило задуматься о необходимости новых технологий защиты, направленных, прежде всего, на борьбу с новейшими методами взлома. Причем совершенно ясно, что это должны быть принципиально новые технологии -- дальнейшее совершенствование существующих в достаточной степени бессмысленно, так как является не более чем полумерой. Нужна защита, не имеющая прежних “родимых пятен”, в которой надежно закрыты все возможные узкие места.
На чем должны быть основаны новые технологии защиты, какой базовый элемент конструкции электронных ключей окажется в конечном итоге наиболее эффективным? Ответы на эти вопросы может дать только время. Однако уже сейчас в России появились электронные ключи нового поколения, отвечающие всем современным требованиям к стойкости и надежности защиты, прекрасно защищенные от всех современных методов их взлома. Технология, по которой они созданы, пока не имеет аналогов в мире. Однако, учитывая ее очевидные преимущества, весьма вероятно, что вскоре ее возьмут на вооружение и другие разработчики электронных ключей.
Речь идет о технологии Stealth, разработанной в России в конце 1996 года как ответ на новую фазу “холодной войны” между хакерами и разработчиками защиты. Электронные ключи, выполненные по этой технологии, обеспечивают такое качество и стойкость защиты, о котором раньше не приходилось и мечтать. Сейчас по этой технологии выпускаются 2 типа электронных ключей -- Guardant Stealth и Guardant Net.
Электронные ключи, выполненные по технологии Stealth, характеризуются несколькими общими признаками: они предназначены для работы в параллельном порту IBM-совместимого компьютера, выполнены на базе микроконтроллера, поддерживают генерацию аппаратных алгоритмов, имеют энергонезависимую память, полностью “прозрачны” для любых периферийных устройств.
Расскажем об основных свойствах электронных ключей, выполненных по этой технологии, для того чтобы Вы могли оценить ее важные преимущества.
Микропроцессорная технология. Конструктивно электронные ключи, выполненные по технологии Stealth (будем называть их Stealth-ключами), базируются на микроконтроллере. Этот факт открывает множество принципиально новых возможностей защиты, именно микроконтроллеру Stealth-ключи обязаны большинством своих характеристик, о которых мы сейчас расскажем.
Аппаратные алгоритмы Y=F(X). В отличие от своего предшественника, Stealth-ключи имеют аппаратные алгоритмы кодирования данных. Они обеспечивают высочайший уровень защищенности от взлома и снабжают Stealth-ключи принципиально новыми возможностями.
До 18 алгоритмов в одном Stealth-ключе. В одном Stealth-ключе можно организовать до 18 различных аппаратных алгоритмов. Для защиты можно одновременно пользоваться несколькими алгоритмами. Это еще больше усложнит процесс взлома защиты.
Высочайшая сложность аппаратных
алгоритмов. В формировании
каждого аппаратного алгоритма участвует
так называемый определитель --
Уникальность аппаратных алгоритмов каждого пользователя защиты. Каждый пользователь защиты на базе Stealth-ключей получает электронные ключи с несколькими созданными по умолчанию аппаратными алгоритмами, вид определителя которых уникален. Аппаратные алгоритмы в ключах, предназначенных для Вас, будут кодировать одни и те же данные по-иному, нежели у любого другого пользователя защиты Guardant. Это не позволит хакерам создать универсальный эмулятор Stealth-ключей.
Возможность создания собственных аппаратных алгоритмов. Вы можете не только пользоваться уже готовыми аппаратными алгоритмами, но и создавать свои собственные! Вы можете задавать свойства своего аппаратного алгоритма, конструировать его определитель и т.д. В результате электронный ключ станет кодировать данные по алгоритму, конкретный вид и свойства которого будут известны только Вам! Используя свои уникальные аппаратные алгоритмы, Вы полностью исключите вероятность создания универсальных эмуляторов для Ваших программных продуктов (или для разных версий одного вашего продукта).
Использование свойств аппаратного алгоритма. В создании аппаратного алгоритма Stealth-ключа участвует также и комбинация свойств алгоритма, которую Вы можете задать сами. Вы можете сделать алгоритмы одинаковыми у всех Ваших Stealth-ключей либо сделать их зависимыми от абсолютно уникальной величины -- ID Stealth-ключа. Можно создать алгоритм с ограничением числа его запусков для надежной защиты демо-версий Ваших программ. Комбинируя свойства Ваших аппаратных алгоритмов, можно не только повысить уровень стойкости защиты, но и решить вопросы маркетинга защищенных продуктов.
Кодирование до 255 байт данных одновременно. Любой из аппаратных алгоритмов Stealth-ключа за один сеанс способен обработать до 255 байт (или 2040 бит) данных. Причем на шифруемую последовательность длиной N байт накладывается нециклическая шифрующая последовательность длиной N байт. Возможность кодирования большого объема данных обеспечивает мощнейшую защиту от подбора хакерами верных ответов Stealth-ключа.
Наличие “быстрых” алгоритмов. Помимо аппаратных алгоритмов, Вы можете использовать для защиты алгоритм быстрого преобразования данных. Эта уникальная возможность позволит Вам производить кодирование сверхбольших объемов данных с такой высокой скоростью, что сам процесс будет совершенно незаметен для пользователя Вашего защищенного приложения.
Множественность кодов доступа к электронному ключу. Для выполнения любой операции со Stealth-ключом требуется задать код доступа к нему. Существуют Общий код и 3 Личных кода доступа. Не зная какого-либо из Личных кодов, невозможно выполнить с ключом и соответствующий этому коду набор операций! Использование нескольких кодов доступа значительно осложняет задачу получения любого нелегального доступа к Stealth-ключу.
Аппаратные запреты. Вы можете наложить аппаратные запреты на чтение или запись любой области доступной Вам памяти Ваших Stealth-ключей. И тогда никакими программными средствами хакерам не удастся ни считать, ни модифицировать данные, записанные в этой области памяти.
Кодирование данных в памяти Stealth-ключа. Все данные хранятся в памяти Stealth-ключей в кодированном виде, причем в каждом ключе кодирование производится уникальным образом. Самим же процессом кодирования / декодирования занят микроконтроллер ключа. Такой метод хранения данных делает бессмысленным их считывание -- даже при помощи дорогостоящих аппаратных устройств, защититься от которых невозможно. Ведь, например, для получения аппаратной копии ключа нужно эти данные записать в другой Stealth-ключ (так называемый ключ-копию). Но микроконтроллер любого другого Stealth-ключа будет неверно интерпретировать эти данные, так как будет декодировать их иначе.
Аппаратная блокировка отладчиков. Stealth-ключ имеет уникальную аппаратную защиту от изучения логики его работы под отладчиком. Если ключ обнаружит, что протокол обмена с ним выполняется в среде отладчика (а в этом случае все временные интервалы неизбежно увеличиваются), он попросту перестает отвечать на любые запросы. Таким образом, Stealth-ключ сразу же выбивает из-под ног хакера привычную ему почву, заставляя использовать какие-то нестандартные и неудобные методы его изучения.
Особенности протокола обмена со Stealth-ключом
Протокол обмена со Stealth-ключом:
“Плавающий”. Вместе с реальными данными между защищенной программой и ключом передается специально генерируемый “мусор”-- ничего не значащие данные.
Кодированный. Все данные, курсирующие между программой и электронным ключом, непрерывно кодируются.
Эти два свойства протокола помогают обеспечить надежную защиту от создания эмуляторов Stealth-ключей.
Самонастраивающийся. В процессе работы происходит оптимальная настройка параметров протокола на особенности аппаратного и программного окружения.
С автоматической верификацией. Любая операция записи в память Stealth-ключа сопровождается автоматической операцией верификации -- записанные данные обязательно проверяются на адекватность.
С автоповторами. Если из-за помех, вносимых другими устройствами, при обмене с ключом возникает сбой, то производятся автоматические повторы выполнения операции.
Эти свойства значительно повышают надежность обмена со Stealth-ключом и обеспечивают ему высокий уровень совместимости с аппаратным и программным обеспечением.
Энергосбережение и полная “прозрачность” Stealth-ключа
Информация о работе Защита программ от взлома и нелегального копирования