FR2887097A1 - METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE - Google Patents

METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE Download PDF

Info

Publication number
FR2887097A1
FR2887097A1 FR0505988A FR0505988A FR2887097A1 FR 2887097 A1 FR2887097 A1 FR 2887097A1 FR 0505988 A FR0505988 A FR 0505988A FR 0505988 A FR0505988 A FR 0505988A FR 2887097 A1 FR2887097 A1 FR 2887097A1
Authority
FR
France
Prior art keywords
code
byte
key
decrypting
encrypted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
FR0505988A
Other languages
French (fr)
Inventor
Benjamin Bonnet
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Orange SA
Original Assignee
France Telecom SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by France Telecom SA filed Critical France Telecom SA
Priority to FR0505988A priority Critical patent/FR2887097A1/en
Priority to PCT/FR2006/050558 priority patent/WO2006134304A2/en
Publication of FR2887097A1 publication Critical patent/FR2887097A1/en
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Facsimiles In General (AREA)
  • Facsimile Transmission Control (AREA)
  • Accessory Devices And Overall Control Thereof (AREA)

Abstract

Procédé de protection d'un code-source en langage semi-interprété. Selon l'invention, ledit code-source (11) étant compilé en un code-octet (12), ledit procédé comprend les étapes consistant à :- chiffrer ledit code-octet (12) par un algorithme de chiffrement,- fournir à une machine utilisatrice (20) dudit code-source (11) le code-octet chiffré (13) et le code-octet d'un chargeur (14) de classes déchiffrant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (Ks) de déchiffrement disponible sur ladite machine utilisatrice (20).Application à la protection des codes-source contre la reproduction illicite.Method for protecting a source code in semi-interpreted language According to the invention, said source code (11) being compiled into a byte-code (12), said method comprises the steps of: - encrypting said code-byte (12) by an encryption algorithm, - providing a user machine (20) of said source code (11) the encrypted byte code (13) and the byte code of a deciphering class loader (14) capable of decrypting said encrypted code-byte (13) by means of a decryption key (Ks) available on said user machine (20) .Application for the protection of source codes against illegal reproduction.

Description

PROCEDE DE PROTECTION D'UN CODE-SOURCE EN LANGAGE SEMI-METHOD FOR PROTECTING A SOURCE CODE IN SEMI-LANGUAGE

INTERPRETEINTERPRETER

La présente invention concerne un procédé de protection d'un code-source en langage semi-interprété.  The present invention relates to a method for protecting a source code in semi-interpreted language.

L'invention trouve une application particulièrement avantageuse dans le domaine de la protection des codes-source en langage semi-interprété contre la reproduction illicite ou leur utilisation non autorisée par un distributeur.  The invention finds a particularly advantageous application in the field of the protection of source codes in semi-interpreted language against the illicit reproduction or their unauthorized use by a distributor.

On entend ici par langage semi-interprété un langage reposant sur le principe d'une machine virtuelle et d'un code intermédiaire, ou codeoctet . Référence sera faite plus spécialement au langage Java, bien que l'invention puisse être mise en oeuvre par d'autres langages, tels que Flash de io Macromédia et C# de Microsoft.  Here we mean by semi-interpreted language a language based on the principle of a virtual machine and an intermediate code, or codeoctet. Reference will be made more specifically to the Java language, although the invention may be implemented by other languages, such as Macromedia Flash and Microsoft C #.

Avant d'être exécutable, un code-source Java écrit par un développeur est compilé en code-octet ou bytecode , c'est-à-dire en un langage interprétable directement par une machine virtuelle Java (JVM) qui charge ce code en utilisant un chargeur de classes ( Classloader ). Ce chargeur de classes est un composant de la machine virtuelle.  Before it can be executed, a Java source code written by a developer is compiled into code-byte or bytecode, that is to say into a language directly interpretable by a Java virtual machine (JVM) that loads this code using a classloader. This class loader is a component of the virtual machine.

Cependant, il est possible de facilement décompiler ce code-octet en utilisant des programmes de décompilation, accessibles sur l'Internet par exemple. Au cours de cette décompilation, certaines informations sont perdues, comme par exemple les commentaires et le nom de variables locales, mais le code-octet lui-même reste lisible par un développeur.  However, it is possible to easily decompile this code-byte by using decompiling programs, accessible on the Internet for example. During this decompilation, some information is lost, such as comments and the name of local variables, but the code-byte itself remains readable by a developer.

On comprend alors qu'il est à la portée d'un fraudeur de décompiler le code-octet pour accéder au code-source correspondant, de le copier et éventuellement de le modifier. D'où la possibilité de réaliser des contrefaçons ainsi que des versions pirates en décompilant et en modifiant le code qui sert à vérifier la présence d'une clé de licence.  We then understand that it is within the scope of a fraudster to decompile the code-byte to access the corresponding source code, copy it and possibly modify it. Hence the possibility of making counterfeits and pirated versions by decrypting and modifying the code used to verify the presence of a license key.

