FR2871255A1 - Software obfuscating method for e.g. chip card, involves replacing software component name in code by scrambled name, and inserting module in code to generate identifier of component name by irreversible hashing to find scrambled name - Google Patents
Software obfuscating method for e.g. chip card, involves replacing software component name in code by scrambled name, and inserting module in code to generate identifier of component name by irreversible hashing to find scrambled name Download PDFInfo
- Publication number
- FR2871255A1 FR2871255A1 FR0406076A FR0406076A FR2871255A1 FR 2871255 A1 FR2871255 A1 FR 2871255A1 FR 0406076 A FR0406076 A FR 0406076A FR 0406076 A FR0406076 A FR 0406076A FR 2871255 A1 FR2871255 A1 FR 2871255A1
- Authority
- FR
- France
- Prior art keywords
- name
- identifier
- scrambled
- software
- component
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000002427 irreversible effect Effects 0.000 title claims abstract description 6
- 230000006870 function Effects 0.000 claims description 49
- 238000004364 calculation method Methods 0.000 claims description 18
- 230000008569 process Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
Description
PROCEDE D'OBFUSCATION DE CODE COMPILE, TERMINAL ETMETHOD FOR OBFUSCATING COMPILE CODE, TERMINAL AND
LOGICIEL ASSOCIESASSOCIATED SOFTWARE
La présente invention porte sur les logiciels compilés dans un langage intermédiaire de programmation et plus particulièrement sur les procédés d'obfuscation de tels logiciels. The present invention relates to software compiled in an intermediate programming language and more particularly to the methods of obfuscation of such software.
Diverses motivations poussent des personnes à décompiler un logiciel pour obtenir son code source: comprendre le fonctionnement du logiciel, intervenir frauduleusement sur un algorithme de cryptage ou encore récupérer des routines complètes pour les intégrer dans ses propres logiciels. Various motivations push people to decompile software to obtain its source code: to understand how the software works, to intervene fraudulently on an encryption algorithm or to recover complete routines to integrate them into its own software.
L'intervention sur des algorithmes de cryptage peut viser à décrypter frauduleusement des données. La récupération de routines complètes peut avoir pour but de réduire les efforts de développement de logiciels concurrents: il peut alors suffire d'intégrer ces routines dans son propre logiciel pour réaliser des fonctions essentielles du logiciel. L'intégration partielle d'un logiciel est particulièrement difficile à prouver pour l'auteur du logiciel initial. Ainsi, l'auteur a généralement de très grandes difficultés à faire valoir ses droits auprès d'un tribunal. Intervention on encryption algorithms may be aimed at decrypting fraudulently data. The recovery of complete routines may be intended to reduce competing software development efforts: it may then be sufficient to integrate these routines into one's own software to perform essential functions of the software. The partial integration of a software is particularly difficult to prove for the author of the initial software. Thus, the author generally has very great difficulty in asserting his rights before a court.
Des techniques d'obfuscation ont ainsi été développées. L'obfuscation définit tout procédé appliqué au code compilé du logiciel pour le rendre moins facilement intelligible lors de la décompilation, sans influer sur son fonctionnement. Obfuscation techniques have been developed. Obfuscation defines any process applied to the compiled code of the software to make it less easily understood during decompilation, without affecting its operation.
Des langages intermédiaires de programmation ont été développés. Le but principal des logiciels dans ces langages est de les rendre indépendants du matériel sur lequel ils doivent être exécutés. Lors de l'exécution, de tels logiciels doivent utiliser des composants logiciels dont le nom est aisément intelligible ou correspond à un nom public. Ainsi, de nombreux éléments du code source peuvent être identifiés avec une très grande facilité lors de la décompilation. Intermediate programming languages have been developed. The main purpose of software in these languages is to make them independent of the hardware on which they are to be executed. When running, such software must use software components whose names are easily understandable or correspond to a public name. Thus, many elements of the source code can be identified with great ease during decompilation.
Un certain nombre d'outils d'obfuscation ont déjà été mis sur le marché pour rendre des logiciels en Java moins intelligibles, tout en respectant une exécution à l'identique. La plupart de ces outils utilisent la technique d'obfuscation de la disposition (Layout obfuscation en langue anglaise). Cette technique consiste par exemple à modifier le logiciel compilé pour que les informations non nécessaires à son exécution soient masquées et/ou supprimées dans son code compilé : on retire par exemple les informations de débuggage, on retire les commentaires des programmateurs ou on altère le nom de composants logiciels. A number of obfuscation tools have already been put on the market to make Java software less intelligible, while respecting an identical execution. Most of these tools use the Layout Obfuscation technique. This technique consists, for example, in modifying the compiled software so that the information that is not necessary for its execution is hidden and / or deleted in its compiled code: for example, the debugging information is removed, the comments of the programmers are removed or the name is altered. software components.
Le nom utilisé lors de l'exécution pour certains composants logiciels (par exemple des fonctions, des méthodes ou des variables) n'est pas toujours prévisible au moment de la compilation du logiciel en langage intermédiaire. Un tel nom peut en effet être généré dynamiquement au moment de l'exécution du logiciel par une machine virtuelle. Par une ou plusieurs fonctions de réflexion, on génère, à partir du nom du composant, un nom de composant logiciel utilisable au moment de l'exécution. Afin de faciliter la mise en oeuvre de ces fonctions de réflexion, le nom généré est très proche du nom du composant logiciel. La génération de ce nom peut notamment être obtenue par permutation des caractères du nom d'un composant logiciel. Ce type de transformation est donc aisément réversible. Le niveau d'obfuscation ainsi présenté est donc réduit. The name used at runtime for some software components (for example, functions, methods or variables) is not always predictable at the time of compiling the intermediate language software. Such a name can indeed be generated dynamically at the time of execution of the software by a virtual machine. By one or more functions of reflection, one generates, from the name of the component, a name of software component usable at the time of the execution. In order to facilitate the implementation of these reflection functions, the generated name is very close to the name of the software component. The generation of this name can in particular be obtained by permutation of the characters of the name of a software component. This type of transformation is therefore easily reversible. The level of obfuscation thus presented is reduced.
L'invention vise à résoudre cet inconvénient. L'invention a ainsi pour objet un procédé d'obfuscation d'un logiciel compilé dans un langage intermédiaire présentant des fonctions de réflexion, ce procédé comprenant des étapes de: - remplacement d'au moins un nom d'un composant logiciel dans le code compilé par un nom brouillé ; - insertion d'un module dans le code compilé, ce module étant prévu pour, lors de l'exécution du logiciel -intercepter un appel à une fonction de réflexion appliquée au nom du composant logiciel; -générer, par un calcul irréversible et prédéterminé, un identifiant du nom du composant; -retrouver le nom brouillé au moyen de l'identifiant; et -commander l'exécution de la fonction de réflexion appliquée au nom brouillé. The invention aims to solve this drawback. The object of the invention is thus a method of obfuscating software compiled in an intermediate language having reflection functions, this method comprising the steps of: replacing at least one name of a software component in the code compiled by a scrambled name; inserting a module into the compiled code, this module being provided for, when executing the software, intercepting a call to a reflection function applied to the name of the software component; generating, by an irreversible and predetermined calculation, an identifier of the name of the component; -retrover the scrambled name by means of the identifier; and -order the execution of the reflection function applied to the scrambled name.
Selon une variante, ce procédé comprend les étapes de. According to a variant, this method comprises the steps of.
-génération de l'identifiant du nom du composant par le calcul prédéterminé ; -mémorisation d'un lien entre l'identifiant et le nom brouillé dans le code compilé ; -le module inséré est prévu pour, lors de l'exécution: -recevoir un nom pour lequel une fonction de réflexion doit être appliquée; -générer par ledit calcul un identifiant du nom reçu; comparer cet identifiant à l'identifiant mémorisé ; - si les identifiants correspondent, récupérer le nom brouillé au moyen du lien et commander l'exécution de la fonction de réflexion appliquée au nom brouillé ; et -sinon, commander l'exécution de la fonction de réflexion appliquée au nom reçu. generating the identifier of the name of the component by the predetermined calculation; memorizing a link between the identifier and the scrambled name in the compiled code; the inserted module is provided for, during execution: - receive a name for which a reflection function must be applied; generating by said calculation an identifier of the received name; compare this identifier to the stored identifier; if the identifiers correspond, retrieve the scrambled name by means of the link and order the execution of the reflection function applied to the scrambled name; and if not, control the execution of the reflection function applied to the received name.
Selon une autre variante, les étapes de génération de l'identifiant et de mémorisation du lien sont réalisées pour plusieurs noms de composants logiciels, et les liens sont mémorisés dans au moins une table associant un identifiant généré au nom brouillé correspondant. According to another variant, the steps of generating the identifier and storing the link are carried out for several names of software components, and the links are stored in at least one table associating an identifier generated with the corresponding scrambled name.
Selon encore une variante, plusieurs tables de mémorisation sont générées et un identifiant généré et un nom brouillé correspondant sont stockés dans une table choisie en fonction du nom du composant associé. According to another variant, several storage tables are generated and a generated identifier and a corresponding scrambled name are stored in a table chosen according to the name of the associated component.
Selon un mode de réalisation, le calcul prédéterminé pour la génération de l'identifiant du nom du composant comprend le hachage de ce nom. According to one embodiment, the predetermined calculation for generating the identifier of the name of the component comprises the hash of this name.
Selon une variante, le hachage d'un nom comprend: -un premier hachage du nom du composant à partir duquel on détermine la table où l'on stocke l'identifiant associé à ce nom; -un second hachage du nom du composant, distinct du premier, dont le résultat constitue l'identifiant associé à ce nom dans la table déterminée. According to one variant, the hash of a name comprises: a first hash of the name of the component from which the table where the identifier associated with this name is stored; a second hash of the name of the component, distinct from the first, the result of which constitutes the identifier associated with this name in the determined table.
Selon un autre mode de réalisation, le procédé comprend en outre une étape d'inscription d'une clé de cryptage dans une mémoire à accès restreint, le calcul prédéterminé est un cryptage mettant en ouvre ladite clé. According to another embodiment, the method further comprises a step of registering an encryption key in a restricted access memory, the predetermined calculation is an encryption implementing said key.
L'invention porte également sur un logiciel présentant des composants logiciels, compilé dans un langage intermédiaire présentant des fonctions de réflexion, ce logiciel étant obfusqué par un tel procédé. The invention also relates to software having software components, compiled in an intermediate language having reflection functions, this software being obfuscated by such a method.
L'invention porte encore sur un objet électronique qui comprend des moyens de mise en ouvre d'un tel logiciel. on peut également prévoir un objet électronique comprenant un support stockant un tel logiciel. Cet objet peut être un terminal, un combiné de téléphonie mobile ou une carte à puce. The invention also relates to an electronic object that includes means for implementing such software. it is also possible to provide an electronic object comprising a medium storing such software. This object can be a terminal, a mobile phone handset or a smart card.
D'autres particularités et avantages de l'invention apparaîtront clairement à la lecture de la description faite à titre d'exemple non limitatif et en regard des dessins annexés sur lesquels: -la figure 1 illustre des étapes d'un mode de réalisation d'un procédé d'obfuscation selon l'invention; -les figures 2 et 3 illustrent le fonctionnement d'un logiciel obfusqué selon un mode de réalisation de l'invention. Other features and advantages of the invention will become clear from reading the description given by way of nonlimiting example and with reference to the appended drawings in which: FIG. 1 illustrates steps of an embodiment of FIG. an obfuscation method according to the invention; FIGS. 2 and 3 illustrate the operation of obfuscated software according to one embodiment of the invention.
Des exemples de composants logiciels sont les fonctions, les noms de variable ou les méthodes. Examples of software components are functions, variable names, or methods.
En programmation orientée objet, une fonction de réflexion désigne généralement un mécanisme permettant à un conteneur de lire les caractéristiques d'un composant logiciel à l'aide de conventions de nom. La réflexion permet de lire les propriétés, les méthodes voire les évènements d'un composant. In object-oriented programming, a reflection function is usually a mechanism that allows a container to read the characteristics of a software component by using naming conventions. Reflection makes it possible to read the properties, the methods or even the events of a component.
Une fonction de hachage H transforme une entrée de données d'une dimension variable m et donne comme résultat une sortie de données de taille fixe h (h=H(m)). Ainsi, une fonction de hachage doit remplir quelques conditions de base: - l'entrée peut être de dimension variable; -la sortie doit être de dimension fixe; - H(m) doit être relativement facile à calculer. A hash function H transforms a data entry of a variable dimension m and gives a result of fixed size data output h (h = H (m)). Thus, a hash function must fulfill some basic conditions: the input can be of variable size; the output must be of fixed size; - H (m) must be relatively easy to calculate.
Un exemple d'une telle fonction de hachage est la fonction qui, à une suite d'octets, fait correspondre le XOR de tous les octets. An example of such a hash function is the function that, in a series of bytes, matches the XOR of all the bytes.
Une fonction de hachage à usage cryptographique doit respecter les conditions suivantes: -H(m) doit être une fonction à sens unique (la sortie de la fonction est aisément calculable à partir de l'entrée, mais il est extrêmement difficile de trouver une entrée qui se hache en une sortie donnée) ; -H(m) doit être sans collision (il est difficile de générer deux entrées ayant la même valeur de haché en sortie de la fonction). A hash function for cryptographic use must meet the following conditions: -H (m) must be a one-way function (the output of the function is easily computable from the input, but it is extremely difficult to find an input who hatches at a given exit); -H (m) must be collision-free (it is difficult to generate two entries with the same hash value at the output of the function).
Une fonction de hachage à usage cryptographique est par exemple la fonction SHA-l. A hash function for cryptographic use is for example the SHA-1 function.
L'invention propose d'obfusquer un logiciel compilé dans un langage intermédiaire présentant des fonctions de réflexion en améliorant la robustesse d'obfuscation des noms de composants logiciels. Pour cela, le procédé comprend une étape de remplacement du nom d'un composant logiciel par un nom brouillé. Un module fonctionnel est alors inséré dans le code compilé. Ce module fonctionnel réalise les opérations suivantes lors de l'exécution du logiciel - interception d'un appel à une fonction de réflexion pour un nom de composant logiciel; -génération d'un identifiant de ce nom par un calcul irréversible et prédéterminé effectué sur ce 15 nom; - récupération du nom brouillé au moyen de l'identifiant; - commande de l'exécution de la fonction de réflexion appliquée au nom brouillé. The invention proposes to obfuscate software compiled in an intermediate language with reflection functions by improving the robustness of obfuscation of the names of software components. For this, the method comprises a step of replacing the name of a software component by a scrambled name. A functional module is then inserted into the compiled code. This functional module performs the following operations during the execution of the software - interception of a call to a reflection function for a software component name; generation of an identifier of this name by an irreversible and predetermined calculation carried out on this name; - recovering the scrambled name by means of the identifier; - control of the execution of the reflection function applied to the scrambled name.
Ce procédé d'obfuscation fournit un code compilé avec des noms brouillés de façon irréversible, et dont l'exécution n'a pas d'incidence sur les fonctions de réflexion. Le module permet en effet de retrouver le nom brouillé lors de l'exécution mais il n'existe pas de moyen de retrouver le nom du composant à partir de ce nom brouillé. This obfuscation method provides compiled code with irreversibly scrambled names, and whose execution does not affect the reflection functions. The module makes it possible to find the scrambled name during the execution but there is no way to find the name of the component from this scrambled name.
On peut prévoir que l'invention s'applique à des langages intermédiaires présentant des fonctions de réflexion, tels que Java ou.Net (marques déposées). It can be provided that the invention applies to intermediate languages having reflection functions, such as Java or .Net (registered trademarks).
Le diagramme de la figure 1 illustre un exemple d'un tel procédé. Lors d'une étape 101, le procédé d'obfuscation est lancé pour être appliqué à un logiciel compilé. Lors d'une étape 102, on sélectionne un nom d'un composant logiciel dans le code compilé. Lors d'une étape 103, le nom est remplacé par un nom brouillé. Les étapes 102 et 103 peuvent être exécutées pour différents noms de composants du logiciel compilé. Facultativement, à l'étape 104, on génère par un calcul irréversible des identifiants des noms et on mémorise dans le code compilé un lien entre les identifiants et les noms brouillés. Lors de l'étape 105, le module fonctionnel décrit auparavant est inséré dans le code compilé. The diagram of Figure 1 illustrates an example of such a method. In a step 101, the obfuscation process is started to be applied to compiled software. In a step 102, a name of a software component is selected in the compiled code. In a step 103, the name is replaced by a scrambled name. Steps 102 and 103 may be executed for different component names of the compiled software. Optionally, in step 104, identifiers of the names are generated by an irreversible calculation and a link between the identifiers and the scrambled names is stored in the compiled code. In step 105, the functional module previously described is inserted into the compiled code.
Le module inséré présente alors les fonctions suivantes: lors de chaque appel à une fonction de réflexion, le calcul prédéterminé est réalisé sur le nom pour lequel la fonction de réflexion doit être appliquée. Cette étape correspond au calcul qui a été réalisé pour générer des identifiants lors de l'obfuscation. Le module compare l'identifiant qui vient d'être calculé aux identifiants qui ont été mémorisés lors de l'obfuscation. Si cet identifiant a été mémorisé au préalable, cela signifie que le nom correspondant a été remplacé par un nom brouillé dans le code compilé. La fonction de réflexion est alors appliquée au nom brouillé. Par contre, si aucun identifiant mémorisé ne correspond à l'identifiant qui vient d'être calculé, on déduit que le nom n'a pas été modifié lors de l'obfuscation. La fonction de réflexion est alors appliquée au nom. The inserted module then has the following functions: during each call to a reflection function, the predetermined calculation is performed on the name for which the reflection function must be applied. This step corresponds to the calculation that was performed to generate identifiers during obfuscation. The module compares the identifier that has just been calculated to the identifiers that were stored during the obfuscation. If this identifier has been stored previously, it means that the corresponding name has been replaced by a scrambled name in the compiled code. The reflection function is then applied to the scrambled name. On the other hand, if no memorized identifier corresponds to the identifier that has just been calculated, it is deduced that the name has not been modified during the obfuscation. The reflection function is then applied to the name.
Ainsi, la réflexion s'applique aux noms de composants modifiés et aux noms de composants non modifiés. Les noms non modifiés par l'obfuscation sont typiquement des noms publics, mis à la disposition de composants logiciels extérieurs au logiciel compilé, ou encore des noms générés dynamiquement lors de l'exécution et qui ne sont pas connus lors de la compilation. Thus, the reflection applies to modified component names and unmodified component names. Names not modified by obfuscation are typically public names, made available to software components outside the compiled software, or names dynamically generated at runtime that are not known at compile time.
On peut prévoir que les liens soient mémorisés dans le code compilé sous forme d'une ou plusieurs tables de correspondance associant un nom brouillé a un identifiant calculé lors de l'obfuscation. On prévoit que la ou les tables ne soient accessibles que par le module d'obfuscation inséré. It can be provided that the links are stored in the compiled code in the form of one or more correspondence tables associating a scrambled name with an identifier calculated during the obfuscation. It is expected that the table or tables are accessible only by the obfuscation module inserted.
Selon une variante préférentielle, le calcul prédéterminé est un hachage. Le nom d'origine est ainsi impossible à retrouver à partir du nom haché. Un exemple détaillé du fonctionnement d'un module du code compilé pour cette variante est illustré aux figures 2 et 3. On a illustré à gauche de ces figures les opérations qui était réalisées et à droite les éléments principaux utilisés lors de ces opérations. According to a preferred variant, the predetermined calculation is a hash. The original name is thus impossible to find from the hashed name. A detailed example of the operation of a compiled code module for this variant is illustrated in FIGS. 2 and 3. On the left of these figures are illustrated the operations that were performed and on the right the main elements used during these operations.
La figure 2 illustre le cas où le nom (pour lequel la fonction de réflexion doit être appliquée) a été modifié lors de l'obfuscation. A l'étape 201, l'appel à la fonction de réflexion est intercepté et le module récupère le nom Norig pour lequel la réflexion devait être appliquée. A l'étape 202, un hachage du nom Norig est calculé. On obtient un identifiant 0xf28021d. A l'étape 203 on vérifie la présence de cet identifiant dans une table de correspondance entre les identifiants et les noms brouillés correspondants. Dans l'exemple, le module détermine que l'identifiant 0fx28021d est présent dans la table et récupère donc le nom brouillé associé : al. A l'étape 204, la réflexion est appliquée au nom brouillé al. La figure 3 illustre le cas où le nom pour lequel la réflexion doit être appliquée n'a pas été modifié lors de l'obfuscation. A l'étape 301, l'appel à la fonction de réflexion est intercepté et le module récupère le nom Ndyna pour lequel la réflexion devait être appliquée. A l'étape 302, un hachage du nom Ndyna est calculé. On obtient un identifiant 0x020400b. A l'étape 303 on détermine que cet identifiant n'est pas présent dans la table de correspondance. A l'étape 304, la réflexion est donc appliquée au nom Ndyna. Figure 2 illustrates the case where the name (for which the reflection function is to be applied) was changed during obfuscation. In step 201, the call to the reflection function is intercepted and the module retrieves the Norig name for which the reflection was to be applied. In step 202, a hash of the Norig name is calculated. We obtain an identifier 0xf28021d. At step 203, the presence of this identifier is verified in a correspondence table between the identifiers and the scrambled names corresponding to them. In the example, the module determines that the identifier 0fx28021d is present in the table and thus retrieves the associated scrambled name: al. In step 204, the reflection is applied to the scrambled name al. Figure 3 illustrates the case where the name for which the reflection is to be applied has not been modified during obfuscation. In step 301, the call to the reflection function is intercepted and the module retrieves the name Ndyna for which the reflection should be applied. In step 302, a hash of the name Ndyna is calculated. We obtain an identifier 0x020400b. In step 303 it is determined that this identifier is not present in the correspondence table. In step 304, the reflection is applied to the Ndyna name.
Si un utilisateur examine les noms des composants logiciels qui passent lors de l'exécution, il pourra au mieux obtenir la valeur de hachage correspondante dans la table. Cependant, cette valeur ne lui permet pas de déduire le nom du composant pour lequel la fonction de réflexion a été appelée. If a user examines the names of the software components that pass at runtime, he can at best get the corresponding hash value in the table. However, this value does not allow him to deduce the name of the component for which the reflection function was called.
Il faut également noter qu'en programmation orientée objet, deux champs appartenant à des classes différentes peuvent porter le même nom avant l'obfuscation. Pour éviter que ces champs n'aboutissent à un même identifiant après obfuscation, le calcul prédéterminé doit être appliqué au nom complet d'un attribut. Pour un champ, on hachera par exemple une chaîne de caractères composée du nom de la classe et du nom du champ. Pour une méthode, on hachera une chaîne de caractères composée du nom de la méthode et d'un complément représentatif des arguments de la méthode. It should also be noted that in object-oriented programming, two fields belonging to different classes may have the same name before obfuscation. To prevent these fields from arriving at the same identifier after obfuscation, the predetermined calculation must be applied to the full name of an attribute. For a field, you will for example chop a string composed of the name of the class and the name of the field. For a method, we will chop a string composed of the name of the method and a complement representative of the arguments of the method.
Dans une application particulière au langage Java, on peut prévoir d'utiliser la classe Java String pour réaliser la fonction de hachage. Ainsi, pour un nom de composant s à hacher, la fonction de hachage aboutira à une valeur de 32 bit obtenue de la façon suivante: S [0] *31^ (n-1)+s [2] *31^ (n-2)...+s [n-1] La classe Java Hashtable peut être utilisée pour former une table de correspondance. In an application specific to the Java language, one can expect to use the Java String class to perform the hash function. Thus, for a component name s to be chopped, the hash function will result in a value of 32 bit obtained as follows: S [0] * 31 ^ (n-1) + s [2] * 31 ^ (n -2) ... + s [n-1] The Java Hashtable class can be used to form a lookup table.
Le module inséré dans le code compilé peut être réalisé sous java.lang. class. The module inserted in the compiled code can be realized under java.lang. class.
de la table de correspondance. Lors d'appels à des forme de classe propriétaire Cette classe peut contenir une copie méthodes de réflexion, réflexion. from the correspondence table. When calling for proprietary class form This class may contain a copy methods of reflection, reflection.
java.lang.class impliquant une fonction de la classe propriétaire intercepte cette Cette classe propriétaire effectue les hachages et effectue les tests de présence des 20 identifiants dans les tables de correspondance. java.lang.class involving a function of the owner class intercepts this This owner class performs the hashes and performs the presence tests of the 20 identifiers in the lookup tables.
Pour limiter encore les informations qui pourraient être déduites du code compilé, on utilise plusieurs tables de correspondance. L'identifiant et le nom brouillé sont stockés dans une table choisie en fonction du nom brouillé, du nom du composant ou de l'identifiant. To further limit the information that could be derived from the compiled code, several lookup tables are used. The ID and scrambled name are stored in a table based on the scrambled name, component name, or ID.
Dans cette variante, on peut prévoir que le calcul comprenne plusieurs fonctions de hachage. On peut prévoir qu'une première fonction de hachage sera appliquée à un nom, pour déterminer dans quelle table son identifiant devrait être stocké. Une seconde fonction de hachage serait alors appliquée à ce nom pour obtenir l'identifiant associé à ce nom. Cette variante permet d'obtenir un gain en sécurité qui compense largement le temps de traitement supplémentaire généré. In this variant, it can be provided that the calculation comprises several hash functions. It can be expected that a first hash function will be applied to a name, to determine in which table its identifier should be stored. A second hash function would then be applied to this name to obtain the identifier associated with this name. This variant makes it possible to obtain a gain in safety which largely compensates for the additional processing time generated.
Selon un autre mode de réalisation, l'obfuscation implique l'insertion d'une clé préférentiellement dans une mémoire à accès restreint. Il peut par exemple s'agir d'une mémoire amovible et externe à un appareil électronique mémorisant le logiciel obfusqué. Cette mémoire peut être incluse dans une clé USB, une carte à puce ou tout autre support mémoire similaire. Cette mémoire peut également être incluse dans l'appareil électronique. Selon une variante, la clé est insérée dans le code compilé. According to another embodiment, the obfuscation involves the insertion of a key preferentially in a restricted access memory. It may for example be a removable memory and external to an electronic device storing the software obfuscated. This memory can be included in a USB key, a smart card or any other similar memory medium. This memory can also be included in the electronic device. Alternatively, the key is inserted into the compiled code.
Le calcul prédéterminé met alors en uvre un procédé de cryptage à l'aide de cette clé. On calcule des noms brouillés par cryptage de plusieurs noms de composants puis on mémorise une liste de ces noms qui ont fait l'objet d'un remplacement lors de l'obfuscation. Si le nom pour lequel une réflexion doit être appliquée est présent dans la liste, la réflexion est appliquée au nom brouillé ainsi obtenu. Si ce nom n'est pas présent dans la liste, la réflexion lui est appliquée. The predetermined calculation then implements an encryption method using this key. Scrambled names are calculated by encrypting several component names and then storing a list of those names that have been overridden during obfuscation. If the name for which a reflection is to be applied is present in the list, the reflection is applied to the scrambled name thus obtained. If this name is not present in the list, the reflection is applied to it.
Un logiciel compilé ainsi obfusqué peut par exemple être mis en uvre dans un objet électronique adapté. Un tel objet électronique peut présenter un support de stockage mémorisant ce logiciel. Ce logiciel peut notamment être stocké sous forme d'applet Java. L'objet électronique peut notamment être un terminal, un combiné de téléphonie mobile ou une carte à puce. Compiled software thus obfuscated may for example be implemented in a suitable electronic object. Such an electronic object may have a storage medium storing this software. This software can notably be stored as a Java applet. The electronic object may in particular be a terminal, a mobile telephone handset or a smart card.
Claims (7)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0406076A FR2871255B1 (en) | 2004-06-04 | 2004-06-04 | ASSOCIATED COMPILING CODE, TERMINAL AND SOFTWARE OBFUSCATION METHOD |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0406076A FR2871255B1 (en) | 2004-06-04 | 2004-06-04 | ASSOCIATED COMPILING CODE, TERMINAL AND SOFTWARE OBFUSCATION METHOD |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2871255A1 true FR2871255A1 (en) | 2005-12-09 |
FR2871255B1 FR2871255B1 (en) | 2006-08-04 |
Family
ID=34948898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR0406076A Expired - Fee Related FR2871255B1 (en) | 2004-06-04 | 2004-06-04 | ASSOCIATED COMPILING CODE, TERMINAL AND SOFTWARE OBFUSCATION METHOD |
Country Status (1)
Country | Link |
---|---|
FR (1) | FR2871255B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2689376A4 (en) * | 2011-03-24 | 2015-05-20 | Irdeto Bv | System and method providing dependency networks throughout applications for attack resistance |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000072112A2 (en) * | 1999-05-12 | 2000-11-30 | Fraunhofer Crcg, Inc. | Obfuscation of executable code |
US6668325B1 (en) * | 1997-06-09 | 2003-12-23 | Intertrust Technologies | Obfuscation techniques for enhancing software security |
WO2004023313A1 (en) * | 2002-09-04 | 2004-03-18 | Fraunhofer Crcg, Inc. | Protecting mobile code against malicious hosts cross references to related applications |
-
2004
- 2004-06-04 FR FR0406076A patent/FR2871255B1/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6668325B1 (en) * | 1997-06-09 | 2003-12-23 | Intertrust Technologies | Obfuscation techniques for enhancing software security |
WO2000072112A2 (en) * | 1999-05-12 | 2000-11-30 | Fraunhofer Crcg, Inc. | Obfuscation of executable code |
WO2004023313A1 (en) * | 2002-09-04 | 2004-03-18 | Fraunhofer Crcg, Inc. | Protecting mobile code against malicious hosts cross references to related applications |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2689376A4 (en) * | 2011-03-24 | 2015-05-20 | Irdeto Bv | System and method providing dependency networks throughout applications for attack resistance |
US9811666B2 (en) | 2011-03-24 | 2017-11-07 | Irdeto B.V. | System and method providing dependency networks throughout applications for attack resistance |
Also Published As
Publication number | Publication date |
---|---|
FR2871255B1 (en) | 2006-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1688818A1 (en) | Process for the secure management of the execution of an application | |
EP1095491A1 (en) | Method, server system and device for making safe a communication network | |
EP3033857B1 (en) | Binary code authentication | |
WO2009023683A2 (en) | Methods and systems for transmitting a data attribute from an authenticated system | |
EP1449067B1 (en) | Method and system for making secure a pseudo-random generator | |
EP2336931B1 (en) | Method for signature verification | |
CA2988357C (en) | Encryption method, corresponding encryption method, devices and programs | |
FR2871255A1 (en) | Software obfuscating method for e.g. chip card, involves replacing software component name in code by scrambled name, and inserting module in code to generate identifier of component name by irreversible hashing to find scrambled name | |
EP1387519A2 (en) | Method for protecting an electronic circuit against fault-based attacks | |
CA2589223A1 (en) | Method for identifying a user by means of modified biometric characteristics and a database for carrying out said method | |
WO2004084525A2 (en) | Method of protecting a mobile-telephone-type telecommunication terminal | |
FR2793906A1 (en) | SYSTEM AND METHOD FOR MANAGING ATTRIBUTES IN AN OBJECT-ORIENTED ENVIRONMENT | |
EP3889809A1 (en) | Protection of a secret software program and confidential data in a secure enclave | |
EP2252978B1 (en) | Integrated circuit card having a modifiable operating program and corresponding method of modification | |
WO2020193583A1 (en) | Method for running secure code, corresponding devices, system and programs | |
FR3020486A1 (en) | MODULAR SAFETY AUDIT APPLICATION SYSTEM FOR MEASURING THE LEVEL OF VULNERABILITY TO THE EXFILTRATION OF SENSITIVE DATA. | |
FR3141540A1 (en) | Process for protecting data stored in a connected object | |
FR3111037A1 (en) | Method of deriving a partial signature with partial verification | |
FR3140457A1 (en) | Method for improving hash of a file | |
FR2995110A1 (en) | Method for optimizing use of e.g. memory, of electronic device i.e. smart card, involves protecting smart card from physical attacks by masking from substitution box and inverse substitution box upon implementing cryptographic algorithm | |
FR2835331A1 (en) | PROCESS FOR MONITORING THE USE OF DIGITAL CONTENT BY A SECURITY MODULE OR A CHIP CARD INCLUDING LEDIT MODULE | |
FR3112643A1 (en) | Apparatus, method and program for secure communication between white boxes | |
FR2957168A1 (en) | Data base constructing method for performing biometric verification relative to one person, involves determining and storing complementary data from digital data in negative data base | |
Dancer | A platform independent investigative process model for smartphones | |
FR2888437A1 (en) | Service e.g. marine meteorological consultation service, access controlling method for e.g. mobile telephone, involves downloading marked validation tokens in multimedia terminal before user chooses service to be utilized |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
ST | Notification of lapse |
Effective date: 20100226 |