NDS как инструмент защиты ПО. ОПЫТ.

Обсуждение технических вопросов по продуктам Novell

NDS как инструмент защиты ПО. ОПЫТ.

Сообщение Музалёв Николай » 16 дек 2005, 19:12

Преамбула
В разгар катастройки 1990-95 годов стены НИИ, КБ, разныхГИПРО... , отраслевых и академических институтов покинуло достаточное количество работников – люди подались искать удачу.
По прошествию времени большая их часть оставила бизнес и вернулась к своим инженерным специальностям, организовав маленькие и меленькие фирмы, живущие в тени монстров государственного масштаба.

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

Программ таких в конторах, подобных той, где я и.ч. служить, наберется не одна сотня: часть из них – в одно-два действия и напоминает студенческую лабу средней паршивости, зато другая часть по своей сложности, объему, размерности может сравниться с инженерным CAD-пакетам корпоративного типа. Повторюсь: и практически все такие разработки рыночных аналогов не имеют, ибо являются узкоспециализированными и остро заточенными инструментами ограниченной (по числу пользователей) востребованности. Что , конечно же , не снижает их ценности…

Ну дык вот, некоторое время тому встала проблема: а как бы прочно и надежно защитить такие программы.
Проведя анализ имевшихся тогда ( -5лет тому) средств защиты программных продуктов, мы не нашли ничего, что отвечало бы нашим требованиям. Ни привязка программ к ПК, ни аппаратные ключи по понятным причинам не подходили.
Стали думать: а что у нас есть, чего и всегда рядом, всегда доступно, под рукой и никто не унесет ? И ответ очевиден – Дерево нашей сети.

Вариант РАЗ
По первоначальному недомыслию задачу решили реализовать в лоб - использовать для защиты программ идентификацию в сети плюс :записи в поле DESCRIPTION каждого пользователя.
Каждый программный проект получил своё уникальное кодовое название (например, MOST1) и программа обращалась к Дереву, по логину пользователя находила в Дереве соответствующий объект типа USER и считывала поле DESCRIPTION этого объекта. Если в этом прочитанном поле программа находила запись типа MOST1=1 , то программа работала, а если программа такой записи не находила, или не находила сети, то и не работала.
Недостатки такого подхода – на поверхности и говорить тут не о чем…
Другое дело, что возня с Novell_SDK, изучение принципов работы с NDS из программ, анализ наших проблем и поиски иных решений не пропали и привели нас к реализации

Варианта ДВА.
Несколько осмелев, мы решили, что пора расширять схему Дерева. Что и было сделано: классу GROUP был добавлен атрибут типа «множественная строка» (т.е. можно хранить много переменных типа string) .

Далее, под нужды защиты программ был выделен специальный контейнер типа OU, который, естественно, получил имя PROGRAMMS . В этом контейнере постепенно, по мере включения программ в защиту, создавались объекты типа GROUP с именами, соответствующими именам программных проектов. Т.е. среди прочих была создана и группа с именем MOST1 .

Как вы уже поняли – наличие или отсутствие пользователя в членах соответствующей группы и было условием запуска соответствующей программы. Поясню: если программу MOST1 запустил на своей рабочей станции пользователь Василий Пупкин, то первым делом программа налаживается в Дерево, находить контейнер PROGRAMMS, в нем ищет группу MOST1 и считывает поле MEMBERS этой группы. Ежели среди прочих там имеет место запись VAS_PUPK.[полн_кнткст] , то эта запись означает, что гражданин Пупкин – лояльный и правомерный пользователь указанного программного шедевра, пожалуйте на ввод ИД Ну, а если такой записи нет – значит и суда нет… Г-н Пупкин в своем праве обратиться за разъяснением, почему он лишен возможности применить программу MOST1.

Так заканчивается первая часть работы защиты – идентификационная и учетная и начинается собственно защитная.

В дебрях сайтов свободных разработок был найдены простой калькулятор ( а их там – не меряно…) , который мы и внедрили основным компонентом защиты.

Калькулятор наш получает на вход два множества параметров: первое множество - 4 числа типа REAL, второе множество – переменную типа string .

Вы уже догадались, что в строковой переменной хранится «программа» для калькулятора, а множество действительных чисел – это данные для этой «программы».

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

1 шаг
При написании программы каждый программный проект получает свое собственное уникальное имя. Что неплохо и для учета программ, кстати…

2 шаг
Проблемный программист на последнем этапе разработки программы добавляет в код проекта несколько строк, которые организуют доступ к Дереву, поиск объекта типа GROUP с именем, эквивалентным имени проекта/программы, считывание поля MEMBERS этой группы и выявление в прочитанном множестве имен членов группы FDN запустившего программу пользователя.

