Project Description
Exepack.NET is executable file compressor for .NET Framework. It allows to package your .NET application consisting of an executable file and several class libraries into single compact easy-to-deploy executable, protected against disassembling. Exepack.NET is developed in C#.

Exepack.NET version 0.03 Beta4 Screenshot

Project History
I started this project as an experiment when I needed to package my app (an .EXE with a few .DLLs) into one executable. I didn't want to use ILMERGE because of the size of the whole bunch of files (some 3 mb). For the first time, I wrote loader, and it worked quite well. So I decided to make the packer tool to complement my loader. I always wanted to write such a thing anyway :-)

Walkthrough (russian only, sorry)
Libraries used in Exepack.NET
What's new since 0.03 beta
  • Upgraded to .NET Framework 4.0
  • Updated Mono.Cecil library to 0.9.4.0

What's new since 0.02 alpha
  • Improved core assemblies detection (issue #3998)
  • Improved handling referenced assemblies (issue #4075)
  • Removed static Loader class, made loader methods global
  • Added compression progress dialog to WinForms version

Protection against disassembling
The main goal of Exepack.NET is to simplify software deployment, not to protect your intellectual property. Nevertheless, Exepack.NET 0.03 offers some basic protection against disassembling. Here is a screenshot demonstrating the current version of Red Gate .NET Reflector while trying to disassemble compressed file:

Red Gate .NET Reflector 7.1 Crashes on Exepack.NET 0.03 Beta4

Technology Limitations
  • Compressed executable file may require more privileges to run
  • Mixed-mode C++ assemblies cannot be compressed (Assembly.Load method fails to load them as they don't contain .relocs section)
  • Compressing signed assemblies is not tested yet

Future Plans
  • Refactoring (since 0.01 alpha)
  • WinForms GUI (since 0.02 alpha)
  • Technology improvements (CRC, compressed stream size, etc) (stream size added in 0.01 alpha)
  • Add powerful LZMA compression via free 7z SDK
  • Decompression feature
  • Configuration files
  • Visual Studio integration (post-build events)
  • Drag-n-drop utility for executables and VS.NET projects
  • Extract/compress icons, version information, resources, etc. (since 0.02 alpha)
  • Get rid of C# loader, use reflection to generate packed assemblies (since 0.01 alpha)
  • Get rid of Reflection.Emit, use Mono.Cecil to generate packed assemblies
  • Add optional obfuscation, suggested by unruledboy
  • Multi-targeting (.NET 2.x–4.x platforms support)

Last edited Jun 27, 2011 at 10:38 PM by yallie, version 27