Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Усовершенствование защиты кода и системы активации 
:(
    Опции темы
alexplato
Дата 16.4.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 14.11.2010

Репутация: нет
Всего: нет



Есть программный продукт, состоящий из EXE и около 10 dll файлов. Продукт сделан на C# под .NET4 . Обфусцируется SmartAssembly (который при обфускации естественно не меняет имена публичных функций и пропертей, описанных в DLL). Именя публичных функций и пропертей, описанных в DLL, делаем нечитаемыми (поскольку обфускация на них не влияет, и если их оставлять как есть - то легко станет понять что происходит в коде).

Механизм активации следующий:
Получаем ID железа, отправляем на сервер и выданным пользователю кодом лицензии. Если код на сервере не занят, то данному коду лицензии приписывается данный ID железа (в обратном случае (если код занят) - сервер возвращает ошибку).

Механизм проверки активированности программы следующий:
Получаем ID железа, отправляем на сервер и выданным пользователю кодом лицензии. Если на сервере имеется такое сочетание кода лицензии и ID железа, то сервер возвращает строку, сигнализирующую о том, что программа активирована. В обратном случае (если на сервере НЕТ такого сочетания кода лицензии и ID железа)  - сервер возвращает строку, сигнализирующую о том, что программа НЕактивирована.

Нужны советы:
1. Как сделать анализ кода (например через Reflector) более затруднительным - чтобы проанализировать наш функционал было значительно дороже, чем воссоздать его с нуля.
2. Как усовершенствовать механизм активации, чтобы он был труднее для взлома?

p.s. Слышали про сервер (или программу) "###КОД" (или как то так называется), которая запутывает код класса,  может кто сталкивался

PM MAIL   Вверх
alexplato
Дата 18.4.2013, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 14.11.2010

Репутация: нет
Всего: нет



1. Мы изменили имена публичных фукнций DLL (там где не получилось сделать internal), но мы не меняли имена многих публичных пропертей (из DLL). Эти проперти используются обфусцированными функциями. Вопрос следующий: не получится ли у взломщика на базе открытых и понятных имен пропертей - дизассемблировать код обфусцированных SmartAssembly функций в читаемый?

2. Мы в коде оставляем много комментариев (в функциях и над ними). Не доступны ли они в конечной сборке?
PM MAIL   Вверх
Machaon
Дата 19.4.2013, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 12.8.2008
Где: М.о. Красногорск

Репутация: 3
Всего: 3



Ответ на вопрос:  Как усовершенствовать механизм активации, чтобы он был труднее для взлома?
(Простой но Эффективный способ защитить программу)

Пользователь регистрируется на вашем ресурсе получая логин и пароль.

В вашей программе создается защищенное подключение к серверу авторизации (к примеру я использую Socket+OpenSSL)
через которое пользователь авторизуется используя свою учётную запись.

Через это же подключение проверяется наличие идентификатора в базе (например серийник CPU возведённый в степень серийника HDD в корне серийника MB). Соответственно если запись есть то аккаунт активирован.

Если нет то запускаем триал или к примеру предлагаем купить где в окне отображается идентификатор который нужно ввести
в личном кабинете на вашем ресурсе (собственно функция введения идентификатора в базу и будет продаваться).

Также через заданный интервал будет создаваться новое подключение все через тот же Socket+OpenSSL для проверки статуса активации, так как новое подключение содержит уже новые ключи это предотвратит от попытки проснифить трафик и подменить пакет. 
Как дополнение это подключение можно использовать для проверки если к примеру идентификатор имеет временное ограничение то программу можно завершить процессе её работы так как срок лицензии истек.



ИТОГ:
1) Идентификатор закрепляется за учетной записью.
2) В случае смены ПК идентификатор легко меняться через личный кабинет.
3) В случае кражи вашей учетной записи пользователь не сможет пользоваться программой так как у него другой идентификатор.
4) В случае кражи и учетной записи и подмены идентификатора (в данном случае подмена серийных номеров железа-"возможно на виртуальных машинах") достаточно сменить пароль от учетной записи.

Может что-то и упустил спрашивай.

Добавлено через 8 минут и 17 секунд
Цитата(alexplato @ 18.4.2013,  08:30)
Мы в коде оставляем много комментариев (в функциях и над ними). Не доступны ли они в конечной сборке?

Все закоментированные строки компилятор пропускает.
PM MAIL ICQ Skype   Вверх
wesadex
Дата 29.4.2013, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Не знаю будет ли полезно и насколько применимо к шарпу - я тока на дельфях такое делал. Но думаю и тут вполне можно применить.

Суть метода: создаем массив процедурного типа (указатели на процедуры), пишем несколько функций с разным компилируемым кодом (речь о самой главной функции - правильность работы которой влияет на все приложение), но одинаковыми параметрами, из которых только одна работает правильно, заполняем указателями на них массив (причем на лету по какому-нить хитрому правилу) и вызываем эту функцию везде по указателю из массива, а номер элемента массива высчитываем из сочетаний ID железа, серийных номеров, фаз луны - чего угодно. Получается в итоге, что какой бы серийник ни ввел взломщик, прога будет работать, но только с правильным серийником будет работать правильно. Ни ошибок, ни затыков, ни диалогов. Очень удобно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.