title: Signing .NET assemblies: Does this protect my assembly from tampering really?
body: <p>I am implementing a "locking" system in my app which protects my app against being copied and used illegally. The system checks the signature of a hardware-based code and expects it to be signed with a Private Key that only my company owns. (The app has got the Public Key to validate the signature.)</p>
  
  <p>I want to make sure that no one changes my locking mechanism in the app, so I want to sign my app's assembly and I think it makes sense.</p>
  
  <ol>
  <li>Since I haven't seen the CLR ever talk about an assembly's signature being invalid, I want to make sure this system really works. Does it? What should I do to make it work?</li>
  <li>Can an attacker concentrate his efforts on the CLR to make it not care about my signature? That is, if he can't tamper with my code because I've signed it, can he tamper with CLR?</li>
  <li>Generally, I would like to know your experience about such safe-guards and protection technologies. Can any one suggest anything else?</li>
  </ol>