3 шаг
Проект в исходниках передается программисту системы защиты. Он создает требуемую группу и просматривает программу на наличие возможных мест вставки защитного кода.
Такими местами являются не сложные вычисления с 3мя-4мя членами в формуле.
Например, в программе есть операторы вычислений окружности и пересчета углов:
Код: Выделить всё
…..
S =  PI * R * R
GRAD = (180.0 * RAD ) / PI
......


4 шаг
Программист защиты формирует собственно защиту путем занесения в дополнительный атрибут объекта GROUP нескольких строк, формально адекватных выбранным формулам.

Продолжим пример:
Программист защиты:
- добавит в наш атрибут строку №1 «A* B * C» и строку №2 «(A*B)/C»
- заменяет в исходном коде первоначальные операторы на операторы вида
Код: Выделить всё
............
CALL CAZ (  S ,  1 ,  PI ,  R ,  R,  0. )
CALL CAZ ( GRAD , 2  , 180.0 , RAD , PI , 0. )
............


Совершенно очевидно, что процедура CAZ обращается к атрибуту группы, содержащим строки-коды для работы калькулятора, считывает их и вычисляет с помощью своего калькулятора. Параметры в примере последовательно: переменная под результат, номер строки-формулы в поле атрибута , 4ре переменных для подстановки в формулу калькулятора.

5 шаг
Программа перетранслируется и пересобирается.

6 шаг
Проверка действия защиты.

На реализацию всех 6ти шагов программисту защиты требуется 10 минут. Ну и следует сказать, что пользователям даны соотв. права - пользователям дано право RF на атрибуты, а программисту защиты - право записи в соответствующие поля.
Программист защиты оперирует продуктом SHEMAX . (Бексплатная программка для работы со схемой, создания своих "снпинов" и т.д. Можно найти в разделе ФАЙЛЫ)

Вот пока все.

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

Недолгий поиск выявил, что фирма N в безмерной мудрости своей ограничила один из глубоко внутренних буферов в SDK размером в 4K, и не сподобилась поставить там никакой диагностики на переполнение буфера…
Так что – не только билл и окна его, но и ребята из Прово грешат мелкой халявой при написании кода. Буфер был увеличен, SDK перетранслировали и все стало хорошо.

Если кто из коллег заинтересовался этой разработкой и имеет желание реализовать ее на своей площадке, рекомендую начать с исходников программы SKOKO (см. пункт ФАЙЛЫ сайта). Представленная в них библиотека BGDNet дает программисту на MsVC6++ широкие возможности по доступу к объектам Дерева. Ну, и плюс ваша фантазия…

Желаю энтузиастам успеха и Спасибо, что дочитали.
armoracia rusticana (lat.), "блины" и "фиги" всех видов, а также смайлики - крайне не желательны !
Музалёв Николай
 
Сообщения: 3034
Зарегистрирован: 04 июн 2002, 19:58
Откуда: Беларусь. МИНСК.

Re: NDS как инструмент защиты ПО. ОПЫТ.

Сообщение Аркадий Глазырин » 16 дек 2005, 20:11

Музалёв Николай писал(а):Стали думать: а что у нас есть, чего и всегда рядом, всегда доступно, под рукой и никто не унесет ? И ответ очевиден – Дерево нашей сети.


Гениально.
Аватара пользователя
Аркадий Глазырин
 
Сообщения: 2762
Зарегистрирован: 16 авг 2002, 09:09
Откуда: Екатеринбург

Re: NDS как инструмент защиты ПО. ОПЫТ.

Сообщение PavelKHTW » 16 дек 2005, 22:05

Аркадий Глазырин писал(а):
Музалёв Николай писал(а):Стали думать: а что у нас есть, чего и всегда рядом, всегда доступно, под рукой и никто не унесет ? И ответ очевиден – Дерево нашей сети.


Гениально.

Гениально, не спорю, но так же быстро и взламывается. Всего то нужно переписать на свой лад часть программы считывания данных из дерева - и даже ваши заморочки с вычислениями останутся нетронутыми.
Если программа уникальна и имеет свою цену - ее взломают.
PavelKHTW
 
Сообщения: 1037
Зарегистрирован: 08 окт 2003, 13:02
Откуда: Украина

Все это хорошо, но на самом деле ничего расширять не

Сообщение Boris Morozov » 17 дек 2005, 00:42