Pour tenter de limiter la fraude, certains éditeurs d'applications Java ont recours au procédé dit d'obfuscation - par obfuscation d'un code étant entendu l'obscurcissement de ce code afin de le rendre illisible - qui consiste, au moyen de programmes appelés obfuscateurs , à transformer le code- s octet de telle façon qu'il soit isofonctionnel, c'est-à-dire sans changement visible lors d'une exécution correcte du programme, mais moins facile à comprendre après décompilation du fait que toutes les classes, variables, méthodes sont renommées lors de l'obfuscation avec des séquences qui n'ont plus aucun sens pour un lecteur humain (noms du type a , aa , b , io etc). Bien entendu, cette technique n'empêche pas pour autant de décompiler le code-octet, mais la réutilisation du code-octet décompilé est rendue plus délicate.  To try to limit fraud, some Java application editors use the so-called obfuscation process - by obfuscating a code being understood the obscuration of this code in order to make it unreadable - which consists, by means of programs called obfuscators, to transform the code-byte in such a way that it is isofunctional, that is to say without any visible change during a correct execution of the program, but less easy to understand after decompilation because all the classes , variables, methods are renamed during obfuscation with sequences that no longer have any meaning for a human reader (names of type a, aa, b, io etc.). Of course, this technique does not preclude decompiling the code-byte, but the reuse of the decompiled byte-code is made more difficult.

Toutefois, même moins lisible, ce code est toujours vulnérable aux pirates et aux contrefacteurs.  However, even less readable, this code is still vulnerable to hackers and counterfeiters.

Un autre procédé pour limiter les risques de décompilation du code-octet consiste à utiliser un utilitaire pour compiler directement le code-octet Java en code natif. On obtient ainsi un programme binaire qui pourra être exécuté sur le système d'exploitation pour lequel le code-octet a été compilé en code natif. La décompilation de ce programme exécutable est très difficile puisqu'il s'agit cette fois de décompiler du code-machine.  Another method to limit the risk of decompilation of the code-byte is to use a utility to directly compile the Java-byte code in native code. This gives a binary program that can be executed on the operating system for which the byte-code has been compiled in native code. The decompilation of this executable program is very difficult since it is this time to decompile the machine code.

Ces procédés connus visant à limiter l'accès au code-source Java par décompilation du code-octet correspondant présentent cependant un certain nombre d'inconvénients.  These known methods for limiting access to Java source code by decompiling the corresponding byte-code, however, have a number of disadvantages.

Le procédé par obfuscation conduit à un code-octet, certes obfusqué, 25 mais toujours décompilable. Le code-source qui en est tiré est seulement plus difficile à comprendre pour un développeur.  The obfuscation method leads to a code byte, admittedly obfuscated, but still decompilable. The source code that is derived from it is only harder to understand for a developer.

D'autre part, le renommage systématique des classes, variables, etc, peut également poser des problèmes dans le sens où il rend plus difficile l'interprétation d'une file d'exécution. Ainsi, lorsque l'application part en échec, sur une exception non traitée par exemple, la file d'exécution affichée à la machine virtuelle Java devient assez peu compréhensible à cause des renommages et donc difficilement exploitable quand il s'agit de traquer un bogue notamment.  On the other hand, the systematic renaming of classes, variables, etc., can also cause problems in the sense that it makes the interpretation of an execution queue more difficult. Thus, when the application fails, on an untreated exception, for example, the execution queue displayed to the Java virtual machine becomes unclear because of renaming and therefore difficult to exploit when it comes to tracking a bug especially.

Le procédé par compilation vers un code natif, s'il réduit fortement le risque de décompilation, supprime néanmoins un des avantages principaux de l'environnement Java, à savoir sa portabilité. En effet, le code natif est destiné à une version donnée d'un système d'exploitation donné, alors que l'intérêt de Java est de pouvoir exécuter des codes, en fait des codes-octet, sur n'importe quel système sur lequel une machine virtuelle conforme au standard a été installée. Ainsi, si on veut s'appuyer sur ce procédé de protection par code natif, il faut prévoir autant de versions compilées que de systèmes d'exploitation cibles. Cette situation est difficilement gérable pour un éditeur de io logiciels.  The process of compiling to a native code, while greatly reducing the risk of decompilation, nevertheless eliminates one of the main advantages of the Java environment, namely its portability. Indeed, the native code is intended for a given version of a given operating system, whereas the interest of Java is to be able to execute codes, in fact byte codes, on any system on which a standard virtual machine has been installed. Thus, if we want to rely on this method of protection by native code, it is necessary to provide as many compiled versions as target operating systems. This situation is difficult to manage for a software publisher.

