Home About Forum Imprint Terms and Conditions Contact
Ambiera logo irrFuscator logo

irrFuscator

irrFuscator is an ActionScript 3 obfuscator for flex developers. It will protect swf and air applications as well as their source code, is very fast and provides excellent results. irrFuscator is available for the command line but also comes with a convenient GUI frontend. Just download and go.


irrFuscator, an ActionScript 3 obfuscator
The graphical frontend to the irrfuscator commandline tool.

What does it do

The ActionScript 3 Byte Code (abc) in .swf files still contains a lot of symbols revealing how your program works and what it does, so it is very easy to reverse engineer or steal your code. irrFuscator reads in a directory of .as and .mxml files, processes them and puts them out into a target directory. Simply recompile the directory with the obfuscated files and your .swf files are a lot safer.
irrFuscators current features are:

  • Obfuscation: It changes the names of functions, methods, constants, interfaces and classes using a deterministic or not deterministic naming scheme if wished. Unlike other basic source level obfuscators, irrFuscator will also rename your classes (and the files they are located in accordingly).
  • String encryption: Strings in your code are automatically encrypted if wished.
  • Built-In flex call recognition: irrFuscator will not obfuscate calls to any of the flex libraries so your code will compile of course.
  • Optional automatic stripping of code comments and/or whitespace: If you want to give away your source code, this option is very useful.
  • Speed: irrFuscator is written in C++ and needs only about 10 seconds to obfuscate one megabyte of source code on a standard developer PC.
  • Tested: irrFuscator is used by huge flex based projects like the Darkness Springs Role Playing game which contains more than 100.000 lines of code.
  • Obfuscation exceptions: If you need a symbol to be visible outside of your code or you are using dynamic classes, you can specify any symbol not to be obfusctated. In this way, irrFuscator can also be used with the flash development environment where you have a .fla file and several .as files. (irrfuscator will only obfuscate the .as files)

Example

The following code demonstrates what irrfuscator usually does. The file MapResourceManager.as contains some plain as3 code:

import flash.utils.ByteArray;

// a resource manager specialized for maps 
public class MapResourceManager extends ResourceManager 
{
  public static function canLoadResWithIndex(idx:int):Boolean
  {
    // if the resource is null, it cannot load 
    return getResFromIndex(idx) != null;
  }
	
  public static function loadResString(idx:int):String
  {
    var cl:Class = getResFromIndex(idx);
    if (!cl)
      return "error";
			
    // convert the data into a text string with 
    // 'end' suffix.		
    var data:ByteArray = new cl as ByteArray;			
    return data.toString() + "end.";
  }
} // end class

Symbol names like 'MapResourceManager', 'ResourceManager', 'canLoadResWithIndex', 'getResFromIndex', etc would still be visible in the compiled swf file. After obfuscating the code, irrFuscator would generate a file named '_wm3952.as' which would look like this:

import flash.utils.ByteArray;

public class _wm3952 extends _lc4996 
{		
  public static function _fi5847(idx:int):Boolean
  {
    return _ya7618(idx) != null;
  }
	
  public static function _dm6121(idx:int):String
  {
    var cl:Class = _ya7618(idx);
    if (!cl)
      return irrcrpt(87, "kzrd");
			
    var data:ByteArray = new cl as ByteArray;			
    return data.toString() + irrcrpt(23, "uzd.");
  }	
}

But of course, irrFuscator can do additional source level obfuscation if wished, which is very useful when source code needs to be given away:

import flash.utils.ByteArray; public class _wm3952 extends _lc4996 {
public static function _fi5847(idx:int):Boolean { return _ya7618(idx) 
!= null; } public static function _dm6121(idx:int):String { var cl:Class =
_ya7618(idx); if (!cl) return irrcrpt(87, "kzrd"); var data:ByteArray = 
new cl as ByteArray; return data.toString() + irrcrpt(23, "uzd."); } }

Download

Download irrFuscator from the irrFuscator download page.