I'd be interested to know in exactly what way the software was "cracked". There are a number of ways in which SA protects software. It can encrypt resources, so for example if you have a database connectionstring with a username and password, SA can encrypt that and it should be very difficult to break without the "private key", which you control access to.
Preventing disassembly is the major protection feature to protect your IP and licensing model. Since .NET Intermediate Language is human-readable (although arcane and difficult) it's easier to disassemble back to the original language (VB, C#) than unmanaged Win32 code is. SA helps by mangling method names (so if you have a method called "ConnectDatabase", it will be changed to something less-obvious), rewriting the flow control, and pruning.
I work at Red Gate as a support technician and I have to debug and reverse-engineer software for a living, and I can tell you SA makes it difficult for me. I rely on the exception reporting features to know what went wrong. Since the information about how to decode stack traces and get variable values is all kept on our site, this information is secure against malicious attackers who want to do the same thing.
If you have any information about how, specifically, someone managed to recompile or modify your app, I think I can honestly say that Red Gate would like to know, thanks!