Абсолютно "неснимаемой" автоматической защиты не существует и не может существовать. Это, к сожалению, аксиома. Поэтому задача разработчиков такой защиты - сделать сам процесс ее взлома как можно более сложным, длительным и "мучительным" для взломщиков. В идеале автоматическая защита должна быть надежной настолько, чтобы ее взлом был коммерчески невыгодным, чтобы дешевле было купить лицензионную копию программы, чем пытаться взломать ее защиту. Автоматическая защита систем, основанных на Stealth-ключах (будем называть ее автоматической защитой Stealth), имеет следующие свойства.


Противодействие средствам автоматического взлома

 

Автоматическая защита Stealth надежно защищена от утилит автоматического взлома. Разработчики защиты изучили принципы работы подобных утилит и блокировали возможные пути их атак. Таким образом, для того чтобы взломать автоматическую защиту Stealth, хакерам придется действовать вручную, что уже само по себе резко увеличит стоимость взлома.


Защита от дисассемблеров и отладчиков

 

Излюбленные средства, которые применяются хакерами для изучения логики работы защиты,- это, конечно, отладчики и дисассемблеры. Существенно облегчая хакерам работу по взлому защиты, они являются в их руках грозным оружием. Поэтому от того, насколько хорошо та или иная автоматическая защита может противостоять натиску этих средств, и зависит в конечном итоге "живучесть" защиты. Автоматическая защита Stealth пользуется множеством приемов затруднения работы отладчиков. Блокировка многих стандартных отладочных средств, динамическое кодирование тела модуля защиты, технология "безумного кода" (внедрение массивов программного кода, состоящего из бессмысленных, на первый взгляд, команд), подсчет в фоновом режиме контрольных сумм участков программного кода и многоедругое существенно осложняет жизнь как самим отладчикам, так и людям, их использующим. С дисассемблерами у автоматической защиты Stealth и вообще "разговор короткий": используя несколько оригинальных приемов, она заставляет их ошибаться и генерировать вместо команд исходного текста программы всяческий мусор. Таким образом,основные отладочные средства хакеров получают достаточно серьезный отпор. Конечно, говорить о автоматической защите Stealth как об абсолютно "непроходимой" не приходится, ибо невозможно учесть ни особенностей работы всех отладчиков, ни степени мастерства всех хакеров. Но одно можно сказать с уверенностью: автоматическая защита Stealth способна сильно увеличить время взлома всего комплекса, что ведет и к увеличению стоимости работы. И в любом случае она способна надежно защитить программу от непрофессионалов.


Кодирование тела программы

 

Автоматическая защита Stealth не ограничивается защитой самой себя. Кодирование тела защищаемой программы позволяет также надежно укрыть от посторонних глаз и логику работы самой программы. Кроме того, имея дело с кодированной программой, хакер будет вынужден решать две задачи: ему нужно будет не только отделить от программы модуль защиты, но и раскодировать саму программу. А это, как вы сами понимаете, приведет к еще большему удорожанию взлома. А если у хакера нет электронного ключа, декодирование программного кода и вовсе превращается для него в практически нерешаемую задачу.


Кодирование программных оверлеев

 

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


Использование ответов аппаратного алгоритма

 

Для достижения максимального уровня защищенности автоматическая защита может использовать ответы аппаратного алгоритма Stealth-ключа. Ответы генерирует аппаратный алгоритм со специальным сочетанием свойств, который создается в Stealth-ключе на этапе его предпродажной подготовки. По умолчанию аппаратный алгоритм уникален для каждого пользователя защиты. Однако вы можете изменить определитель алгоритма - и тогда он станет уникальным, может быть, даже для каждого вашего электронного ключа. И автоматическая защита тоже будет работать уникальным образом! Работа алгоритма является еще одной (причем, весьма серьезной!) преградой на пути взлома защиты, доставляя хакеру еще одну головную боль и еще сильнее удорожая стоимость его работы. Автоматическая защита Stealth это, конечно, не панацея. Однако в ней используется весь спектр возможных приемов борьбы со взломом, поэтому можно утверждать, что автоматическая защита Stealth обеспечивает уровень защищенности, являющийся "потолком" для автоматической защиты как таковой. Те, кто стремится достичь действительно высокого уровня защищенности, кто хочет воспользоваться всеми возможностями Stealth-ключей, должны обязательно скомбинировать автоматическую защиту с защитой при помощи функций API.


