В Visual Studio есть тулза Dotfuscator (
https://msdn.microsoft.com/ru-ru/library/ms227240%...), которая при компиляции в IL запутает код, поменяет название переменных, методово чтобы они были не читаемы. После такого, IL уже не читаем и если декомпилить
, к примеру, тем же dotPeek'ом, то код там разобрать практически не реально, но можно при наличии крепких нервов и кучи времени :)