Если речь идет про дотнетовские приложения, то их очень легко декомпилировать (dotPeek .NET decompiler) в исходный код благодаря большому числу доступных метаданных. Разработчики могут лишь напакостить, обфусцировав код перед компиляцией, что сделает его плохо читабельным как на уровне именования, так и на уровне самой логики (добавляются лишние путающие блоки кода)