Вы не упомянули, какой язык вы собираетесь использовать. Если это управляемая сборка, то в ней гораздо больше, чем вы просите.
Просто пытаясь скрыть свой код за внутренними методами или за закрытым, код всегда можно декомпилировать. Так что это одна из первых вещей, с которыми вам придется справиться. Вы должны запутать этот код, чтобы то, что декомпилируется, было непонятно.
Вы можете заблокировать dll, но это очень сложно сделать, и в зависимости от того, насколько хорошо ваша реализация, тогда это может быть совсем не полезно.
Я использовал этот продукт до того, как RedGate купил его, и он был УДИВИТЕЛЬНЫМ. Это выбило меня из моего кода, который был собран из случайных постов в сети. Но это может быть то, что вы хотели бы использовать.
http://www.red -gate.com / продукция / DotNet-разработка / smartassembly /