ThinkGeo.com    |     Documentation    |     Premium Support

Obfuscation and Assembly Embedding

Hi Guys,



We use an obfuscator to protect our net executables.  This tool also allows assembly embedding reducing the final executable to a single file which greatly eases the problems of deployment.



Just tried this with an app that has the 5.5 version in it and it does not work.  I can embed any of the assemblies the executable uses except the DesktopEdition.dll which cause an exception at runtime when any property of the map control is accessed.  MapsuiteCore, GeoApi and PresentationCore all embed as do a whole bunch of others.


I have tried a number of tools, all fail on DektopEdition.dll.  Have disabled all obfuscation settings in all of them so they all just use embedding and the problem persists.


You can embed all the rest of the assemblies and have the DesktopEditon assembly in the same folder as the executbale and it runs fine.


Any thoughts?


John




Just a little additional info.   We are using a similar (or the same?) tool.     I was able to build a single-file app with 5.5 in it.    
  
 I wonder if it is a difference in the tool, or settings?   I think we are using XenoCode Visual Studio Application ISV Edition?    I know almost nothing about the tool.   We bought it two years ago for a special project and got something that worked after a few hours of dinking with it.   And then, I had to update the project, including ThinkGeo, a couple of weeks ago, and it "just worked".    Beyond that, I know nothing about the tool, except that we are not doing any obfuscation. 
  


Hi Ted,


Thanks for that.  We do have XenoCode but are trying to avoid it.  Not sure if you are using embedding or building a virtual exe where Xenocode inlcudes the assemblies inside a sandbox type of thing, thats different to assembly embedding.


Regards


John


 



Ahhhh.    I think we might be doing the sandbox thing, now that you mention it.    Sorry the confusion!

Hello John, 
  
 Thanks for your post, could you please provide more information to guild me recreate this problem? 
  
 What tools are you trying? Is that possible to provide a video that can show how to operate step by step? 
  
 Thanks for your help. 
  
 Regards, 
  
 Gary

Hi Gary,


Using SmartAssembly (6.6.144) from Red Gate Software:-


1. Create a new Winforms project, drop a Map on it and in the form constructor after the Initialization, set one or two properties on the map such as .AdornmentOverlay.ShowLogo to false and a few others.


2. Build a release version of the project and check that it runs.


3. Run SmartAssembly, create a new project, set the input assembly to the exe you just built with VS and pick a suitable output folder.


4. Ignore all the options except for Dependencies Embedding where you would check both the DecktopEdition and MapSuiteCore assemblies.


5. Build the SmartAssembly project and then try running the Exe generated by SmartAssembly.  It will generate an exception on the line where you attempted to turn the logo off or there or there abouts.  You can see the exception (which is a NullReferenceException) by clicking the button at the bottom of the build screen maked "Build with Self-Diagnostic" which will re-build the exe.After that run it again, you will now get a nice excpetion dialog with all the info.


6. Go back to the Project Settings and uncheck DesktopEdition embedding leaving MapSuiteCore as embedded .  Build the project but before running the generated exe make sure you copy the DesktopEdition.dll into the SmartAssembly output folder.  The exe should now run without problems.


I tried this with 5.5 production and then again with the latest daily builds, both failed, tried both Net 3.51 and 4.0


If you don't understand any of this please give me a ring and I will talk you through the process.


Regards


John


 


 



Hello John, 
  
 Thanks for your further information. 
  
 If you are using the SmartAssembly, we have met this problem before. 
  
 But sorry to say,  there is some conflict between Clisecure and SmartAssembly, and we contact Red-Gate for this problem, they said: 
  
  Unfortunately it is difficult for SmartAssembly to process an assembly that has already been processed by a different Obfuscater. This is because the metadata can be stripped out and that appears to be the case here. So sadly it looks like this assembly can’t be merged or embedded , and you will need to distribute it will your application. 
  
 So, there is a solution, we can use SmartAssembly to obfuscate our dlls, then you can use SA to obfuscate your application, I have tested this on How Do I Samples, and it’s working. You need have a list about which dlls you need, and we can make this one time for you, and you need to create a ticket if you want to try this way. 
  
 Sorry for the inconvenience. 
  
 Regards, 
  
 Gary

Hi Gary,


Thanks for the update.  If it works for MapSuiteCore which is obfuscated why does it not work for the Desktop assembly?


Would rather not go down the route of special assemblies, which obfuscator do you use and and does it support embedding?


Regards


John


 



Hello John, 
  
 We are using Clisecure and there are some difference between MapSuiteCore and DesktopEdition. 
  
 Regards, 
  
 Gary

Hi Gary,


Thanks for that and I appreciate your efforts.


We will drop back to version 5 which does not have the problem.


Regards


John


 



Hello John, 
  
 You are welcome, please feel free to let us know your problems. 
  
 Regards, 
  
 Gary