Aussi, le problème technique à résoudre par l'objet de la présente invention est de proposer un procédé de protection d'un code-source en langage semi-interprété, qui permettrait d'améliorer la protection du code-source contre la décompilation sans perdre le bénéfice de la portabilité du langage semi-interprété utilisé, notamment Java, et sans rendre plus compliqué le dépistage d'erreurs dans le code résultant de l'application du procédé.  Also, the technical problem to be solved by the object of the present invention is to propose a method of protecting a source code in semi-interpreted language, which would make it possible to improve the protection of the source code against decompilation without losing the benefit of the portability of the semi-interpreted language used, in particular Java, and without making it more difficult to detect errors in the code resulting from the application of the method.

La solution au problème technique posé consiste, selon la présente invention, en ce que, ledit code-source étant compilé en un code-octet, ledit 20 procédé comprend les étapes consistant à : - chiffrer ledit codeoctet par un algorithme de chiffrement, - fournir à une machine utilisatrice dudit code-source le code-octet chiffré et le code-octet d'un chargeur de classes déchiffrant apte à déchiffrer ledit code-octet chiffré au moyen d'une clé de déchiffrement disponible sur ladite machine utilisatrice.  The solution to the technical problem posed is, according to the present invention, in that, said source code being compiled into a byte-code, said method comprises the steps of: - encrypting said codeoctet by an encryption algorithm, - providing to a machine using said source code the encrypted byte-code and the byte-code of a decrypting class loader capable of decrypting said encrypted byte-code by means of a decryption key available on said user machine.

La figure 1 montre un schéma illustratif du procédé de protection conforme à l'invention.  Figure 1 shows an illustrative diagram of the protection method according to the invention.

Le procédé selon l'invention présente donc l'intérêt qu'une fois chiffré le code-octet 13 associé au code-source 11 à protéger n'est plus décompilable puisqu'il ne s'agit plus alors d'un code-octet interprétable comme tel par une machine virtuelle Java par exemple. Par contre, après déchiffrement dans la machine 20, le dépistage et la correction de bogues restent possibles sur le code-octet 12 ainsi déchiffré.  The method according to the invention therefore has the advantage that once encrypted code byte 13 associated with the source code 11 to be protected is no longer decompilable since it is no longer an interpretable code-byte as such by a Java virtual machine for example. On the other hand, after decryption in the machine 20, the detection and the correction of bugs are possible on the byte-code 12 thus deciphered.

L'exécution du code-octet 12 repose sur l'ajout d'un composant spécifique, appelé ici chargeur 14 de classes déchiffrant, qui a pour fonction de déchiffrer le code-octet chiffré 13 en le chargeant dans la machine virtuelle Java 20. A cet effet, le chargeur 14 de classes déchiffrant retrouve ou accède s à la clé KS de déchiffrement disponible dans la machine 20.  The execution of the byte-code 12 is based on the addition of a specific component, referred to herein as a decrypting class loader 14, whose function is to decrypt the encrypted byte-code 13 by loading it into the Java virtual machine 20. A For this purpose, the deciphering class loader 14 finds or accesses the decryption key KS available in the machine 20.

Dans le cas où, comme le prévoit l'invention, ledit algorithme de chiffrement est un algorithme cryptographique symétrique, la même clé KS sert au chiffrement du code-octet 12 par le distributeur 10 du codesource 11 et au déchiffrement par le chargeur 14 de classes déchiffrant du code-octet chiffré io 13 reçu par la machine 20. La clé KS de déchiffrement est, par exemple, stockée dans une mémoire de la machine 20 ou encore fournie par l'utilisateur dans une mémoire enfichable.  In the case where, as provided by the invention, said encryption algorithm is a symmetric cryptographic algorithm, the same key KS serves to encode the byte-code 12 by the distributor 10 of the source code 11 and decryption by the class loader 14 The decryption key KS is, for example, stored in a memory of the machine 20 or provided by the user in a plug-in memory.

Le chargeur 14 de classes déchiffrant est lui-même écrit en langage Java et utilisé à la place du chargeur de classes standard. Pour qu'il soit facilement utilisable par la machine 20, son propre code-octet n'est pas chiffré. Cependant, si on veut le protéger lui-même contre la décompilation, l'invention propose, par exemple, que ledit code-octet du chargeur 14 de classes déchiffrant est fourni sous forme obfusquée.  The decrypting class loader 14 is itself written in Java language and used instead of the standard class loader. For it to be easily usable by the machine 20, its own code-byte is not encrypted. However, if one wishes to protect it against decompilation, the invention proposes, for example, that said code byte of the deciphering class loader 14 is provided in obfuscated form.

