There are three basic options:

  • Use an obfuscator which will prevent casual disassembly, but may not stop determined reverse-engineers. You can find a list of obfuscators here.
  • Use a client-server solution. The important code runs on a server controlled by you, and the user never sees the bytecode at all.
  • Make all your customers sign a legal contract promising not to disassemble the code, or they have to pay a huge fine.