To answer the question once you have access to the box you cannot prevent anyone from dissasembling your code, especially if you use a runtime from the CRT to the .NET framework which is almost all of windows and windows based programs not to mention mac
or linux. Just ask any developer who uses windbg i remember finding a bug in ATL by steping through that glorious product only to ponder afterwards at the fact that if its in memory its crackable. [detours is your friend]
Therefore if you really want securty try the server client model with RSA. This allows you to execute your really important code on another machine. If you clean up nice no one will ever know what gets executed on the server.
[now where did i leave that server room backup master key...]