Анализ программных комплексов для защиты ПО от нелицензионного использования и копирования

автор | 26 Декабрь, 2008
рубрики Антиотладка, Статьи Комментарии к записи Анализ программных комплексов для защиты ПО от нелицензионного использования и копирования отключены

anpoПостановка задачи:

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

Вводная часть
В настоящее время разработчикам программного обеспечения доступны три основных варианта защиты ПО:
— Использование защиты, основанной на общедоступных примерах.
— Использование навесных защит
— Использование «обфускаторов»

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

If length (eUserName.Text)>3 then
Begin
If eRegNum='546547-338596824-45823948' then
Begin
MessageDlg ('Регистрация успешно завершена!'+#10#13
+'Спасибо за поддержку!',mtConfirmation,[mbOk],0);
Const_Reg_ok:=true;
fMain.Show ();
fTrial.Close ();
End else MessageDlg ('Неправильный регистриционный номер!',mtError,[mbOk],0);
End;

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

00453971 CALL Project1.00432A24 ; получаем длину имени
00453976 MOV EAX,DWORD PTR SS:[EBP-4] ; загружаем имя
00453979 CALL Project1.0040410C ; опять получаем длину имени
0045397E CMP EAX,3 ; сравниваем длину с 3
00453981 JLE SHORT Project1.004539E2 ; если равно, продолжаем
00453983 LEA EDX,DWORD PTR SS:[EBP-8]
00453986 MOV EAX,DWORD PTR DS:[EBX+2FC]
0045398C CALL Project1.00432A24 ; получаем длину введённого кода
00453991 MOV EAX,DWORD PTR SS:[EBP-8] ; загружаем введённый код
00453994 MOV EDX,Project1.00453A14 ; ASCII «546547-338596824-45823948»
00453999 CALL Project1.00404258 ; сравниваем
0045399E JNZ SHORT Project1.004539CD ; если неравны, то переходим к ошибке

Исходя из листинга — всё предельно просто. Код, пусть и не на исходном языке, но для человека, разбирающегося в ассемблере и знающего базовые принципы работы с отладчиком, не составит большого труда обезвредить подобную защиту. Красным цветом в листинге показана уязвимая часть данного защитного механизма. Программист не стал скрывать регистрационный номер и он лежит открыто в виде строковой константы. Дальнейшие комментарии излишни.

Следующий вариант защиты является наиболее распространённым — это использование навесных защит.
Навесная защита — это программнореализованный комплекс защитных средств, который служит для обеспечения защиты от несанкционированного (нелицензионного) использования ПО.

В качестве примеров можно назвать следующие защиты:

— AsProtect
— Armadillo
— tElock
— PEGuard
— EXECrypter
— Obsidium
— OriEN

Является ли такой метод защиты ПО надёжным? Конечно же нет. В случае начинающих «кодокопателей» он поможет и защитит ПО от взлома. Но профессионального взломщика данные защиты лишь задержат на некоторое время от достигаемой цели.

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

— AsProtect -> AsProtect Stripper
— Armadillo -> DilloDumper
— tElock -> unTELOCK
— PEGuard -> PEGuard Deprotector

К EXECrypter, Obsidium и ORIEN нет автораспаковщиков, но в интернете достаточно ресурсов, где «на пальцах» объясняется процесс обезвреживания данных защит.

Среди представленных вариантов самым надёжным и самым крепким является Armadillo. К сожалению, на данном этапе развития программных защит во всех программных комплексах отсуствует поддержка .NET-приложений. Безусловно, встречаются случаи когда к .NET-приложению можно подключить навесную защиту, но в тоже время никто не гарантирует работоспособность защищённой программы на компьютерах с разными аппаратными характеристиками.

В поставленной задаче важным пунктом является — поддержка .NET-приложений. Соответственно, рассмотрим представителей защит из сферы.NET-приложений.

Теоретическая часть. Технология .NET

Со времён появления Java перед разработчиками встала проблема обеспечения защиты своих алгоритмов. В то время появилось понятие «обфускация» программного кода, т.е. приведение программы к виду, затрудняющему восприятие и модификацию.
В настоящее время разработано около десятка обфускаторов (в большей степени для Java, но сейчас уже и для .NET-приложений). В 2000 году вышла в свет технология .Net от Microsoft. Данная технология оперирует ключевыми понятиями: Assembly и MSIL.

Assembly — это набор ресурсов и типов, а также метаданные, описывающие типы и метода, реализованные в сборке. Получается что сборка (assembly) — это самоописанный компонент.

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

Логично, что любой код на который Вы потратите определённое количество времени, написанный на C#, VB.Net, Managed C++ или J# сможет посмотреть любой человек более или менее знакомый с компьютером. Например, программой .Net Reflector.
Ощущается некоторая беспомощность программиста и его продукта. К счастью, существует несколько путей решения данной проблемы:
— Обфускация:
Именно этот метод мы и возьмём за основу при выборе надёжного и безопасного ПО для защиты .Net приложений. В самых сложных и действенных обфускаторах встроены функции оптимизирующего компилятора.
— Оптимизирующий компилятор:
Помимо обфускаторов существуют оптимизирующие компиляторы, которые позволяют избавится от бесполезной информации (зачастую отладочной). Некоторые из них также заменяют вызовы методов непосредственно их телами, что затрудняет процесс исследования кода.

Компания Microsoft помогла разработчикам, выпустив две утилиты:
1. ngen — утилита, превращающая Вашу сборку в native
2. DotFuscator — обфускатор, поставляемый вместе с Visual Studio .Net 2003
Процесс обфускации
Сам процесс обфускации зачастую считают панацеей от любого рода взлома ПО. Целью обфускаторов в большей степени является затруднения в просмотре алгоритма. Стоит отметить, что обфускаторы не имеют в отличии от своих собратьев (навесные защиты в частности) — антиотладочных приёмов и т.п.
Выделим два момента, позволяющие определить, чтоб работа обфускатора полезна:
1. Время, затраченое на понимание кода злоумышленником превышает время, в течение которого актуальность алгоритма остается значимой.
2. Стоимость деобфускации превышает стоимость самого продукта.

Авторы: ViNCE [AHTeam], Sh [AHTeam]

Скачать статью полностью

Оценить эту тему:
1 звезда2 звезды3 звезды4 звезды5 звезд (2 голосов, средний: 5,00 из 5)
Loading...Loading...
Популярность: 8 157 просмотров
Вы можете следить за любыми ответами на эту запись через RSS 2.0 feed. Комментарии в настоящее время закрыты.