Diablo is released under the GNU General Public License v2. As such you are free to use, modify and redistribute it free of charge, as long as you contribute all changes back to the community. We would very much appreciate it if you cited our LCTES paper [bibtex] if you publish something based on work you've done with Diablo.

Diablo is a research prototype that is under heavy development. Do not expect Diablo releases to be production quality code! However, we are willing to support Diablo users, so if you experience any problems using Diablo, or if you have any questions or suggestions, please contact us.

Latest development version

You can get the latest version from Github.

A number of sample frontends for different architectures are included, for compaction, obfuscation, etc. However, only the ARM and i386 backends are maintained. You can use these as inspiration to build your own Diablo-based tools.

Auxiliary downloads:

In order to work correctly, Diablo needs some information about code and data in a program that a regular GCC-based toolchain does not preserve (the ARM ADS v1.1 and RVCT toolchains do preserve this information). Therefore, you need to patch any GCC-based tool chain before you can use Diablo on programs generated by it. These patches do not influence the generated code, they only preserve some compile-time information that is also useful for Diablo but not for a regular linker.

You can find the patches on Github.

Getting started using our Docker image

The easiest way to get Diablo compiled and running, including having a pre-built ARM toolchain, is by using a Docker image we developed for the Aspire FP7 project. It can be found on Github. Note that this Docker contains more than just Diablo: it features the entire Aspire protection tool chain, of which Diablo is just a part.