Защита при помощи функций API

 

В системе защиты на основе Stealth-ключей существует целый ряд специальных функций API, при помощи которых пользователь может выполнять с ключом различные операции:

  • поиск нужного электронного ключа,
  • чтение/запись его памяти,
  • запуск аппаратных алгоритмов ключа и
  • преобразование с их помощью данных программы и т. п.

Для того, чтобы воспользоваться защитой при помощи функций API, требуется вставить вызовы нужных функций в исходные тексты программы и слинковать их с использованием специальных объектных модулей. В результате защита окажется глубоко внедренной в само тело программы. Для взлома подобной защиты хакеры используют несколько приемов: поиск и удаление из тела программы самих команд обращения к функциям API и/или команд, порождающих реакцию программы на неверный код возврата, либо создание специальных подпрограмм "заглушек", вживляемых в тело программы, которые подставляют ей верные коды возврата функций API.


В результате программа, сама по себе, оказывается... незащищенной - для работы ей уже не нужно будет никаких эмуляторов, драйверов и т. п. Для осложнения процесса взлома функции API пользуются целым рядом приемов. Наиболее интересны следующие из них:

 

Использование множества точек входа в API

 

Если выполнением всех операций с ключом занимается одна и та же функция API (в этом случае номер конкретной операции обычно передается ей в качестве параметра), хакеру гораздо проще будет нейтрализовать такую защиту. Для этого ему нужно будет один раз дойти в отладчике до точки входа в эту функцию API, нужным образом скорректировать ее код - и все функции API будут нейтрализованы. В API Stealth каждая функция имеет свою точку входа. Следовательно, если защищенная программа использует несколько функций API, хакер будет вынужден искать точки входа во все эти функции, что значительно усложнит взлом защиты.


3ашумление кода функций API

 

Для того, чтобы скорректировать код функции API, хакер должен сначала разобраться в логике ее работы. API Stealth делает эту работу весьма нетривиальной, благодаря использованию оригинальной технологии "безумного кода". На этапе создания функций API их команды перемешиваются с ничего не значащими командами (в основном, командами безусловного перехода), таким образом, код функции API сильно "зашумляется". Разобраться в логике работы такого кода, найти место, в котором происходит генерация выходных параметров функции, будет очень и очень непросто. Функции API и автоматическая защита используют ряд достаточно эффективных приемов борьбы со взломом. Не забывайте, что любая система защиты - это только инструмент. Свой опыт и фантазию нужно направить на конструирование оригинальной, нестандартной логики работы защиты, с тем, чтобы она составляла с защищенной программой по-настоящему неразрывное целое.


Стойкость защиты

 

Системы защиты на основе Stealth-ключей дают потенциальную возможность создания практически неснимаемой защиты.

 

Однако реализовать этот потенциал - уже задача программистов, "надевающих" защиту на программу. Но как этого добиться человеку, не искушенному в тонкостях работы защиты? На самом деле есть множество достаточно простых приемов и рекомендаций, способных превратить защиту Stealth в "неприступную крепость". Наиболее интересные из них мы сейчас рассмотрим.

 

Обязательно комбинируйте защиту при помощи функций API с автоматической защитой готовых программ

 

Тогда на пути хакера встанут все приемы борьбы со взломом, имеющиеся в арсеналах как автоматической защиты, так и функций API.

 

Кодируйте автоматической защитой тело программы и ее внутренние оверлеи

 

Кодирование тела программы позволяет скрыть не только логику работы самой программы, но и места вызовов функций API и логику работы с этими функциями.

 

Используйте для защиты несколько различных функций API

 

Это заставит хакера искать точки входа во все эти функции, что может занять немало времени.

 

Вызывайте функции API из многих мест программы и в разное время

 

Это заставит хакера искать эти вызовы по всей защищенной программе. Очень хорошим приемом являются "вероятностные" вызовы, когда функция API вызывается не всегда, а с какой-то вероятностью. В разных местах программы можно использовать различные вероятности вызовов. В результате хакер может попросту не найти те вызовы, которые происходят с малой вероятностью - и тогда якобы "взломанная" программа рано или поздно преподнесет сюрприз ее пользователям.

 

Усложните логику обработки кодов возврата функций API

 