En plus de la protection du code-source 11 contre la décompilation du code-octet 12 associé, le procédé conforme à l'invention permet également de protéger le même code-source contre une utilisation non autorisée par son distributeur 10.  In addition to the protection of the source code 11 against the decompilation of the associated byte code 12, the method according to the invention also makes it possible to protect the same source code against unauthorized use by its distributor 10.

Si l'on souhaite que le code-source 11 ne soit utilisable que sur une machine 20 donnée, une première solution consiste en ce que ledit algorithme de chiffrement utilise une clé KS de chiffrement caractéristique d'une machine 20 donnée, et en ce que ledit chargeur 14 de classes déchiffrant est apte à reconstituer ladite clé Ks.  If it is desired that source code 11 be usable only on a given machine, a first solution is that said encryption algorithm uses an encryption key KS characteristic of a given machine, and that said decrypting class loader 14 is adapted to reconstruct said key Ks.

Cette solution repose sur le fait que la clé KS de chiffrement, et donc la clé de déchiffrement dans le cadre d'un algorithme symétrique, est rendue fortement adhérente à la machine 20. Dans un mode de réalisation, ladite clé caractéristique est constituée à partir d'une adresse IP de ladite machine. Dans un autre mode de réalisation, ladite clé caractéristique est constituée à partir d'une adresse MAC de ladite machine. La clé est déduite de cette donnée d'adresse (Ks=f(adresselP) par exemple), ou autre, par le distributeur 10 et également par le chargeur 14 de classes déchiffrant de la machine 20 en effectuant un calcul sur cette donnée selon un algorithme f connu des deux parties.  This solution is based on the fact that the encryption key KS, and therefore the decryption key in the context of a symmetrical algorithm, is made strongly adherent to the machine 20. In one embodiment, said characteristic key is constituted from an IP address of said machine. In another embodiment, said characteristic key is constituted from a MAC address of said machine. The key is deduced from this address data (Ks = f (adresselP) for example), or other, by the distributor 10 and also by the deciphering class loader 14 of the machine 20 by performing a calculation on this datum according to a algorithm f known to both parties.

Si l'on souhaite que le code-source 11 ne puisse être utilisé que par un seul utilisateur, une deuxième solution consiste en ce que ledit algorithme de chiffrement utilise une clé Ks de chiffrement chiffrée au moyen d'une clé publique Kpublique d'un utilisateur (K's=g(Ks,Kpublique)), et en ce que ledit chargeur 14 de classes déchiffrant est apte à déchiffrer ladite clé K's de chiffrement io chiffrée, au moyen de la clé privée Kprivée de l'utilisateur associée à ladite clé publique Kpubiique (Ks=9-1(K's,Kprivée)).  If it is desired that the source code 11 can be used by only one user, a second solution consists in that said encryption algorithm uses an encrypted encryption key Ks by means of a public key Kpublique of a user (K's = g (Ks, Kpublic)), and in that said deciphering class loader 14 is able to decrypt said enciphered encryption key K 'by means of the private key Kprivée of the user associated with said public key Kpubic (Ks = 9-1 (K's, Kprivee)).

Selon cette solution, le code-octet 12 du code-source 11 dont on veut limiter la diffusion est chiffré par le distributeur 10 au moyen d'une clé Ks de chiffrement symétrique générée aléatoirement chez le distributeur 10. Le code-octet 13 ainsi chiffré est fourni à l'utilisateur accompagné de K's qui est la clé Ks de chiffrement elle- même chiffrée au moyen d'une clé publique Kpublique de l'utilisateur selon un algorithme de chiffrement asymétrique. A la réception du code- octet chiffré 13 et de la clé K's de chiffrement chiffrée, le chargeur 14 de classes déchiffrant déchiffre la clé K's de chiffrement au moyen de la clé privée Kprivée de l'utilisateur. A titre d'exemple, ladite clé privée est contenue dans un certificat détenu par ledit utilisateur dans une mémoire enfichable par exemple. Enfin, la clé Ks de chiffrement symétrique, une fois déchiffrée, sert au chargeur 14 de classes déchiffrant à déchiffrer le code-octet 13.  According to this solution, the byte code 12 of the source code 11 whose distribution is to be limited is encrypted by the distributor 10 by means of a symmetric encryption key Ks generated randomly at the distributor 10. The code-octet 13 thus encrypted is provided to the user accompanied by K's which is the encryption key Ks itself encrypted by means of a public key Kpublique of the user according to an asymmetric encryption algorithm. Upon receipt of the encrypted byte code 13 and encrypted encryption key K's, the decrypting class loader 14 decrypts the encryption key K's by means of the user's private key Kprivée. By way of example, said private key is contained in a certificate held by said user in a plug-in memory for example. Finally, the symmetric encryption key Ks, once decrypted, is used by the decrypting class loader 14 to decrypt the byte code 13.

