Brevet FR2942559A1 — publié le 20100827

PROCÉDÉ DE PROTECTION DU CODE SOURCE D'UN PROGRAMME D'ORDINATEUR DESCRIPTION 5 DOMAINE TECHNIQUE L'invention se situe dans le domaine de la protection des données et des programmes d'ordinateur et concerne plus spécifiquement un procédé d'obscurcissement d'un programme d'ordinateur afin d'en 10 empêcher le désassemblage, c'est-à-dire la reconstruction du code source à partir du code exécutable, et/ou la modification (patch) par des personnes non autorisées. L'invention concerne également un programme 15 d'ordinateur enregistré sur un support et comportant des lignes d'instructions qui lorsqu'elles sont exécutées par un ordinateur permettent d'obtenir l'obscurcissement dudit programme. L'invention concerne également une 20 utilisation du procédé selon l'invention pour obscurcir un programme d'ordinateur enregistré sur un support et destiné à réaliser les fonctions d'un simulateur de vol lorsqu'il est exécuté sur un ordinateur. ÉTAT DE LA TECHNIQUE ANTÉRIEURE 25 Les techniques d'obscurcissement de programmes d'ordinateur connues sont essentiellement basées sur l'utilisation d'utilitaires appelés � packers � dont la fonction consiste à compresser le programme exécutable (.exe, .dll, .ocx, etc...) et à le 30 crypter simultanément. 2 Les � packers � sont donc constitués de deux parties . - la routine de compression/cryptage, extérieur au programme compressé ; - la routine de décompression/décryptage embarquée dans le programme compressé. Les � packers sont plus adaptés à la protection contre la copie qu'à l'obscurcissement des programmes. En outre, il existe des outils logiciels appelés "dépackers" qui sont capables de supprimer automatiquement la protection réalisée sur un programme au moyen d'un packer. Par ailleurs, les packers introduisent des transformations sur le programme à protéger qui en complexifient l'exécution. En outre, dans les techniques de l'art antérieur, les �packers� agissent sur la version binaire du programme compilé. Ceci ne permet pas de retrouver l'information sémantique ayant servie à l'obscurcissement. Ces �packers� peuvent agir également sur le programme source. Un inconvénient de cette méthode résulte du fait que l'obscurcissement qui en résulte n'est pas fiable et peut être tronqué par la phase de compilation/optimisation. Un but de l'invention est de réaliser un obscurcissement simple et efficace et indépendant du langage source du programme à obscurcir. Un autre but de l'invention est de masquer les transformations d'un programme. EXPOSÉ DE L'INVENTION Ces buts sont atteints au moyen d'un procédé d'obscurcissement consistant à insérer des 3 étapes de traitement avant la génération du code objet de sorte que l'obscurcissement agisse sur le langage machine généré après optimisation. Ce procédé comporte les étapes suivantes : - traduire le code source du programme à obscurcir en un code cible, - générer à partir dudit code cible un code objet, - appliquer un programme d'obscurcissement pour protéger ledit code source, Selon l'invention, l'étape d'obscurcissement est exécutée après la traduction du code source en code cible et avant la génération dudit code objet. En outre, ledit programme d'obscurcissement comporte une étape d'optimisation dudit code cible. Préférentiellement, ledit code source est écrit dans un langage évolué de haut niveau d'abstraction et ledit code cible est en langage assembleur. Dans un mode préféré de réalisation, le programme d'obscurcissement consiste à modifier au moins une ligne du code cible de manière à empêcher la reproduction du code source par désassemblage du code objet et par analyse du code cible obtenu par ce désassemblage. A cet effet, ledit programme d'obscurcissement comporte les étapes suivantes : a - sélectionner une variable numérique V utilisée par ledit programme ou une instruction dudit programme utilisant ladite valeur numérique V, 4 b - définir au moins une opération dont l'exécution fournit ladite valeur numérique V, c - substituer au moins une ligne dudit programme par une nouvelle ligne de programme réalisant ladite opération. Selon une autre caractéristique, le procédé selon l'invention comporte en outre une étape consistant assembler la nouvelle ligne de programme pour en obtenir les opcodes et à utiliser les opcodes obtenus comme opérandes de l'opération fournissant la valeur numérique V. Dans une première variante, la valeur de ladite variable numérique V est ensuite remplacée par le résultat de l'opération préalablement définie. Dans une autre variante, le codage numérique de ladite instruction est remplacé par l'adresse mémoire pointée par l'opération préalablement définie. Les étapes a), b) et c) sont répétées de façon récursive. Le procédé selon l'invention est mis en oeuvre par un programme d'ordinateur enregistré sur un support et comportant des lignes d'instructions qui lorsqu'elles sont exécutées par un ordinateur permettent d'obtenir l'obscurcissement dudit programme conformément aux étapes a) b) et c). Le procédé selon l'invention peut être utilisé pour obscurcir un programme d'ordinateur enregistré sur un support et destiné à réaliser les fonctions d'un simulateur de vol lorsqu'il est exécuté par un ordinateur. BRÈVE DESCRIPTION DES DESSINS D'autres caractéristiques et avantages de l'invention ressortiront de la description qui va suivre, prise à titre d'exemple non limitatif, en 5 référence à la figure annexée illustrant les étapes essentielles du procédé. MODES DE RÉALISATION PARTICULIERS L'invention s'applique à l'obscurcissement d'un programme d'ordinateur enregistré sur un support et destiné à réaliser, lorsqu'il est exécuté par un ordinateur, des fonctions de simulation, des traitements de données de sécurité, ou encore de gestion de processus industriels. De manière générale, le procédé selon l'invention est applicable à tous les programmes d'ordinateur comportant une pluralité de lignes d'instructions écrites dans un langage source et destiné à être traduit par un compilateur en un langage cible. Le langage source peut être par exemple un langage de programmation de haut niveau d'abstraction et le langage cible est un langage d'assemblage ou langage machine appelé code objet. La figure annexée illustre les étapes essentielles du procédé selon l'invention. L'étape 2 consiste à trouver dans la chaine de compilation existante l'étape de compilation du code source au code objet. L'étape 4 consiste à insérer dans l'étape de compilation les étapes 6, 8 et 10. L'étape 6 consiste à générer des fichiers en langage assembleur à partir des fichiers en langage 6 source tout en préservant les options d'optimisation associées à la phase de compilation. L'étape 8 consiste à appliquer le programme d'obscurcissement aux fichiers en langage assembleur pour générer des fichiers en langages assembleur obscurcis. Dans ce cas, le programme d'obscurcissement assure une fonction similaire à celle d'un optimiseur de code. L'étape 10 consiste à générer les fichiers objets à partir des fichiers en langage assembleur. L'insertion du programme obscurcissant a un impact très faible sur un projet en développement. En effet, la seule modification apportée à la chaîne de compilation est l'ajout d'une instruction appelant le programme obscurcissant lors de la génération du fichier en langage machine. Cela est réalisé en spécifiant une option dans la ligne de commande du compilateur. Le programme obscurcissant utilise ensuite les informations contenues dans le fichier en langage machine généré, l'obscurcit, et régénère un fichier en langage machine, qui sera ensuite repris dans les étapes de compilations suivantes. Cette solution rend l'obscurcissement indépendant du langage source. De plus le programme obscurcissant agit au plus près du langage machine, avec toutefois un bon niveau d'informations, et donc permet un obscurcissement précis. REVENDICATIONS1. Procédé de protection du code source d'un programme d'ordinateur comportant les étapes suivantes . - traduire ledit code source en un code cible, - générer à partir dudit code cible un code objet, - appliquer un programme d'obscurcissement pour protéger ledit code source, procédé caractérisé en ce que l'étape d'obscurcissement est exécutée après la traduction du code source en code cible et avant la génération dudit code objet. 2. Procédé selon la revendication 1, dans lequel ledit programme d'obscurcissement comporte en outre une étape d'optimisation dudit code cible. 3. Procédé selon la revendication 2, dans 20 lequel ledit code source est écrit dans un langage évolué de haut niveau d'abstraction et ledit code cible est en langage assembleur. 4. Procédé selon l'une des revendications 1 25 à 3, dans lequel ledit programme d'obscurcissement consiste à modifier au moins une ligne du code cible de manière à empêcher la reproduction du code source par désassemblage du code objet et par analyse du code cible obtenu par ce désassemblage. 15 308 5. Procédé selon la revendication 4, dans lequel ledit programme d'obscurcissement comporte les étapes suivantes . a - sélectionner une variable numérique V 5 utilisée par ledit programme ou une instruction dudit programme utilisant ladite valeur numérique V, b - définir au moins une opération dont l'exécution fournit ladite valeur numérique V, c - substituer au moins une ligne dudit 10 programme par une nouvelle ligne de programme réalisant ladite opération. 6. Procédé selon la revendication 5 comportant en outre une étape consistant assembler la 15 nouvelle ligne de programme pour en obtenir les opcodes et à utiliser les opcodes obtenus comme opérandes de l'opération fournissant la valeur numérique V. 7. Procédé selon la revendication 6 20 consistant à remplacer la valeur de ladite variable numérique V par le résultat de l'opération définie à l'étape b). 8. Procédé selon la revendication 6 25 consistant à remplacer le codage numérique de ladite instruction par l'adresse mémoire pointée par l'opération définie à l'étape b). 9. Procédé selon l'une des revendications 7 30 ou 8, dans lequel les étapes a), b) et c) sont répétées de façon récursive. 9 10. Programme d'ordinateur enregistré sur un support et comportant des lignes d'instructions qui lorsqu'elles sont exécutées par un ordinateur permettent d'obtenir l'obscurcissement dudit programme conformément au procédé selon l'une des revendications 6 à 9. 11. Utilisation du procédé selon l'une des revendications 1 à 10 pour obscurcir un programme d'ordinateur enregistré sur un support et destiné à réaliser les fonctions d'un simulateur de vol lorsqu'il est exécuté par un ordinateur.