На самом деле чертовски интересно, как это сделано. Интерес скорее академический, потому что С# какбы легко поддается декомпиляции и тд. К примеру тот же EXT.Net со стоимостью лицензии в размере 1300 вечнозеленых денежных знаков. Не пойму происходит ли лицензирование исключительно "на доверии" или есть какие-то стандартные средства отслеживания и аудита, или использование лицензионных ключей и тд.
На мой взгляд немного странный вопрос. По-моему тут "кто во что горазд". Самый простой способ, это пройтись обфускатором, который вырежет всю информацию о символах, а что не вырежет, то "понадкусает" - заменит абракадаброй. Плюс вставит пару защит от декомпиляции и дампирования. Понятно, что это так себе защита. Но если подумать, а кому нужно ломать упомянутый набор компонентов то ? Коммерческое приложение со взломанными либами - это так себе идея. Рано или поздно юристы его "настигнут". А open source - тем более мимо. Остаются студенты-практиканты, которым заняться нечем...
Ну самый банальный банальный пример - записать куда-нибудь дату первого запуска. Обычно это либо файл/встроенная БД в файле, либо реестр. (понятно, что могут найти, ну так взломать можно всё) Можно конечно через интернет её сообщать сервису, а потом при каждом запуске проверять (так например продукты автодеска делают и многие другие), но по-моему для библиотеки это черезчур (да я бы сказал что и для другого софта тоже, но кто ж меня будет слушать...) Есть ещё аппратные usb-ключи, но это как я понимаю уже не про триал-периоды. Но в него может прошиваться какая то информация, которую приложение потом может читать. В принципе никто не мешает и триал-ключ выпустить. Только дорого это. С другой стороны при таких ценах более тысячи не деревянных, уже не так и дорого - хоть каждый год новый выпускайте.
Влад, половина коммерческих обфускаторов в виде комплекта или допов поставляют и разного типа защиты
В том числе и с типичным триалом (число запусков, сроки).
Методов много.
Самый простой вариант - диапазон дат в ключе активации например.
Александр, прочитал ваш комментарий, получается что если если мы отдаем библиотеку после регистрации (как тот же ExtJs), то можем собирать библиотеку на стороне сервера, и засовывать в assembly дату сборки или окончания триала.. А новая native сборка насколько легко поддается реверсинжинирингу?
А новая native сборка насколько легко поддается реверсинжинирингу?
Это всегда вопрос упорства "черной шляпы". Если в этом реверсе есть смысл (т е это скажем не банальный UI-фреймворк, а какой-то алгоритм, который атакующий хочет потом продать или использовать в своём продукте (причём вот в этих случаях уже есть смысл, т к юридически может не быть факта нарушения интеллектуальных прав или это может быть тяжело доказать), то это рано или поздно распотрошат и никакая защита не поможет. Что касается Net framework то на мой взгляд там изначально дела обстояли лучше чем в той же Java. Декомпиляторы были, но выдавали такую абракадабру, что надо иметь очень сильное желание этим заниматься. (это даже без обфускаторов, просто если проект собран в релиз без лишней информации в ассембли) Но это было давно. А сейчас, если вас действительно этот вопрос заботит, то как первый этап, я бы взял все возможные декомпиляторы и обфускаторы и сам посмотрел бы на каком уровне находится декомпиляция чистого кода и обфусцированного. Если же у вас в проекте прям очень know how там , то вы можете пригласить кого-нибудь из "белых шляп" проверить насколько тяжело вашу модель зашиты сломать. И испросить советов у него. Абсолютной защиты в любом случае не бывает. Нужно исходить из того, что вы защищаете и для чего оно может понадобится взломщикам.