Enfin, si l'on souhaite limiter l'utilisation du code-source dans le temps, une troisième solution consiste en ce que ledit algorithme de chiffrement utilise une clé Ks de chiffrement constituée à partir de la date limite d'utilisation dudit code-source Java 11, et en ce que ledit chargeur 14 de classes déchiffrant est apte à reconstituer ladite clé à partir de la date courante.  Finally, if it is desired to limit the use of the source code over time, a third solution consists in that said encryption algorithm uses an encryption key Ks constituted from the use-by date of said source code. Java 11, and in that said decrypting class loader 14 is able to reconstruct said key from the current date.

Prenons l'exemple où la date limite pour l'utilisation autorisée du codesource vaut 123456999 unités de temps à partir d'une origine donnée. Le distributeur 10 chiffre le code-octet 12 au moyen de la clé symétrique Ks 123456 et installe dans le chargeur 14 de classes déchiffrant un algorithme indiquant que la clé Ks de déchiffrement est obtenue en tronquant la date courante de ses trois derniers chiffres. Tant que la date courante de la machine peut s'écrire 123456xyz avec xyz 999, le déchiffrement est correctement effectué. Au-delà de la date limite d'utilisation, la clé calculée par le chargeur de classes déchiffrant s'écrira 123457 et le déchiffrement ne pourra plus avoir lieu.  Take the example where the deadline for the authorized use of the source code is 123456999 units of time from a given origin. The distributor 10 encrypts the byte-code 12 by means of the symmetric key Ks 123456 and installs in the deciphering class loader 14 an algorithm indicating that the decryption key Ks is obtained by truncating the current date of its last three digits. As long as the current machine date can be written 123456xyz with xyz 999, decryption is correctly performed. Beyond the expiration date, the key calculated by the decrypting class loader will be written as 123457 and decryption will no longer be possible.

L'invention concerne également un dispositif de chiffrement d'un codesource en langage semi-interprété, remarquable en ce que, ledit codesource (11) étant compilé en un code-octet (12), ledit dispositif comprend: - des moyens pour chiffrer ledit code-octet (12) par un algorithme de io chiffrement, - des moyens pour fournir à une machine utilisatrice (20) dudit code-source (11) le code-octet chiffré (13) et le code-octet d'un chargeur (14) de classes déchiffrant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (KS) de déchiffrement disponible sur ladite machine utilisatrice (20).  The invention also relates to a device for encrypting a source code in semi-interpreted language, remarkable in that, said source code (11) being compiled into a byte-code (12), said device comprises: - means for encrypting said code-byte (12) by an encryption algorithm, - means for supplying to a user machine (20) of said source code (11) the encrypted byte-code (13) and the byte-code of a loader ( 14) decrypting classes capable of decrypting said encrypted code-byte (13) by means of a decryption key (KS) available on said user machine (20).

L'invention concerne encore un dispositif de déchiffrement d'un codesource en langage semi-interprété, ledit code-source (11) étant compilé en un code-octet chiffré (13) par un algorithme de chiffrement, remarquable en ce que ledit dispositif de déchiffrement dispose d'une clé (Ks) de déchiffrement dudit code-octet chiffré (13).  The invention also relates to a device for decrypting a source code in a semi-interpreted language, said source code (11) being compiled into an encrypted byte-code (13) by an encryption algorithm, remarkable in that said device decryption has a key (Ks) for decrypting said encrypted byte-code (13).

L'invention concerne encore un programme d'ordinateur de chiffrement d'un code-source en langage semi-interprété, ledit code-source (11) étant compilé en un code-octet (12), ledit programme d'ordinateur comprenant des instructions de chiffrement dudit code-octet (12) par un algorithme de chiffrement, et de fourniture du code-octet chiffré (13) et du code- octet d'un chargeur (14) de classes déchiffrant à une machine utilisatrice (20) dudit code-source (11), ledit chargeur (14) de classes déchiffrant étant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (KS) de déchiffrement disponible sur ladite machine utilisatrice (20), ainsi qu'un programme d'ordinateur de déchiffrementd'un code-source en langage semi-interprété, ledit code- source (11) étant compilé en un code-octet chiffré comprenant des instructions de déchiffrement d'un code octet chiffré reçu à l'aide du code-octet d'un chargeur (14) de classes déchiffrant reçu apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (Ks) de déchiffrement disponible.  The invention also relates to a computer program for encrypting a source code in a semi-interpreted language, said source code (11) being compiled into a code-byte (12), said computer program comprising instructions encrypting said byte-code (12) by an encryption algorithm, and providing the encrypted byte-code (13) and the byte-code of a deciphering class loader (14) to a user machine (20) of said code -source (11), said deciphering class loader (14) being able to decrypt said encrypted byte-code (13) by means of a decryption key (KS) available on said user machine (20), and a computer program for decrypting a source code in semi-interpreted language, said source code (11) being compiled into an encrypted byte-code comprising instructions for decrypting an encrypted byte code received with the code -octet of a loader (14) of decrypting classes received able to decipher the said encrypted byte-code (13) by means of an available decryption key (Ks).

