strong.codes

strong.codesI am very excited to announce that, together with my colleagues Johan Wehrli and Julien Rinaldini , we are launching a company, strong.codes, which will be active in the domain of software protection. The main goal of strong.codes is to commercialize strong.protect, an evolution of our long-time research project Obfuscator-LLVM, and offer services around its use.

strong.protect integrates innovative software protection methods, such as code obfuscation and tamper-proofing, code watermarking, anti-debugging tricks insertion, jailbreak and emulation detection, etc., in one of the most powerful compilation frameworks of the moment. The goal of strong.protect is to help its users to fight software piracy by making it much more expensive and complicated.

Note that we will continue to maintain the free and open-source version Obfuscator-LLVM, which will have to be considered as a light version of strong.protect.

Presenting Obfuscator-LLVM to the Academic World

On May 19th, 2015, we have presented our paper Obfuscator-LLVM: Software Protection for the Masses, co-written with Julien Rinaldini, Johan Wehrli and Julie Michielin at the IEEE-SPRO’15 workshop, colocated with ICSE, in Firenze (Italy). The talk slides are also available and the open-source version of our tool can be downloaded here.

Here is the paper’s abstract:

Software security with respect to reverse-engineering is a challenging discipline that has been researched for several years and which is still active. At the same time, this field is inherently practical, and thus of industrial relevance: indeed, protecting a piece of software against tampering, malicious modifications or reverse-engineering is a very difficult task. In this paper, we present and discuss a software obfuscation prototype tool based on the LLVM compilation suite. Our tool is built as different passes, where some of them have been open-sourced and are freely available, that work on the LLVM Intermediate Representation (IR) code. This approach brings several advantages, including the fact that it is language-agnostic and mostly independent of the target architecture. Our current prototype supports basic instruction substitutions, insertion of bogus control-flow constructs mixed with opaque predicates, control-flow flattening, procedures merging as well as a code tamper-proofing algorithm embedding code and data checksums directly in the control-flow flattening mechanism.