i has some expirience working with:
9Rays (Spices), RemoteSoft (Salamander) and PreEmptive Solutions
(DotFuscator), Demeanor.
I found that all above obfuscators just do renaming of custom properties,
classes, and method names.
Some provide good strings encryption and even some refactoring.
Here is an hidden problem for commercial applications.
..Net is not translatable to java-like opcodes - its an assembler for virtual
machine, so all the main calls and method names will remain (it helps with
orientation).
For example, if you're using Licensing Class - the only thing you need to do
to brake 'licensed' application is replace 'throw' with 'ret' (in MSIL),
and it will not die on left license; as general licensing logic is:
'validate or die' - this is very breakable.
So the obfuscators are good to complicate code insight, but not enough to
make real protection in most cases.
The way is custom loaders with advanced polymorphic logic, but you will
loose interpretability.
Regards,
Dm.