Patent Publication Number: US-8533826-B2

Title: Method for protecting the source code of a computer program

Description:
TECHNICAL FIELD 
     The field of this invention is the protection of computer data and programs and more specifically it concerns a method for obfuscating a computer program to prevent disassembly, in other words reconstruction of the source code starting from the executable code, and/or the modification with patches by unauthorised persons. 
     The invention also relates to a computer program recorded on a medium and comprising instruction lines that, when executed by a computer, can obfuscate said program. 
     The invention also relates to use of the method according to the invention to obfuscate a computer program recorded on a medium and that will perform the functions of a flight simulator when it is executed on a computer. 
     STATE OF PRIOR ART 
     Known techniques for the obfuscation of computer programs are based essentially on the use of utility programs called packers, the function of which consists of compressing the executable program (.exe, .dll, .ocx, etc.) and simultaneously encrypting it. 
     Therefore packers are composed of two parts:
         the compression/encryption routine external to the compressed program;   the decompression/decryption routine onboard the compressed program.       

     Packers are more appropriate for protection against copies than for program obfuscation. There are also software tools called unpackers that are capable of automatically eliminating the protection made on a program by means of a packer. Moreover packers introduce transformations to the program to be protected that make execution more complex. 
     Furthermore, in techniques according to prior art, packers act on the binary version of the compiled program. This makes it impossible to find the semantic information that was used for obfuscating. These packers can also act on the source program. One disadvantage of this method is due to the fact that the resulting obfuscation is not reliable and can be truncated during the compilation/optimisation phase. 
     One purpose of the invention is to make simple and efficient obfuscation independent of the source language of the program to be obfuscated. 
     Another purpose of the invention is to conceal program transformations. 
     PRESENTATION OF THE INVENTION 
     These purposes are achieved by means of an obfuscation method that consists of inserting processing steps before the object code is generated such that the obfuscation acts on the machine language generated after optimisation. 
     This method comprises the following steps:
         translating the source code of the program to be obfuscated into a target code,   generating an object code starting from said target code,   applying an obfuscation program to protect said source code,       

     According to the invention, the obfuscation step is executed after the source code has been translated into a target code and before said object code is generated. 
     Said obfuscation program also comprises a step to optimise said target code. 
     Preferably, said source code is written in a high level language with a high abstraction level and said target code is in assembly language. 
     In one preferred embodiment, the obfuscation program consists of modifying at least one line of the target code so as to prevent reproduction of the source code by disassembling the object code and by analysing the target code obtained by this disassembly. 
     Said obfuscation program comprises the following steps to achieve this purpose: 
     a—selecting a numeric variable V used by said program or an instruction of said program using said numeric value V, 
     b—defining at least one operation, execution of which provides said numeric value V, 
     c—substituting at least one line of said program by a new program line performing said operation. 
     According to another characteristic, the method according to the invention also comprises a step that consists of assembling the new program line to obtain opcodes from it and to use the opcodes obtained as operands of the operation providing the numeric value V. 
     In a first variant, the value of said numeric variable V is then replaced by the result of the previously defined operation. 
     In another variant, the numeric coding of said instruction is replaced by the memory address pointed at by the previously defined operation. 
     Steps a), b) and c) are repeated recursively. 
     The method according to the invention is used by a computer program recorded on a medium and comprising instruction lines that, when executed by a computer, obfuscates said program in accordance with steps a) b) and c). 
     The method according to the invention can be used to obfuscate a computer program recorded on a medium and that will perform the functions of a flight simulator when executed by a computer. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Other characteristics and advantages of the invention will become clear after reading the following description taken as a non-limitative example with reference to the appended FIGURE showing the essential steps in the method. 
     
    
    
     PARTICULAR EMBODIMENTS 
     The invention is applicable to obfuscating a computer program recorded on a medium and that, when executed by a computer, will perform simulation functions, processing of security data and management of industrial processes. 
     In general, the method according to the invention is applicable to all computer programs comprising a plurality of instruction lines written in a source language and that will be translated by a compiler into a target language. For example, the source language may be a programming language with a high degree of abstraction and the target language is an assembly language or a machine language called object code. 
     The appended FIGURE illustrates the essential steps in the method according to the invention. 
     Step  2  consists of finding the compilation step from the source code to the object code in the existing compilation sequence. 
     Step  4  consists of inserting steps  6 ,  8  and  10  into the compilation step. 
     Step  6  consists of generating files in assembly language starting from files in the source language while maintaining optimisation options associated with the compilation phase. 
     Step  8  consists of applying the obfuscation program to files in assembly language to generate files in obfuscated assembly languages. In this case, the obfuscation program performs a function similar to a code optimiser. 
     Step  10  consists of generating object files starting from files in assembly language. 
     Inserting the obfuscating program has very little impact on a project under development. The only modification made to the compilation sequence is the addition of an instruction calling the obfuscating program during generation of the file in machine language. This is done by specifying an option in the compiler command line. The obfuscation program then uses information contained in the file in generated machine language, obfuscates it and regenerates a file in machine language which will then be reused in the following compilation steps. 
     This solution makes obfuscation independent from the source language. The obfuscation program also acts as close to machine language as possible but with a good information level, and therefore enables a precise obfuscation.