Если вы будете проверять код возврата функции API простым сравнением, хакеру не составит труда уничтожить это сравнение прямо в теле программы - и таким образом снять защиту. Разработайте более сложную логику. Например, используйте коды возврата в качестве индексов каких-то массивов данных, запускайте с их помощью генераторы псевдослучайных чисел, используйте в алгоритмах математических вычислений, реализованных в вашей программе и т. п. Таким образом, точка, в которой защищенная программа принимает решение о своей дальнейшей работе, в чистом виде будет отсутствовать. Хакеру придется разбираться не только в логике работы защиты, но и в хитросплетениях процессов, происходящих в самой вашей программе. И защита станет полноправной частью вашей программы, без которой станут неверными ее вычисления, будут использоваться не те данные и т. д.

 

Откладывайте момент реакции программы на коды возврата функций API

 

Хорошо зарекомендовал себя прием, когда программа принимает решение о своей дальнейшей работе не сразу по получении кодов возврата функции API, a значительно позже. Например, функция API вызывается при запуске программы, а анализ возвращенных ею значений производится при выполнении пользователем каких-либо действий. В таком случае хакеру будет сложно проследить причинно-следственную связь поведения программы. Кроме того, этот прием заставит хакера исследовать в отладчике слишком большие фрагменты программного кода.

 

Подсчитывайте контрольные суммы важных участков кода программы

 

Это мощное средство защиты от модификации хакером кода вашей программы. Предварительно вы подсчитываете контрольную сумму участков кода, в которых производятся вызовы функций API Stealth, анализируются выходные данные функций и принимаются решения о дальнейшей работе программы. В процессе работы программы вы еще раз производите обсчет этих участков - и получаете достоверную информацию о том, были ли они модифицированы. Производить подсчет контрольных сумм лучше в фоновом режиме (в 32-битных программах Windows это можно делать в отдельном процессе), причем делать это следует значительно раньше или значительно позже того, как управление попадет в контролируемый участок кода. Один и тот же участок целесообразно контролировать из нескольких мест программы. А реакция на факт модификации программного кода должна быть примерно такой же, как и на ошибку при вызове функции API. В результате хакер будет вынужден дополнительно искать по всей программе места, в которых вы проверяете контрольные суммы всех важных участков кода. Для получения контрольной суммы можно воспользоваться специальной функцией API Stealth.

 

Задействуйте аппаратные алгоритмы

 

Это обязательное условие, если вы хотите сконструировать по-настоящему стойкую защиту! Правильное использование ответов аппаратных алгоритмов делает практически невозможным написание эмуляторов Stealth-ключей. Удаление из программы вызовов функций API также теряет смысл - ведь если аппаратный алгоритм не был запущен, то и важные для программы данные не были декодированы. А сделать это, кроме аппаратного алгоритма, некому.

 

Задавайте электронному ключу больше вопросов

 

Если для защиты используется преобразование только одного массива данных (т. е., если программа задает ключу один и тот же вопрос), есть вероятность, что хакер все же подсмотрит верный ответ ключа и создаст подпрограмму "заглушку",- которая вместо функции API "подсовывает" программе этот ответ. А так как в данном случае ключ может вернуть только один ответ, такая подпрограмма "заглушка" может свести на нет роль аппаратного алгоритма в защите программы. Чтобы избежать этого, нужно задавать аппаратному алгоритму большое количество разных вопросов. Создайте массив различных вопросов (т. е. блоков кодированных данных) и в разных местах программы декодируйте аппаратным алгоритмом разные кодированные блоки.

 

Выбирайте вопросы случайным образом

 

Очень хорошо было бы организовать процесс случайной выборки вопроса, тогда в одном и том же месте программы в разные моменты времени будут обрабатываться разные вопросы. Это сделает практически невозможным для хакера создание как подпрограммы "заглушки", так и эмулятора ключа.

 

Меняйте логику работы программы с модулями защиты

 

Очень полезно бывает время от времени менять логику работы программы с модулями защиты. Используйте новые приемы, подобные описанным здесь, по-иному комбинируйте их и т. п. - и тогда при выходе новой версии вашего продукта хакер будет вынужден начинать работу по ее исследованию, что называется, "с нуля". Этот прием может прекрасно сработать и совместно с описанным ранее.

 

Не храните коды доступа к ключу и ответы аппаратных алгоритмов в декодированном виде

 

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

 

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


del@tav.kharkov.ua

 

2004.04.07
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".