Friday, January 30, 2009

Babel 1.4 Released

After a week spent on testing babel 1.4 I have decided to release the binaries.
I am quite happy about the tests results. Unfortunatly 64 bit support is not complete: I have found that executables once obfuscated run always in WOW64. Whereas dlls seem to run into 64 bit environment if obfuscated without inserting invalid opcodes. Seem that something is wrong into the PE executable so that the OS loader force the WOW64 subsystem to start. Untill now I don't have understood the reason completely so the 64 bit support for now is dalayed.

Bye.

Alberto

Thursday, January 22, 2009

Next 1.4 Release

Long time has passed from release 1.3 and now the new release of babel is close to be released. I hope to close all the tests in this week and upload the 1.4 binaries at the begin of next one.
I would like to thanks all the people that download babel. Thank you for your support and for the time you spend to report to me bugs and feelings.

The 1.4 release have some major changes from previous release:

First of all the obfuscator engine was totally rewritten and this took a lot of time to deveop and test. This new engine fix some bugs that occurred with obfuscation of generic types and also introduce obfuscation of generic type arguments. The new engine was tested also with the code autogenerated  by LINQ query and it seem to perform very well. 
The major improvement is the introduction of obfuscator agent. The agent performs a code static analysis before obfuscation process to find all the symbols that should not to be obfuscated because they will probably break the resulting obfuscated assembly. Agent should improve obfuscation reliability without using rule files (that are also important and of course not removed in this new version).
Another improvement is in string encryption. Now it is possible to encrypt string of assembly where you don't have access to the source code. In version 1.3 string encryption was possible only by inserting two methods into the assembly suited to encrypt and decrypt strings. Although this custom encryption offers a good protection, it is impossible to use when the source code is not available. So when encrypting strings of assemblies that are not proprietary, babel insert a custom decryption method into the obfuscated target.

Also 64 bit fans will enjoy this new version because I have inserted the capability to disable injection of bad IL opcodes so that it is possible to run agnostic CPU asseblies into 64 bit OS (see issue 8).

Another major feature of version 1.4 are XML mapping files. I have to say that is a preview that should need more attention in future release. Mapping files should contains enough information to reconstruct obfuscated call stack. Presently I have not developed an application able to decrypt stack trace but mapping file are a first step towards this aim.

Ok, I hope you like next babel version 1.4. 

Best Regards

Alberto.

Wednesday, December 24, 2008

Marry Christmas and a Happy New Year


I wish you a Merry Christmas and a Happy New Year!
I hope that the new year brings you happiness and only the best things life can bring.
And may all your projects become reality!

Thursday, November 13, 2008

Plans for next release v.1.4

I am working on the next release of babel. That will be tagged version 1.4.
This version will improve obfuscation reliability with the new agent engine.

Babel current version 1.3 has the obfuscator engine that basically obfuscate all types, methods properties and so on according to their visibility.
With the assembly so obfuscated there is no guaranty that during execution everithing goes fine.
Most of the time a runtime exception may occurs with obfuscated types that are reflected.
For istance if you have a private enum type used to enumerate the names of properties stored into some file you may code something like:

private enum MyProperty 
{
Height,
Width,
Color
}

string[] availableProperties = Enum.GetNames(typeof(MyProperty)) ;
...

This code after obfuscation may became:

private enum a
{
a,
b,
c
}

string[] availableProperties = Enum.GetNames(typeof(a)) ;

so at the end the property names will be (a, b, c)  and the program will no run as expected.

In babel version 1.3 so you are forced to write an XML rule file with a rule that block the oobfuscation of the enum type MyProperty.

With obfuscation agent the obfuscated assembly is parsed before obfuscation and all the types that may cause problem are left out from renaming.

The agent should take care of many rules and dig also into IL code to do his job increasing the total obfuscator processing time but I think is a great feature.
 
To write  the obfuscation agent I had to change the babel obfuscator engine. This new engine is faster then the one in version 1.3 and it also fixes some bug that occurs with generic types.
These days I am debugging this new engine and after that I will start to code the agent.

Another think I like to change in v.1.4 is string encryption.
If you used babel string encryption you know that you have to provide code to encrypt and decrypt strings to the obfuscator. This is a nice feature because you can customize your encryption algorithm but have also its drawback (maybe):
You cannot encrypt strings of assemblies where the code is not avaliable (try to think a way to  overcome this limitation with babel 1.3).
So I'd like to insert a basic encryption algorith to the obfuscated assemblies that do not provide their encryption and decryption function.

Another aspect that I want to take care is 64 bit compatibility.
Recently a bug was notified about obfuscation of assembly targetin 64 bit platform (issue id 8). This bug turn out to be due to the invalid IL opcodes inserted to the beginning of every method. These bad opcodes prevent Lutz Roeder .NET Reflector (unfortunately not ILDASM) to show the method IL. But on 64 bit platform, the IL of assemblies compiled with "Any CPU" is validated by runtime before  execution, and because the obfuscated MSIL is not valid, the assembly is loaded into WOW64 subsystem. If the obfuscated assembly is a dll refereced by an executable running in full 64 bit environment, Kaboom! the application crash in a very bad way.

Now I think that this kind of IL obfuscation that break execution in 64 bit environment does not add so much to the IL scrabling performed by babel so I think that this feature should be removed in future release.
What do you think about?

Please use this blog to discuss about babel feature or about obfuscation in general.
Your post will be usefull to me to improve babel and also to other people that intend to protect their asseblies.


Tuesday, November 11, 2008

Babel Obfuscator Blog

Hi this is the new blog created to discuss about Babel Obfuscator.
Please leave here your comments about babel.

I will use this blog to give you some news about the developing status,
feature that I'd like to add, and some useful hints for get the best  from babel.

Please post post and post!

Thank you,

Bye