Enfin, l'invention concerne la mise à disposition par téléchargement du programme d'ordinateur de déchiffrement selon l'invention.  Finally, the invention relates to the provision by download of the decryption computer program according to the invention.

Claims (13)

REVENDICATIONS 1. Procédé de protection d'un code-source en langage semi-interprété, caractérisé en ce que, ledit code-source (11) étant compilé en un codeoctet (12), ledit procédé comprend les étapes consistant à : -chiffrer ledit code-octet (12) par un algorithme de chiffrement, -fournir à une machine utilisatrice (20) dudit code-source (11) le code-octet chiffré (13) et le code-octet d'un chargeur (14) de classes déchiffrant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (K5) de déchiffrement disponible sur ladite machine utilisatrice (20).  A method for protecting a source code in a semi-interpreted language, characterized in that, said source code (11) being compiled into a codeoctet (12), said method comprises the steps of: - encrypting said code -octet (12) by an encryption algorithm, -providing to a user machine (20) of said source code (11) the encrypted byte-code (13) and the byte-code of a deciphering class loader (14) capable of decrypting said encrypted code-byte (13) by means of a decryption key (K5) available on said user machine (20). 2. Procédé selon la revendication 1, caractérisé en ce que ledit algorithme de 15 chiffrement est un algorithme cryptographique symétrique.  2. Method according to claim 1, characterized in that said encryption algorithm is a symmetric cryptographic algorithm. 3. Procédé selon l'une des revendications 1 ou 2, caractérisé en ce que ledit code-octet du chargeur (14) de classes déchiffrant est fourni sous forme obfusquée.  3. Method according to one of claims 1 or 2, characterized in that said code-byte of the deciphering class loader (14) is supplied in obfuscated form. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que ledit algorithme de chiffrement utilise une clé de chiffrement caractéristique d'une machine (20) donnée, et en ce que ledit chargeur (14) de classes déchiffrant est apte à reconstituer ladite clé.  4. Method according to any one of claims 1 to 3, characterized in that said encryption algorithm uses an encryption key characteristic of a given machine (20), and in that said loader (14) of decoding classes is adapted to reconstruct said key. 5. Procédé selon la revendication 4, caractérisé en ce que ladite clé caractéristique est constituée à partir d'une adresse IP de ladite machine (20).  5. Method according to claim 4, characterized in that said characteristic key is formed from an IP address of said machine (20). 6. Procédé selon la revendication 4, caractérisé en ce que ladite clé caractéristique est constituée à partir d'une adresse MAC de ladite machine (20).  6. Method according to claim 4, characterized in that said characteristic key is constituted from a MAC address of said machine (20). 7. Procédé selon l'une quelconque des revendications 1 à 6, caractérisé en ce que ledit algorithme de chiffrement utilise une clé (K5) de chiffrement chiffrée au moyen d'une clé publique (Kpublique) d'un utilisateur, et en ce que ledit chargeur (14) de classes déchiffrant est apte à déchiffrer ladite clé de chiffrement chiffrée, au moyen de la clé privée (Kprivée) de l'utilisateur associée à ladite clé publique.  7. Method according to any one of claims 1 to 6, characterized in that said encryption algorithm uses an encryption key (K5) encrypted by means of a public key (Kpublique) of a user, and that said decrypting class loader (14) is capable of decrypting said encrypted encryption key by means of the private key (Kprivée) of the user associated with said public key. 8. Procédé selon la revendication 7, caractérisé en ce que ladite clé privée (Kprivée) est contenue dans un certificat détenu par ledit utilisateur.  8. Method according to claim 7, characterized in that said private key (Kprivée) is contained in a certificate held by said user. 9. Procédé selon l'une quelconque des revendications 1 à 8, caractérisé en ce que ledit algorithme de chiffrement utilise une clé (KS) de chiffrement constituée à partir de la date limite d'utilisation dudit code-source (11), et en ce que ledit chargeur (14) de classes déchiffrant est apte à reconstituer ladite clé à partir de la date courante.  9. Method according to any one of claims 1 to 8, characterized in that said encryption algorithm uses an encryption key (KS) constituted from the use-by date of said source code (11), and said deciphering class loader (14) is adapted to reconstruct said key from the current date. io  io 10. Dispositif de chiffrement d'un code-source en langage semiinterprété, caractérisé en ce que, ledit code-source (11) étant compilé en un code-octet (12), ledit dispositif comprend: - des moyens pour chiffrer ledit code-octet (12) par un algorithme de chiffrement, - des moyens pour fournir à une machine utilisatrice (20) dudit code-source (11) le code-octet chiffré (13) et le code-octet d'un chargeur (14) de classes déchiffrant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (KS) de déchiffrement disponible sur ladite machine utilisatrice (20).10. Device for encrypting a source code in semiinterpreted language, characterized in that, said source code (11) being compiled into a byte-code (12), said device comprises: means for encrypting said code byte (12) by an encryption algorithm; - means for supplying to a user machine (20) of said source code (11) the encrypted byte-code (13) and the byte-code of a charger (14) of decrypting classes capable of decrypting said encrypted code-byte (13) by means of a decryption key (KS) available on said user machine (20). 11. Dispositif de déchiffrement d'un code-source en langage semiinterprété, ledit code-source (11) étant compilé en un code-octet chiffré (13) par un algorithme de chiffrement, caractérisé en ce que ledit dispositif de déchiffrement dispose d'une clé (Ks) de déchiffrement dudit code-octet chiffré (1 3).  11. Device for decrypting a source code in a semi-interpreted language, said source code (11) being compiled into an encrypted byte-code (13) by an encryption algorithm, characterized in that said decryption device has a key (Ks) for decrypting said encrypted code-byte (1 3). 12. Programme d'ordinateur de chiffrement d'un code-source en langage 25 semi-interprété, ledit code-source (11) étant compilé en un code-octet (12), ledit programme d'ordinateur comprenant des instructions de: chiffrement dudit code-octet (12) par un algorithme de chiffrement, - de fourniture du code-octet chiffré (13) et du code-octet d'un chargeur (14) de classes déchiffrant à une machine utilisatrice (20) dudit code-source (11), ledit chargeur (14) de classes déchiffrant étant apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (KS) de déchiffrement disponible sur ladite machine utilisatrice (20). io  12. Computer program for encrypting a source code in a semi-interpreted language, said source code (11) being compiled into a byte-code (12), said computer program comprising instructions for: encryption said code-byte (12) by an encryption algorithm, - supplying the encrypted byte-code (13) and the byte-code of a loader (14) of decrypting classes to a user machine (20) of said source-code (11), said decrypting class loader (14) being able to decrypt said encrypted byte-code (13) by means of a decryption key (KS) available on said user machine (20). io 13. Programme d'ordinateur de déchiffrement d'un code-source en langage semi-interprété, ledit code-source (11) étant compilé en un code-octet chiffré comprenant des instructions de déchiffrement d'un code octet chiffré reçu à l'aide du code-octet d'un chargeur (14) de classes déchiffrant reçu apte à déchiffrer ledit code-octet chiffré (13) au moyen d'une clé (KS) de déchiffrement disponible.  13. Computer program for decrypting a source code in semi-interpreted language, said source code (11) being compiled into an encrypted byte-code comprising instructions for decrypting an encrypted byte code received at the using the byte-code of a loader (14) of decrypting classes received capable of decrypting said encrypted byte-code (13) by means of an available decryption key (KS).
FR0505988A 2005-06-14 2005-06-14 METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE Pending FR2887097A1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
FR0505988A FR2887097A1 (en) 2005-06-14 2005-06-14 METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE
PCT/FR2006/050558 WO2006134304A2 (en) 2005-06-14 2006-06-14 Method for protecting a source code in semi-interpreted language

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR0505988A FR2887097A1 (en) 2005-06-14 2005-06-14 METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE

