Code to determine if running obfuscated?

.NET obfuscator and automated error reporting

Moderators: Luke Jefferson, melvyn.harbour, dom.smith

Code to determine if running obfuscated?

Postby eric-914 » Mon Dec 10, 2012 8:44 pm

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...
eric-914
 
Posts: 28
Joined: Fri Nov 30, 2012 5:51 pm

Postby Brian Donahue » Tue Dec 11, 2012 12:18 pm

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.
Brian Donahue
 
Posts: 6670
Joined: Mon Aug 23, 2004 10:48 am

Postby eric-914 » Wed Dec 12, 2012 5:26 pm

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:
Code: Select all
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:
Code: Select all
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.
eric-914
 
Posts: 28
Joined: Fri Nov 30, 2012 5:51 pm

Postby Brian Donahue » Wed Dec 12, 2012 5:59 pm

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.
Brian Donahue
 
Posts: 6670
Joined: Mon Aug 23, 2004 10:48 am


Return to SmartAssembly 6

Who is online

Users browsing this forum: No registered users and 1 guest