Автор работы: Пользователь скрыл имя, 03 Апреля 2011 в 00:55, курсовая работа
В эпиграф к статье вынесена выдержка из закона об авторском праве и смежных правах от 9 июля 1993 года. В законе есть достаточное количество статей стоящих на страже авторства на программное обеспечение или на базы данных, вот только нарушаются они сплошь и рядом как в России, так и за ее пределами: процветает нелегальное копирование продукции, взлом программного обеспечения и откровенное воровство баз данных.
TAGES Thomson & MPO Анализ
физических характеристик CD. Без
установки меток НЕТ НЕТ
*Под термином
"кряк" здесь понимается внешняя
программа, способная
**Данный вид
программ эмулирует лазерные
метки. При данном подходе в
код вскрываемой программы не
вносится изменений
***Наиболее распространенный
способ копирования, смысл
****справедливости
ради стоит отметить, что прецедент
вскрытия есть, но стал он возможен
только благодаря тому, что пираты
получили доступ к незащищенному коду
приложения, после чего был сделан кряк.
Краткий справочник по методам взлома и способам защиты от них
(1) Взлом копированием и эмулированием
Побитовое копирование
Суть атаки
заключается в том, что пользователь
(не всегда злоумышленник) пытается скопировать
имеющийся у него диск с целью создания
копии (для личного использования или
для тиража).
Для осуществления
подобной атаки могут использоваться
различные программы, зачастую входящие
в поставку устройств CD-R/RW. Это и официальный
Easy CD Creator, и полуофициальные (полухакерские)
CloneCD и BlindRead…
Защита должна
уметь противодействовать данному
виду взлома, так как с него обычно
и начинается взлом, поскольку копировщиков
способных скопировать диски
с примитивной защитой великое множество.
Способы обороны:
существуют два способа противодействия
взлому. Первый заключается в том,
что на диск записывается определенная
метка, которая не копируется обычными
средствами (например, создается нестабильный
сегмент, который не читается носителем,
а раз не читается, то и скопированным
быть также не может). К сожалению, данный
способ не всегда устойчив, поскольку
уже есть программы "продвинутого"
копирования (те же CloneCD и BlindRead), которые
способны пропускать подобные места (замещать
нестабильные области произвольными данными)
и проводить копирование до конца. Второй
способ основывается на том, что ничего
никуда записывать не надо, а надо лишь
определенным образом запоминать физические
характеристики диска, которые просто
невозможно воспроизвести любым копированием,
точнее диск сам по себе копируется, но
уже с другой физической структурой. Соответственно,
пользователь может спокойно клонировать
диски, но ключевым будет тот, который
был официально куплен.
Эмулирование
Данный подход
позволяет формировать
Противодействием
может служить работа с устройствами
записи\чтения на низком уровне, когда
невозможно перехватить вызовы к
оборудованию. Здесь нужно еще
внести одно пояснение: для того, чтобы
защищенному приложению обратиться к
CD, и проверить его на наличие не копируемой
метки, необходимо воспользоваться одной
из функций чтения\записи, которые предоставляет
сама Windows. Хакерами уже наработан ряд
механизмов, позволяющих перехватывать
стандартные обращения к функциям Windows,
а раз можно перехватить сообщение, значит
целиком можно имитировать чтение, целиком
заменяя стандартные вызовы на собственные.
Как говорилось выше, противодействием
данному способу взлома может быть только
обращение к накопителю не через стандартные
вызовы.
(2) Взлом программного модуля
Это следующий
уровень взлома. В том случае если
не удалось скопировать
Взлом программ
осуществляется двумя основными
способами. Это отладка и
Отладка - это
специальный режим, создаваемый специальным
приложением - отладчиком, который позволяет
по шагам исполнять любое приложение,
передавая ему всю среду и делая все так,
как будто приложение работает только
с системой, а сам отладчик невидим. Механизмами
отладки пользуются все, а не только хакеры,
поскольку это единственный способ для
разработчика узнать, почему его детище
работает неправильно. Естественно, что
любую благую идею можно использовать
и во зло. Чем и пользуются хакеры, анализируя
код приложения в поиске модуля защиты.
Это так называемый,
пошаговый режим исполнения, или, иными
словами интерактивный. А есть еще и второй
- дизассемблирование - это способ преобразования
исполняемых модулей в язык программирования,
понятный человеку - Ассемблер. В этом
случае хакер получает распечатку того,
что делает приложение. Правда распечатка
может быть очень и очень длинной, но никто
и не говорил, что защиты снимать легко.
Хакеры активно
пользуются обоими механизмами взлома,
поскольку иногда приложение проще
пройти по шагам, а иногда проще получить
листинг и проанализировать его.
Давайте теперь
рассмотрим основные методы взлома и
противодействия ему
Отладчики
Отладчиков существует
великое множество: от отладчиков, являющихся
частью среды разработки, до сторонних
эмулирующих отладчиков, которые полностью
"погружают" отлаживаемое приложение
в аналитическую среду, давая разработчику
(или хакеру) полную статистику о том что
и как делает приложение. С другой же стороны,
подобный отладчик настолько четко имитирует
среду, что приложение, исполняясь под
ним, считает, что работает с системой
напрямую (типичный пример подобного отладчика
- SoftIce).
Противодействие
Способов противодействия
существует великое множество. Это
именно способы противодействия
поскольку основная их задача сделать
работу отладчика либо совсем невозможной,
либо максимально трудоемкой. Опишем основные
способы противодействия:
Замусоривание
кода программы. Способ, при котором
в программу вносятся специальные
функции и вызовы, которые выполняют
сложные действия, обращаются к накопителям,
но по факту ничего не делают. Типичный
способ обмана. Хакера нужно отвлечь, создав
ответвление, которое и будет привлекать
внимание сложными вызовами и содержать
в себе сложные и большие вычисления. Хакер
рано или поздно поймет, что его обманывают,
но время будет потеряно.
Использование
мультипоточности. Тоже эффективный
способ защиты, использующий возможности
Windows по параллельному исполнению функций.
Любое приложение может идти как
линейно, то есть инструкция за инструкцией,
и легко читаться отладчиком, а может
разбивать на несколько потоков, исполняемых
одновременно, естественно, в этом случае,
нет никакого разговора о линейности кода,
а раз нет линейности, то анализ здесь
трудноосуществим. Как правило, создание
5-6 и более потоков существенно усложняет
жизнь хакеру. А если потоки еще и шифруются,
то хакер надолго завязнет, пытаясь вскрыть
приложение.
Подавление изменения
операционной среды - программа сама
несколько раз перенастраивает
среду окружения, либо вообще отказывается
работать в измененной среде. Не все отладчики
способны на 100% имитировать среду системы,
и если "подопытное" приложение будет
менять настройки среды, то рано или поздно
"неправильный" отладчик может дать
сбой
Противодействие
постановке контрольных точек. Специальный
механизм, поддерживаемы микропроцессором,
при помощи которого, можно исследовать
не всь программу, начиная с начал, а, например,
только начиная с середины. Для этого в
середине программы ставят специальный
вызов (точка вызова - BreakPoint), который передает
управление отладчику. Недостаток способа
кроется в том, что для осуществления прерывания
в код исследуемого приложения надо внести
изменение. А если приложение время от
времени проверяет себя на наличие контрольных
точек, то сделать подобное будет весьма
и весьма непросто.
Изменений определенных
регистров процессора, на которые
отладчики неадекватно
Дизассемблеры
и дамперы
Про дизассемблер
сказано было выше, а вот про
дампер можно добавить то, что это
практически тот же дизассемблер, только
транслирует он не файл, находящийся на
диске в Ассемблерный код, а содержимое
оперативной памяти на тот момент, когда
приложение начало нормально исполняться
(то есть, пройдены все защиты). Это один
из коварных средств взлома, при котором
хакеру не надо бороться с механизмами
противодействующими отладке, он лишь
ждет, когда приложение закончит все проверки
на легальность запуска, проверяя метки
на диске, и начинает нормальную работу.
В этот момент дампер и снимает "чистенький"
код без примесей. К всеобщей радости не
все защиты могут просто так себя раскрыть!
И об этом ниже:
Шифрование. Самый
простой и эффективный способ
противодействия. Подразумевает, что
определенная часть кода никогда
не появляется в свободном виде.
Код дешифруется только перед передачей
ему управления. То есть вся программа
или ее часть находится в зашифрованном
виде, а расшифровывается только перед
тем как исполниться. Соответственно,
чтобы проанализировать ее код надо воспользоваться
отладчиком, а его работу можно очень и
очень осложнить (см. выше)!
Шифрование и
дешифрование (динамическое изменение
кода). Более продвинутый способ
шифрования, который не просто дешифрует
часть кода при исполнении, но и
шифрует его обратно, как только
он был исполнен. При такой защите
хакеру придется проводить все время с
отладчиком, и взлом защиты затянется
на очень и очень долгое время.
Использование
виртуальных машин. Еще одна модернизация
шифрования. Способ заключается в
том, чтобы не просто шифровать и
дешифровать целые фрагменты кода
целиком, а делать это покомандно, подобно
тому, как действет отладчик или виртуальная
машина: взять код, преобразовать в машинный
и передать на исполнение, и так пока весь
модуль не будет исполнен. Этот способ
гораздо эффективнее предыдущих, так как
функции приложения вообще никогда не
бывают открытыми для хакера. Естественно,
что его трудно реализовать, но реализовав,
можно оградить себя от посягательств
любых хакеров. Но в этом способе кроется
недостаток - производительность, ведь
на подобное транслирование требуется
много времени, и, соответственно, способ
хорош для защиты только для критических
участков кода.
Дополнительные способы противодействия
Здесь уже идет
чистое описание всяких возможностей
по противодействию. Даются общие вводные,
ведь защита может быть эффективной только
тогда, когда каждый ее модуль написан
на совесть с использованием различных
ухищрений. То есть все рецепты, о которых
говорилось выше, должны в той или иной
форме присутствовать в любой системе.
Использовать
для хранения данных защиты системные
ресурсы Windows: дополнительную память, выделяемую
для параметров окон и локальные хранилища
потоков. Суть способа состоит в нестандартном
использовании стандартных областей,
скажем, хранить ключи, пароли… и т.п.,
совсем не там, где их будут искать при
взломе в первую очередь.
Использовать
операции сравнения нестандартными
способами, во избежание их явного присутствия.
Для сравнения есть определенные
инструкции микропроцессора, о которых
знают и разработчики и хакеры.
А если попытаться использовать нестандартные
виды сравнения, то можно слегка запутать
хакера, ожидающего стандартного ответа.
Избегать обращений
к переменным, относящимся к защите
напрямую. То есть использовать любые
косвенные способы доступа к
специальным областям.
Использовать
метод "зеркалирования" событий,
то есть применять нестандартные
действия на стандартные вызовы. Об
этом говорилось выше.
Использовать
для шифрования надежные, проверенные
временем алгоритмы и т. д.
Здесь перечислены только основные подходы, даже не основные, а общеизвестные. А об оригинальных разработках мы узнаем позже, как только хакеры смогут взломать очередную уникальную защиту.