Publications (1)

Publication Number Publication Date
FR2887097A1 true FR2887097A1 (en) 2006-12-15

Family

ID=36001093

Family Applications (1)

Application Number Title Priority Date Filing Date
FR0505988A Pending FR2887097A1 (en) 2005-06-14 2005-06-14 METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE

Country Status (2)

Country Link
FR (1) FR2887097A1 (en)
WO (1) WO2006134304A2 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014191965A1 (en) * 2013-05-30 2014-12-04 Auditmark S.A. Digital content execution control mechanism

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102007045743A1 (en) * 2007-09-25 2009-04-02 Siemens Ag Method and system for protection against access to a machine code of a device
CN102043932B (en) * 2010-12-31 2012-07-18 中国航空工业集团公司第六三一研究所 Method for preventing Java program from being decompiled
US8667600B2 (en) * 2011-06-30 2014-03-04 International Business Machines Corporation Trusted computing source code escrow and optimization
CN102360412B (en) * 2011-09-26 2014-07-02 飞天诚信科技股份有限公司 Method and system for protecting Java source code
WO2014191968A1 (en) 2013-05-30 2014-12-04 Auditmark S.A. Web application protection
SG10201602449PA (en) 2016-03-29 2017-10-30 Huawei Int Pte Ltd System and method for verifying integrity of an electronic device
CN109995526A (en) * 2019-04-10 2019-07-09 睿驰达新能源汽车科技(北京)有限公司 A kind of storage method of key and the call method and device of device, key

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998042098A1 (en) * 1997-03-14 1998-09-24 Cryptoworks, Inc. Digital product rights management technique
US6334189B1 (en) * 1997-12-05 2001-12-25 Jamama, Llc Use of pseudocode to protect software from unauthorized use
EP1278112A1 (en) * 2001-07-12 2003-01-22 Castify Networks SA A process for providing access of a client to a content provider server under control of a resource locator server
US20030059051A1 (en) * 2001-09-27 2003-03-27 Kabushiki Kaisha Toshiba Electronic apparatus, wireless communication device, and encryption key setting method
EP1338971A1 (en) * 2000-11-24 2003-08-27 NTT DoCoMo, Inc. Data acquiring method and terminal
US20040039926A1 (en) * 2000-10-11 2004-02-26 Lambert Martin Richard Methods of providing java tamperproofing

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998042098A1 (en) * 1997-03-14 1998-09-24 Cryptoworks, Inc. Digital product rights management technique
US6334189B1 (en) * 1997-12-05 2001-12-25 Jamama, Llc Use of pseudocode to protect software from unauthorized use
US20040039926A1 (en) * 2000-10-11 2004-02-26 Lambert Martin Richard Methods of providing java tamperproofing
EP1338971A1 (en) * 2000-11-24 2003-08-27 NTT DoCoMo, Inc. Data acquiring method and terminal
EP1278112A1 (en) * 2001-07-12 2003-01-22 Castify Networks SA A process for providing access of a client to a content provider server under control of a resource locator server
US20030059051A1 (en) * 2001-09-27 2003-03-27 Kabushiki Kaisha Toshiba Electronic apparatus, wireless communication device, and encryption key setting method

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
"THE CRYPTOLOPE LIVEÜ PRODUCT", IBM CRYPTOLOPE LIVE. GENERAL INFORMATION GUIDE, XX, XX, 1997, pages 1 - 36, XP002908144 *
CACHEFLOW: "SSL Primer", CACHEFLOW TECHNICAL NOTE, 31 October 2000 (2000-10-31), pages 1 - 16, XP002278809 *
MARC A KAPLAN: "IBM Cryptolopes, SuperDistribution and Digital Rights Management", IBM RESEARCH CENTER, 30 December 1996 (1996-12-30), XP002132994 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014191965A1 (en) * 2013-05-30 2014-12-04 Auditmark S.A. Digital content execution control mechanism
US10102384B2 (en) 2013-05-30 2018-10-16 Jscrambler S.A. Digital content execution control mechanism

