My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
WhatItDoes  
Describes what Obfuscar does
Featured
Updated Feb 4, 2010 by drcfor...@gmail.com

What does Obfuscar do?

Basically, Obfuscar scrambles the metadata in a set of assemblies. It renames everything to the minimal set of names that can be used to identify them, given signatures and type information. Since these new names are shorter than the old ones, it also dramatically shrinks executable size.

An Example

The following method is from the example included in the release:

       public ExampleUI( )
       {
               InitializeComponent( );

               ClassX cx = new ClassX( "Some Text" );

               displayText.Text = cx.DisplayText;
       }

The code can be decompiled (via Reflector) to:

       public ExampleUI()
       {
               this.InitializeComponent();
               this.displayText.Text = new ClassX("Some Text").get_DisplayText();
       }

After obfuscation, the code can be decompiled (via Reflector) to:

       public A()
       {
               this.A();
               this.a.Text = new A.A("Some Text").A();
       }

It's a simple example, but it scales...For example, given a reasonably sized code base, one could easily run into a class named 'A' (in the namespace 'A') with 7 methods, 4 properties, and 5 fields named 'A', with several more methods, properties, and fields named 'a'.

To try it out, see BasicExample.

Caveat

It makes debugging / reverse engineering very difficult, but wouldn't stop someone who really wants to reverse engineer it. It would at least slow them down, and would deter casual observers.

Comment by cosmin.s...@gmail.com, Jul 5, 2010

Hey,

Either I seem to have a problem with using your program, or the feature is not supported. I used it on a .net exe and, after obfuscation, using redgate Reflector, i could see all the .net framework function names (I mean functions like: String resultedHash = Convert.ToBase64String?(hasher.ComputeHash?(Encoding.Unicode.GetBytes?())); or StreamReader? reader = new StreamReader?(sPath); ). Also, although in the functions, the string constants were not there, i could find their plain values in the Reflector. Is it me or it's not possible to completely obfuscate public .net function names/strings?

Thanks! And you did a great job so far!

Comment by KicKench...@gmail.com, Jan 4, 2011

You cannot rename .NET Framework libraries and functions.

Comment by mati...@gmail.com, Sep 11, 2011

Actually the example does not scale to this amount. There are many obfuscators that can use a dictionary for methods, a dictionary for properties and a dictionary for fields. So simply re-obfuscating with method1, method2 ... method999 as your "methods dictionary" etc. significantly reduces the problem.

Comment by pdomin...@gmail.com, Oct 26, 2011

Hi all

First of all Congratulations for your work!!!! I am very impresive with this product. I would like to ask you a question regarding enums. Is it possible to add an exception to avoid them? Our project probably contains around 300-400Enums and [Obfuscate(true/false)] option it is not my favourite option. ;)

Thank you very much in advance


Sign in to add a comment
Powered by Google Project Hosting