надо, сервис административных функций рулит. Там все есть в наличии.
И перекомпилять программу не надо, если в новое дерево надо будет поставить. Есть для этого замечательный механизм, но поскольку мы у себя пользуем, деталей раскрывать не буду, грубо говоря на хэш-функции.
И вообще, кто-то ко мне в гости давно собирался, это надо смотреть живьем.
Boris Morozov
 
Сообщения: 1333
Зарегистрирован: 05 июн 2002, 22:24
Откуда: Минск

Сообщение Музалёв Николай » 20 дек 2005, 15:25

но так же быстро и взламывается

А вот и не очень - для взламывания такого механизма необх. как минимум знать о Дереве... К сожалению - я писАл на ТИМ-форуме- нонешняя программная молодежЪ знает об этом ну совсем не много.
Кроме того - коллеги опять забывают - защита всегда адресна, т.е. перед тем как огород городить, надо определиться, от кого защищаемся... Дык вот - нашему контингенту за глаза хватает...

программы считывания данных из дерева - и даже ваши заморочки с вычислениями останутся нетронутыми.

Да-а-а... Я ж вам принципы, а не детальную реализацию...
Вы забываете, что у нас - инженерная контора, а не банк с целочисленными вычислениями... Мы ж в атрибуты и коэфф. разные ( в т.ч. и сезонные и нормативные) , да некоторые исходные, да еще то-другое приячем... Так что считывание Дерева необходимо ежедневное... А учитывая, что в инженерной программе количество веток вычисленией примерно равно "Е" в степени (количества операторов IF) , то .... результата мы достигаем: стоимость пользования взломанной программой на порядок больше, чем обратиться за легальным расчетом.

В любом случае - если кому стало интересно - то я очень рад!

PS.
кто-то...в гости...собирался

У-у-у..., посыпаю главу пеплом.... Ну, вот как отшумим праздники - точно напросимся себя показать, вас посмотреть...
armoracia rusticana (lat.), "блины" и "фиги" всех видов, а также смайлики - крайне не желательны !
Музалёв Николай
 
Сообщения: 3034
Зарегистрирован: 04 июн 2002, 19:58
Откуда: Беларусь. МИНСК.

Сообщение PavelKHTW » 21 дек 2005, 01:23

Музалёв Николай писал(а):Мы ж в атрибуты и коэфф. разные ( в т.ч. и сезонные и нормативные) , да некоторые исходные, да еще то-другое приячем...

Вот с этого бы и начинали, что все ваши расчеты берут данные из дерева, и тот кто их не знает - ничего не получит, а если еще и значения меняются... . А вы про привязку к пользователям.... :).
Хотя если программа стоящая, то не проблема скопировать структуру дерева - благо теперь eDir есть и под платформу Win.
PavelKHTW
 
Сообщения: 1037
Зарегистрирован: 08 окт 2003, 13:02
Откуда: Украина

Сообщение Мещеряков Андрей » 21 дек 2005, 09:45

PavelKHTW писал(а): Вот с этого бы и начинали, что все ваши расчеты берут данные из дерева, и тот кто их не знает - ничего не получит, а если еще и значения меняются... . А вы про привязку к пользователям.... :).
Хотя если программа стоящая, то не проблема скопировать структуру дерева - благо теперь eDir есть и под платформу Win.

Реализация -то есть, люодей, знающих о существовании самой eDir практически нет :lol: А для массового хака копировать схему и содержание дерева, потом воссоздавать ее (вычисления и запросы к дереву, как я понимаю, размазаны по всему коду программы, и структурировать, вычленить и заглушить их невозможно) вместе с деревом - да этак повеситься можно :D .. или купить вчестняка :wink:
Аватара пользователя
Мещеряков Андрей
 
Сообщения: 1999
Зарегистрирован: 19 сен 2002, 14:55
Откуда: lipetsk

Сообщение Аркадий Глазырин » 23 дек 2005, 15:09

Мещеряков Андрей писал(а):А для массового хака копировать схему и содержание дерева, потом воссоздавать ее вместе с деревом - да этак повеситься можно :D .. или купить вчестняка :wink:


Задача защит сводится именно к увеличению времени хака.
Идеальная защита та, где время взлома стремится к .
В этом случае быстрее купить.
Чего, собственно, и добиваются с момента проектирования защиты от копирования.
Причина онкологий - иммунодефицит. Он вызывается загаром, нервотрёпкой, прививками от гриппа, генномодифицированными дрожжами, например "Саф-Момент", приёмом наркотиков, особенно героиновой группы. + Грибы и паразиты.
Аватара пользователя
Аркадий Глазырин
 
Сообщения: 2762
Зарегистрирован: 16 авг 2002, 09:09
Откуда: Екатеринбург


Вернуться в Novell

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 6

cron