Also Published As

Publication number Publication date
WO2006134304A2 (en) 2006-12-21
WO2006134304A3 (en) 2007-03-22

Similar Documents

Publication Publication Date Title
CN110069905B (en) Device and method for encrypting and decrypting Springboot program
US7512986B2 (en) Digital rights management system and method
FR2887097A1 (en) METHOD FOR PROTECTING A SOURCE CODE IN SEMI-INTERPRETED LANGUAGE
KR101284676B1 (en) Cryptography-based copy protection system and method for android apps
US5991402A (en) Method and system of dynamic transformation of encrypted material
KR101054318B1 (en) Computer-readable media recording information processing systems and programs
US8583938B2 (en) From polymorphic executable to polymorphic operating system
US20080256368A1 (en) Method and Device For Protecting Digital Content in Mobile Applications
CN101872404B (en) Method for protecting Java software program
AU2002233609A1 (en) Digital rights management system and method
KR20070001893A (en) Tamper-resistant trusted virtual machine
CN101957903A (en) Method and device for protecting class files
EP1376367A2 (en) Verification of integrity of software code executed on an embedded processor
US20140047244A1 (en) Protection of interpreted source code in virtual appliances
US8479014B1 (en) Symmetric key based secure microprocessor and its applications
GB2381087A (en) Method for the secure distribution and use of electronic media
US6675297B1 (en) Method and apparatus for generating and using a tamper-resistant encryption key
Bahaa-Eldin et al. A comprehensive software copy protection and digital rights management platform
CA2988357C (en) Encryption method, corresponding encryption method, devices and programs
US20060224894A1 (en) Methods, devices and computer programs for creating ciphertext, plaintext and a cryptographic key
KR20140011021A (en) Method for preventing unauthorized copying of the android platform-based applications and inserting digital watermarking in order to track the first clone
Nützel et al. How to increase the security of Digital Rights Management systems without affecting consumer’s security
US7197144B1 (en) Method and apparatus to authenticate a user's system to prevent unauthorized use of software products distributed to users
CN115994370B (en) Software encryption processing method, device, equipment and medium
WO2022238636A1 (en) Method for executing a program loaded into the non-volatile memory of a microcontroller forming part of an integrated circuit