Зависит от того, насколько раздражающим вы хотите, чтобы ваши пользователи были честными. Вы могли бы реализовать HWID (см. Как быстро получить Hardware-ID в C #? о том, как их генерировать), который будет уникальным для системы, затем попросите вашу программу проверить, соответствует ли HWID найденному ID в место, где вы храните их онлайн (обычно с использованием базы данных).
Излишне говорить, что для запуска вашего приложения потребуется подключение к Интернету, что может немного расстроить ваших пользователей.
Или вы можете объединить HWID с серийным номером, и ваше приложение сделает то же самое, чтобы проверить, совпадают ли они, но это может быть легко взломано средним взломщиком.
В конце концов, .net не является лучшим с точки зрения безопасности, так как вы можете легко получить исходный код и изменить сборки по мере необходимости для исправления определенных средств защиты. Имейте это в виду, решая, какой путь вы хотите выбрать для защиты своего программного обеспечения.