Code to determine if running obfuscated?

eric-914eric-914 Posts: 46
edited December 12, 2012 11:59AM in SmartAssembly
Hello, odd question here...

Is there a way, w/in my code itself, to determine if it has been processed by SmartAssembly?

Basically, I want to prevent accidental deployment w/out it being obfuscated first, so I'd like to add some code to indicate if it hasn't been 'processed' yet.

If not directly w/in S/A, I'm thinking since S/A can embed libraries into the .exe itself, maybe determine if a particular library has been embedded or not. If so, then yes, it's been processed. If no, then it hasn't.

Anyway, wonder if anyone has any ideas about this.

Thanks in advance...

Comments

  • Brian DonahueBrian Donahue Posts: 6,590 Bronze 1
    You can use Reflection to find the "PoweredBy" attribute of the assembly and that will give you the version of SmartAssembly it had been processed with. Please see:

    http://sdk.red-gate.com/index.php/Check_SA_Version

    As for getting a list of embedded assemblies - I don't know how you'd go about that as it is unsupported and for the sake of protecting the IP I'm not sure if it should be externally documented.
  • Unfortunately, your link indicates it requires a Mono dll library attached to work.

    I found I could do it by the following:

    Using the Assembly object from the .exe, get referenced assemblies via:
    assembly.GetReferencedAssemblies()
    

    Then w/in one of my library .dll's that I know will be merged via S/A, I get it's assembly name:
    Assembly.GetExecutingAssembly().GetName().FullName
    

    I have noticed that this name will show up in the reference list when the app has NOT been obfuscated. But this name will disappear AFTER obfuscation (because it's no longer an external library, it's been merged w/ the .exe).

    I use this fact to differentiate between the two states.
  • Yeah, .NET Reflection is missing the gubbins to read assembly-level attributes. Mono Cecil has a metadata reader that can do this. Believe me, I tried with plain .NET Reflection and it doesn't get the attributes.
Sign In or Register to comment.