Это будет сложно для приложения .NET. Главным образом потому, что вам нужно распространять его в формате MSIL, который легко компилируется в любой другой язык .NET.
Вы можете использовать один из многих обфускаторов (как бесплатных, так и коммерческих), которые в основном переставляют ваш код, делая его почти нечитаемым для людей. Но инструменты все еще в состоянии схватить это и обфусцировать это.
Но помните: если ваше приложение стоит взломать, оно будет взломано независимо от того, какую защиту вы используете и какой язык или фреймворк вы используете. Единственное «достаточно хорошее» решение - аппаратный ключ.