Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 14:31   #1
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию Нужны советы по усовершенствованию защиты кода и системы активации

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

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

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

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

p.s. Слышали про сервер (или программу) "ГАВНОКОД" (или как то так называется), которая запутывает код класса, может кто сталкивался
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 16.04.2013, 14:48   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Если на сервере имеется такое сочетание кода лицензии и ID железа, то сервер возвращает строку, сигнализирующую о том, что программа активирована.
Что мешает взломщику сформировать "ответ от сервера" самостоятельно?
Должна ли программа после "активации" работать даже при отсутствии подключения к сети Интернет? Если нет, чем гарантируется, что она не будет работать? Если да, как она проверяет, что она "активирована"?
Цитата:
1. Как сделать анализ кода (например через Reflector) более затруднительным - чтобы проанализировать наш функционал было значительно дороже, чем воссоздать его с нуля.
Использовать программы для обфускации кода. Оформить авторские права на код. Изменить логику кода, вынеся часть "истинной" логики за пределы кода. Забить на всё перечисленное.
Зависит от задачи, в общем.
Цитата:
2. Как усовершенствовать механизм активации, чтобы он был труднее для взлома?
Проконсультироваться со специалистом по защите информации. Пока что Вы не привели механизма активации, если что.
Abstraction вне форума Ответить с цитированием
Старый 16.04.2013, 15:35   #3
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Что мешает взломщику сформировать "ответ от сервера" самостоятельно?
Должна ли программа после "активации" работать даже при отсутствии подключения к сети Интернет? Если нет, чем гарантируется, что она не будет работать? Если да, как она проверяет, что она "активирована"?
Использовать программы для обфускации кода. Оформить авторские права на код. Изменить логику кода, вынеся часть "истинной" логики за пределы кода. Забить на всё перечисленное.
Зависит от задачи, в общем.
Проконсультироваться со специалистом по защите информации. Пока что Вы не привели механизма активации, если что.
где найти специалиста по защите кода? По поводу формирования ответа от сервера - сейчас закодируем ответ. Работа программы актуальная только при подключении к интернет.
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 16.04.2013, 15:36   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Цитата:
1. Как сделать анализ кода (например через Reflector) более затруднительным - чтобы проанализировать наш функционал было значительно дороже, чем воссоздать его с нуля.
Деобфускация кода после SmartAssembly дело не такое уж простое. На моей памяти есть только один деобфускатор, который делает код после SmartAssembly хоть как-то читаемым. Reflector-программа от создателей SmartAssembly, если сборка подписана, то он спрашивает пароль, без этого читабельный код он не выдаст. dotPeek от JetBrains хорош, но тоже не делает код более читабельным. IlSpy-совсем уныло. Дальше продолжать?
Совет по SmartAssembly: используйте internal классы. Классы public (например, для работы с БД) вынести в отдельную сборку, их нельзя обфусцировать, а получить схему бд они и так могут в любое время.
Цитата:
Как усовершенствовать механизм активации, чтобы он был труднее для взлома?
На мой взгляд лучше всего хардвар защита (HASP)+софт защита(поиск нежелательных процессов и т.д.)
Цитата:
Как сделать анализ кода (например через Reflector) более затруднительным - чтобы проанализировать наш функционал было значительно дороже, чем воссоздать его с нуля.
Обфусцированный код (повторю, что считаю SmartAssembly одной из лучших программ такого рода) привести к изначальному виду практически невозможно, соответственно переделать его или использовать частично в своем продукте не имеет большого смысла, рефакторинг займет больше, чем написание с нуля. Однажды, ради теста, деобфусцировал проект, над которым работаю. Даже зная его, как свои пять пальцев, зная что искать и где искать.. А уж сделать пересборку с взломаной защитой.. Никому такого не пожелаю.

Одно время думал, что важный код лучше выносить в dll на C, но ведь хацкер, найдя вызов функции в dll из кода всегда может сделать точно такой же вызов, так что не выход. Динамическое создание dll в памяти через Codedom, получив код с удаленного сервера тоже не спасет, только усложнит жизнь.

Вывод: Читайте мануалы по SmartAssembly. Ищете готовые решения для защиты программ, они будут лучше чем ваш самопал.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 16.04.2013, 15:46   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
По поводу формирования ответа от сервера - сейчас закодируем ответ. Работа программы актуальная только при подключении к интернет.
Ох.
Я не имею ни желания, ни, по-хорошему, квалификации для того, чтобы давать корректные советы по созданию системы защиты ПО от тех или иных несанкционированных действий, особенно через форум. Я могу попробовать указать на дыры в сформулированной концепции защиты. Это не означает, что их устранение сделает защиту лучше: это лишь означает, что, если такие дыры есть, то значит, система защиты создавалась неправильно по некоторой фундаментальной причине и эту причину следует обнаружить и устранить. В конце концов, если произвольный человек на форуме способен указать на одну ошибку, есть приличная вероятность того, что на самом деле их двадцать.
Цитата:
где найти специалиста по защите кода?
Ну, вроде как есть разные сайты - банки резюме, электронные биржи труда, всё такое...
Abstraction вне форума Ответить с цитированием
Старый 18.04.2013, 09:29   #6
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию

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

2. Мы в коде оставляем много комментариев (в функциях и над ними). Не доступны ли они в конечной сборке?
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 18.04.2013, 10:24   #7
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Цитата:
Вопрос следующий: не получится ли у взломщика на базе открытых и понятных имен пропертей - дизассемблировать код обфусцированных SmartAssembly функций в читаемый?
Вы представляете себе механизм обфускации? SmartAssembly заменяет все имена на какую-то *^*. Даже после деобфукацию нет возможности вернуть нормальные имена функций, только заменить *^* на названия func1,func2 и т.д. Все строковые непубличные значения прячутся очень хитро и откопать их очень сложно без деофускации. Также обфускация сильно путает код, с чем тоже деобфускаторы стравляются неполностью. В итоге, после всех ухищрений можно получить код (причем не полностью чистый) и классы с функциями, имена которых ничего не значит.
Цитата:
Мы в коде оставляем много комментариев (в функциях и над ними). Не доступны ли они в конечной сборке?
Не уверен, мы не оставляем комментарии в коде, но ни в одной программе, которую я разбирал, я комментариев не встречал.
Вообще скачать dotPeek, откройте им свои dll и взгляните как это выглядит.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 18.04.2013, 13:50   #8
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Вы представляете себе механизм обфускации? SmartAssembly заменяет все имена на какую-то *^*. Даже после деобфукацию нет возможности вернуть нормальные имена функций, только заменить *^* на названия func1,func2 и т.д. Все строковые непубличные значения прячутся очень хитро и откопать их очень сложно без деофускации. Также обфускация сильно путает код, с чем тоже деобфускаторы стравляются неполностью. В итоге, после всех ухищрений можно получить код (причем не полностью чистый) и классы с функциями, имена которых ничего не значит.

Не уверен, мы не оставляем комментарии в коде, но ни в одной программе, которую я разбирал, я комментариев не встречал.
Вообще скачать dotPeek, откройте им свои dll и взгляните как это выглядит.
Огромное спасибо за ответы!
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужны советы программистов Clarus Софт 4 11.08.2012 10:45
Нужны советы Nikolai2010 Работа с сетью в Delphi 0 05.05.2012 14:02
Нужны советы... Makc19977 JavaScript, Ajax 18 25.02.2012 18:57
Нужны советы по созданию механизма активации программы alexplato C# (си шарп) 1 01.08.2011 13:37
Нужны советы по Java shkipper Помощь студентам 1 08.04.2009 02:28