Покритикуйте идею защиты програмы
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 24.03.10 09:46
Оценка:
Задача: Есть сервер на .Net, при подключении к нему, клиентские приложения проходят авторизацию. Нужно чтобы сервер ограничивал количество одновременно авторизирированных пользователей согласно количеству купленных лицензий. (если куплено 30 лицензий, то при попытке аворизироваться 31м — отвечать ему отказом)
После того как я погуглил и покумекал у меня возникла
Идея:
Шаг 1:вынести саму проверку в маленький класс (назовем его LicenseCheker), который в результате проверки должен возвращать некий токен- объект реализующий спец.интерфейс ILicenseToken. Если в результате проверки мы получил токен — все ок.
Шаг 2: Код реализующий LicenseCheker и ILicenseToken выносим в отдельный файл. шифруем его закрытым ключем.
Шаг 3: Во время выполнения расшифровуем файл, проводим динамическую компиляцию — получаем работающий код.
Шаг 4: (????)Для надежности можно раз в 15 минут сбрасывать и повторять шаг 3

Дополнительно: можно все это поместить в электронный ключ.

Вопросы:
1. На сколько идея бредовая
2. Посоветуйте хороший алгоритм шифровканиичя открытым\закрытым ключем. Есть ли готовые реализации?
3. Что вы думаете по поводу электронного ключа — нужно ли это тут
4.(совсем неккоретный, но) Как бы вы оценили объем трудозатрат.

Огромное спасибо за ответы
С уважением, Владислав Полищук
Re: Покритикуйте идею защиты програмы
От: 0K Ниоткуда  
Дата: 24.03.10 09:59
Оценка:
Здравствуйте, vladpol, Вы писали:

V>Шаг 1:вынести саму проверку в маленький класс (назовем его LicenseCheker), который в результате проверки должен возвращать некий токен- объект реализующий спец.интерфейс ILicenseToken. Если в результате проверки мы получил токен — все ок.

V>Шаг 2: Код реализующий LicenseCheker и ILicenseToken выносим в отдельный файл. шифруем его закрытым ключем.
V>Шаг 3: Во время выполнения расшифровуем файл, проводим динамическую компиляцию — получаем работающий код.

А чем расшифровывать будете? Где закрытый хранить будете? Если там же, так смысла в открытом/закрытом никакого нет, достаточно для запутывания одного секретного ключа (если вообще поможет).

V>Шаг 4: (????)Для надежности можно раз в 15 минут сбрасывать и повторять шаг 3


А смысл?

Вы от чего хотите защититься? От проникновения на ваш сервер?

V>Дополнительно: можно все это поместить в электронный ключ.


Какой такой электронный ключ? Что это?

V>2. Посоветуйте хороший алгоритм шифровканиичя открытым\закрытым ключем. Есть ли готовые реализации?


В Win их всего 2: RSA и DSA. В 2008 добавили еще на эллиптических кривых.

V>3. Что вы думаете по поводу электронного ключа — нужно ли это тут


Что есть электронный ключ? eToken?
Re: Покритикуйте идею защиты програмы
От: Аноним  
Дата: 24.03.10 10:15
Оценка:
Здравствуйте, vladpol, Вы писали:

V>Шаг 1:вынести саму проверку в маленький класс (назовем его LicenseCheker), который в результате проверки должен возвращать некий токен- объект реализующий спец.интерфейс ILicenseToken. Если в результате проверки мы получил токен — все ок.


Зачем тебе объект в качестве токена, непонятно. По моему токен, должен быть не более чем набором байт... Но это не принципиально.

V>Шаг 2: Код реализующий LicenseCheker и ILicenseToken выносим в отдельный файл. шифруем его закрытым ключем.


Хорошая мысль.

V>Шаг 3: Во время выполнения расшифровуем файл, проводим динамическую компиляцию — получаем работающий код.


Самое слабое звено . Все что появилось в памяти процесса элементарно дампиться... Последствия уточнять не будем.

V>Шаг 4: (????)Для надежности можно раз в 15 минут сбрасывать и повторять шаг 3


Мысль хорошая но не спасет...

V>Дополнительно: можно все это поместить в электронный ключ.


См. комментарии к 3 и 4.

V>1. На сколько идея бредовая


Против хомячков поможет. Если твой софт комуто станет нужен, сломают в течении получаса.

V>2. Посоветуйте хороший алгоритм шифровканиичя открытым\закрытым ключем. Есть ли готовые реализации?


Алгоритмов, как и реализаций пруд-пруди. Гугл в помощь.

V>3. Что вы думаете по поводу электронного ключа — нужно ли это тут


Зависит от ценности софта.

V>4.(совсем неккоретный, но) Как бы вы оценили объем трудозатрат.


Реализовать, и отладить — день, с чаем блекджеком и шлюхами...

V>Огромное спасибо за ответы


И тебе не хворать...
Re[2]: Покритикуйте идею защиты програмы
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 24.03.10 10:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, vladpol, Вы писали:


V>>Шаг 1:вынести саму проверку в маленький класс (назовем его LicenseCheker), который в результате проверки должен возвращать некий токен- объект реализующий спец.интерфейс ILicenseToken. Если в результате проверки мы получил токен — все ок.


А>Зачем тебе объект в качестве токена, непонятно. По моему токен, должен быть не более чем набором байт... Но это не принципиально.


V>>Шаг 2: Код реализующий LicenseCheker и ILicenseToken выносим в отдельный файл. шифруем его закрытым ключем.


А>Хорошая мысль.


V>>Шаг 3: Во время выполнения расшифровуем файл, проводим динамическую компиляцию — получаем работающий код.


А>Самое слабое звено . Все что появилось в памяти процесса элементарно дампиться... Последствия уточнять не будем.


А если сверху обфускатором полирнуть? И вообще что посоветуете?
С уважением, Владислав Полищук
Re: Покритикуйте идею защиты програмы
От: vecs Россия  
Дата: 24.03.10 10:49
Оценка:
Защитить .Net приложение от взлома достаточно сложно. Но кое-что можно попытаться сделать.
В Вашем случае, например, количество лицензий зашифрованное вашим закрытым ключом хранить в отдельном файле. В программе расшифровывать открытым ключом. Но нужно защитить процедуру проверки лицензии обфускатором (через code-flow obfuscation).
Для того, чтобы помешать несанкционированному распространению файла лицензий, его можно держать в "железном" носителе (типа eToken).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.