I'm new to .NET programming, and I'm wondering - from a security perspective - whether the strong naming scheme used in .NET assemblies completely removes the need for other commonly used techniques such as packing the assembled code?
To be clear, I am talking about .NET applications running on the client side and my goal is to make sure the user (client) cannot modify the application. This is a common problem for Software and Game developers, and I know it cannot be 100% mitigated, but I'm looking for a solution that would stop most crackers.
If I have completely misunderstood the use of strong names please correct me and point me in the right direction :)
edit: I should also probably mention that I'm more concerned with the integrity of the application, not necessarily keeping the algorithms hidden/secret.
Edited to add answer thanks to CodeInChaos
So Strong Names
seems to be totally broken and do not offer any security - given that the attacker has access to assemblies on a machine where he is root.
Strong Names Explained and .NET Framework-Rootkits explain this.
The assemblies in the .NET Framework are placed in folders within the GAC with folder-names corresponding the signature when signed by the original author. The signatures are never verified, so if an attacker replaces a DLL from the framework with his own and places it in a "correct" folder, the attackers DLL will be accepted as legitimate. This means of course that the attacker can change the functions in the framework used for verifying strong names in .NET applications, and therefore allows an attacker to modify .NET applications with his own code.