EP2137663A1 - Procede de protection de documents numeriques contre des utilisations non autorisees - Google Patents

Procede de protection de documents numeriques contre des utilisations non autorisees

Info

Publication number
EP2137663A1
EP2137663A1 EP08775741A EP08775741A EP2137663A1 EP 2137663 A1 EP2137663 A1 EP 2137663A1 EP 08775741 A EP08775741 A EP 08775741A EP 08775741 A EP08775741 A EP 08775741A EP 2137663 A1 EP2137663 A1 EP 2137663A1
Authority
EP
European Patent Office
Prior art keywords
code
structural
grammar
digital document
source code
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.)
Withdrawn
Application number
EP08775741A
Other languages
German (de)
English (en)
Inventor
Mohamed Amine Ouddan
Hassane Essafi
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.)
Surys SA
Original Assignee
Advestigo
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 Advestigo filed Critical Advestigo
Publication of EP2137663A1 publication Critical patent/EP2137663A1/fr
Withdrawn 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
    • 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/16Program or content traceability, e.g. by watermarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files

Definitions

  • the first area is the software reworking because the constant evolution of these requires a continuous maintenance of their source codes.
  • Duplication of the code is the main problem encountered during maintenance where the quantity of the duplicated code is generally between 5% and 10% and can be up to 50%.
  • the development of duplicate code detection tools is necessary to facilitate software reworking operations for possible new features.
  • the second domain is the identification of the author of a program based on a set of metrics characterizing the programming style that may contain the source code.
  • a set of metrics characterizing the programming style that may contain the source code.
  • cyclomatic complexity is based on the cyclomatic number of graph theory. It characterizes the connectivity between the elements of the code, which is represented by a graph reflecting the behavior of the program associated with the code.
  • the two main models of structural information representation are conceptual graphs and dependency graphs and data flow control graphs.
  • the characteristic vectors can be altered by simply adding some instructions to the plagiarized code.
  • Another disadvantage of this type of model is due to the fact that two codes having nearby vectors but whose semantic content is different, will be considered as a case of plagiarism. This disadvantage can be explained by the absence of structural and semantic information in representations based on the vector model.
  • Dependency graphs and flow control graphs allow to analyze and study the trace of a program associated with a code. This trace is considered as a sequence of information that reflects the evolution of the state of this program during its execution.
  • Some of the research that has focused on dependence and flow control graphs is Pfeiffer's work, where he proposed algorithms that characterize and estimate dependencies on a code, in order to study and evaluate analyze the behavior of the program associated with it.
  • Dependency graphs are constructed from an analysis based on the decomposition of source code into control structures such as iterative blocks, conditional blocks, or simple instruction blocks. Thus the structure of a dependency graph describes in which order the elementary instructions must be executed by the process associated with a code.
  • a data flow control graph is a directed and labeled graph.
  • the nodes of this type of graph consist of the basic elements of the code, and the arcs connecting the nodes are labeled according to the nature of the data flow existing between these nodes.
  • Transformations of the first type are lexical in nature. These transformations include:
  • Transformations of the second type are of a structural nature requiring a knowledge of the language and a strong dependence on the grammar which defines it. Among the most commonly used structural transformations are:
  • the invention aims to overcome the aforementioned drawbacks and to allow to be able to characterize a source code so that it is then possible to automatically detect different variants of plagiarism.
  • Declarations can be data types, variables, functions, or predicates. For expressions a wide variety is allowed in programming, such as relational, logical, arithmetic and other expressions that are specific to each language (eg C / C ++ "Cast" expressions).
  • the third component may be atomic in nature such as input / output instructions, or of a composite nature such as iterative blocks.
  • the two main features of programming languages are the regular aspect of the syntax and the notion of data flow. These two features make it possible to establish a correspondence between the structural content of the code and its characteristic structure.
  • GL grammar consists of a set of rules noted
  • Structural characterization consists of calculating a trace of the syntax analysis of the code. This trace is defined by a subset of grammar rules that reflect how the code is parsed. The subset thus contains the grammar rules that were used during parsing, during which the characterization actions that are associated with these rules are executed. These actions consist of inserting characteristic terms into the "Structural Sequence” reflecting the structural concepts contained in each of the rules. For example, “an iterative block and a stop condition" are two concepts that emerge from the three grammar rules that define the "While", “For”, and "Do” control structures, respectively. need to associate with these three rules the same characterization actions and the same Structural Terms that express these two concepts.
  • the characterization of the lexical and syntactic aspect of the code makes it possible to extract a topology of the content of the latter.
  • This topology reflects the structural links that may exist between different concepts that emerge from one or more grammar rules such as functions, argument lists, atomic instruction blocks, and so on.
  • This characterization must be robust to the alterations that a plagiarized code may contain compared to the original code, hence the need to associate the grammar rules to Structural Terms in a relevant way.
  • GD L is the Grammar Dictionary of the L language used to compute the trace of the syntax analysis of the code so that it can feed the Structural Sequence as the grammar rules are used during the analysis.
  • the measure of similarity between two sequences must be robust to the transformations that may be contained in a plagiarized version of the code, such as permutations and duplications of code segments, insertions and deletions. lines of code, etc.
  • Dotplot A sequence comparison based on dot matrix technique known as "Dotplot”, proves to be the most appropriate to satisfy these three constraints. This technique is very informative from a visual point of view
  • the matrix of points thus allows a visual representation of the alignment between two Structural Sequences. These two sequences are placed along the axes of a two-dimensional graph, where each point ⁇ # reflects a similarity between the F me term and the f me term in the two sequences.
  • FIG. 1 is a block diagram schematically showing the structure of an action grammar module used in the context of the present invention
  • FIG. 2 is a diagram illustrating the measurement of similarity between two structural sequences A and B, according to a step of the method according to the invention
  • the present invention provides a particular characterization of the content of the source code documents to measure the similarity between the content of a digital document to be protected and that of a digital document. a digital document to analyze and thus be able to detect the existence of cases of plagiarism.
  • the characterization of the content of the source code documents is a very complex task because of the similarity that exists between the different source codes of the IT projects.
  • the present invention provides a characterization approach based on a Grammar Dictionary and the notion of Action Grammar.
  • Dotplot a sequence comparison based on the dot matrix technique known as "Dotplot”.
  • A ⁇ ,, a 2 , -, a n > (1)
  • Seqf + is the f we under positive sequence extracted from the vector VMH and Seqf + is the f we under positive sequence extracted from the vector VMv.
  • FIG. 1 summarizes the measure of similarity between the two Structural Sequences A and B:
  • the translation of a source code from the original language to another language is also used as a plagiarism technique.
  • the plagiarism language is of the same type as the original language, for example a code written in Java can be plagiarized by a translation to a code written in C ++, or from a code written in Pascal to another code written in C. Therefore it is important to characterize d an identical way two codes written in two different languages in order to counter the cases of plagiarism using the translation technique.
  • the modular architecture of the system according to the invention and in particular that of the Action Grammar module offers the possibility of performing a multi-language characterization.
  • two similar codes written in different languages can be represented in the same sequence space.
  • a characterization approach based on the grammar of the language and independent of the textual representation of the code makes it possible to reinforce the relevance of the Structural Sequences with respect to the structure of the code and in particular the syntax of the language.
  • each Structural Term must be associated with the set of grammar rules that reflect the same concept. For example, the iterative blocks of "For", "While” and "Do” type which are represented by the same Structural Term.
  • the fact of associating the same Structural Term with the control operations of the same type allows more robustness and relevance in the Structural Sequences in particular to counter the transformation techniques which consist in replacing control structures by others which are similar.
  • the first database represents the source of JDK 1.4.0
  • the second database consists of a set of specially developed codes.
  • the curves in Figure 3 represent the frequencies of appearance of the Structural Terms in the characteristic sequences of the two bases. It can be seen that for the two bases, the most frequent and most redundant terms appear in the Structural Sequences of the majority of the codes belonging to the two bases and that the two curves represent the same pace.
  • Level 1 Modifying comments, adding new comments, deleting comments and modifying character strings in output messages.
  • Level 2 Variable name changes (9 variables) + level 1 changes.
  • Level 3 Changes in the declarations and their position in the code (replace two constants with two new variables declared, change declaration positions between three variables) + changes in level 2.
  • Level 4 Replace two "For” iterative blocks with two “While” blocks, and an "It” iterative block with a "For” block + the changes of level 3.
  • Level 5 Change of modularity (creation of two new functions, change of position between two existing functions) + changes of level 4.
  • the plagiarism rate calculated from the Structural Sequences is of the order of 100% for the levels 0, 1 and 2 and remains important for the higher levels (of the order of 70% for level 3 and 60% for level 4).
  • the method of characterization of source code documents which is based on the notion of "Grammar Dictionary”, makes it possible to characterize the lexical and syntactic information of a source code by sequential structures. These structures preserve the structural information conveyed by the code even if it has undergone several levels of transformations. Another peculiarity of the method lies in the fact that it is possible to carry out multi-language characterization and that it is thus possible to detect plagiarized and translated codes in other languages. Structural Sequences are quite robust to transformation techniques that are commonly used in plagiarism operations.
  • the dot matrix approach provides robustness in plagiarism detection.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

On identifie pour un document numérique à protéger constituant un code source un langage de programmation L défini par une grammaire G<SUB>L</SUB>; on associe audit langage de programmation L un module de grammaire à actions; on réalise une caractérisation structurelle du code en une seule passe d'analyse syntaxique à partir du module de grammaire à actions; pour ce faire, on construit un dictionnaire de grammaire GD<SUB>L</SUB> associé au langage de programmation et comprenant un ensemble de termes structurels tels que chacun de ces termes est associé à une règle ou un ensemble de règles et on transforme le code source en une séquence structurelle (R<SUB>L</SUB>,<SUB/>T<SUB>L</SUB>, GD<SUB>L</SUB>) comprenant l'ensemble des termes structurels et le dictionnaire GD<SUB>L</SUB> de grammaire du langage L; on procède de la même manière à la transformation d'un document numérique à analyser en une séquence structurelle (R<SUB>L</SUB>, T<SUB>L</SUB>, GD<SUB>L</SUB>) et on mesure le taux de plagiat entre le code source du document numérique à protéger et le code source du document numérique à analyser à l'aide d'une quantification du taux d'alignement entre les séquences structurelles respectives des codes sources du document numérique à protéger et du document numérique à analyser.

Description

Procédé de protection de documents numériques contre des utilisations non autorisées
Domaine de l'invention
La présente invention a pour objet un procédé de protection de documents numériques contre des utilisations non autorisées.
Dans un monde dominé par la technologie de l'information, les logiciels jouent un rôle majeur dans la prospérité d'une entreprise et ils sont considérés comme la colonne dorsale de son activité. Ils matérialisent souvent le savoir faire et la propriété intellectuelle d'une entreprise. Ainsi un logiciel créé par une entreprise représente un patrimoine et un actif très important pour cette dernière. Malgré cette importance ce patrimoine est souvent peu ou mal protégé.
Il est primordial pour une entreprise de veiller à ce que ses logiciels ne soient pas "totalement" ou "partiellement" diffusés sans son accord. Ceci afin que son facteur différentiateur (par rapport à la concurrence) et sa valeur ajoutée pour ses clients ne soient mis en cause. Malheureusement il n'existe pas encore de moyens techniques permettant à ces entreprises d'être averties à chaque tentative de diffusion illicite de leurs logiciels.
Art antérieur
Dans le cas où un logiciel a été signalé comme potentiellement une reprise d'un autre logiciel, la confrontation entre le logiciel d'origine et le logiciel suspect est souvent effectuée par un expert humain qui a pour vocation de déterminer l'ampleur du piratage. Cette expertise est effectuée sur des éléments de base constituant un logiciel, tel que l'architecture des programmes, la documentation associée au logiciel, et le code objet résultant de la compilation de son code source. Ce dernier représente le constituant le plus exploité lors des expertises.
Les documents code source sont structurés selon une grammaire précise, où chaque ligne joue un rôle dans le résultat de l'exécution du programme qui lui est associé, et par conséquent elle est porteuse de plusieurs sources d'informations.
On a déjà envisagé de transformer le contenu d'un code source écrit dans un langage de programmation de haut niveau en un code écrit dans un langage d'un niveau d'abstraction moins élevé par rapport à celui du langage source, tout en préservant la signification du code.
Il existe trois domaines d'application où l'accès par le contenu au code source est une étape nécessaire. Le premier domaine est le remaniement des logiciels car l'évolution constante de ces derniers nécessite une maintenance continue de leurs codes source. La duplication du code est le principal problème rencontré lors de la maintenance où la quantité du code dupliqué est en général entre 5% et 10% et peut aller jusqu'à 50 %. Le développement d'outils de détection du code dupliqué s'avère nécessaire afin de faciliter les opérations de remaniement des logiciels pour d'éventuelles nouvelles fonctionnalités.
Le second domaine est l'identification de l'auteur d'un programme en se basant sur un ensemble de métriques caractérisant le style de programmation que peut contenir le code source. Parmi les applications qui peuvent bénéficier de cette identification, on peut citer le milieu juridique et universitaire notamment pour les réclamations des droits d'auteur, le milieu industriel et plus précisément les systèmes de veille sécuritaire en temps réel. La tâche principale de ce genre de systèmes consiste à détecter les intrusions dont le style de programmation est différent des styles des programmeurs locaux.
Le troisième domaine est la détection de cas de plagiats dans le code. Parker et Hamblen définissent le plagiat du code source comme étant une reproduction d'un code à partir d'un code existant, avec un nombre restreint de changements. L'évolution d'Internet et les moteurs de recherche comme Google, sont deux facteurs majeurs qui facilitent l'obtention du code source, favorisant ainsi l'apparition et la multiplication des logiciels Open-Source, et par conséquent, l'accès libre au code source rend possible le plagiat du logiciel sans respecter les licences associées. Les méthodes et approches permettant de représenter le contenu d'un code source, doivent conserver le maximum possible d'informations que véhicule le code. A l'inverse des documents textuels en langages naturels, le contenu des documents code source peut être projeté dans des espaces de représentation différents. Cette différence réside dans le fait d'utiliser des approches variées, telles que les approches statistiques, conceptuelles ou structurelles. Les particularités d'un code source offrent un grand choix de modèles permettant de caractériser son contenu.
Deux principales approches émergent de cette variété de modèles : des approches basées sur l'information purement statistique, et des approches basées sur l'information structurelle.
Le principe des méthodes basées sur le modèle vectoriel se fonde sur le calcul d'un ensemble de métriques qui singularisent chaque code source. Tous les codes sont donc caractérisés par un vecteur de m valeurs et représentés dans un espace à m dimensions. L'ensemble de ces vecteurs est utilisé par un système de reconnaissance de forme qui consiste à calculer les distances statistiques et à mesurer la corrélation entre ces vecteurs caractéristiques. Dans le cas d'une grande base, où l'ensemble de ses codes est représenté par un nuage de points dans l'espace vectoriel, l'utilisation des différentes méthodes de classification et de clusterisation s'avère indispensable dans le but d'avoir une recherche rapide et pertinente.
D'autre part, les vecteurs caractéristiques doivent être normalisés, afin d'avoir une clusterisation et une comparaison uniforme, où toutes les métriques qui composent ces vecteurs y participent. On peut citer quelques métriques qui ont été utilisées dans les travaux antérieurs:
- La complexité du code : cette complexité est reflétée par un ensemble de métriques définies par Halstead. Ces métriques représentent des mesures quantitatives des opérateurs et opérandes qui constituent le code source.
- La mesure de complexité proposée en 1976 par Thomas J.McCabe. Cette mesure connue sous le nom de complexité cyclomatique, est fondée sur le nombre cyclomatique de la théorie des graphes. Elle caractérise la connectivité entre les éléments du code, qui est représentée par un graphe reflétant le comportement du programme associé au code.
- Les métriques utilisées par Faidhi et Robinson dans la caractérisation des programmes Pascal, tel que le nombre total de caractères par ligne, la longueur moyenne des fonctions et des procédures, le pourcentage des blocs itératifs, le nombre total d'expressions, etc.
D'autres métriques peuvent être ajoutées et combinées entre elles afin de mieux caractériser un code source.
Dans l'approche basée sur les modèles structurels, le but est d'exploiter les propriétés structurelles du code source. Les deux principaux modèles de représentation de l'information structurelle sont les graphes conceptuels et les graphes de dépendances et de contrôle de flux de données.
Les outils basés sur le modèle vectoriel ne sont pas assez performants pour être robustes aux différentes techniques de plagiats.
Les vecteurs caractéristiques peuvent être altérés par un simple ajout de quelques instructions au code plagié. Un autre inconvénient de ce type de modèle est dû au fait que deux codes ayant des vecteurs proches mais dont le contenu sémantique est différent, seront considérés comme un cas de plagiat. On peut expliquer cet inconvénient par l'absence de l'information structurelle et sémantique dans les représentations basées sur le modèle vectoriel.
Par contre les outils de détection de plagiats basés sur les approches structurelles sont moins sensibles aux changements que peut subir un code plagié. Mais la difficulté réside dans le fait d'utiliser des structures complexes pour représenter un code source, et de trouver les techniques adéquates pour quantifier la similarité entre ces structures. Ce qui fait augmenter considérablement le coût de calcul, en particulier pour les approches basées sur les arbres et sur les graphes. Le modèle de graphes conceptuels proposé par John Sowa est un modèle de représentation des connaissances où chaque graphe est un graphe biparti-étiqueté et composé de deux types de sommets : des sommets étiquetés par des noms de concept (représentant des entités, des attributs, des états et des événements), et des sommets étiquetés par des noms de relations conceptuelles qui définissent les liens entre les concepts. Gilad Mishne et Maarten de Rijke utilisent les graphes conceptuels pour représenter le contenu structurel d'un code, où les concepts sont représentés par les blocs d'instructions et les opérations qui sont permises par le langage, alors que les relations sont représentées par les liens structurels qui peuvent exister entre les concepts.
Les graphes de dépendance et de contrôle de flux permettent d'analyser et d'étudier la trace d'un programme associé à un code. Cette trace est considérée comme une suite d'informations qui reflète l'évolution de l'état de ce programme au cours de son exécution. Parmi les travaux de recherche s'étant intéressés aux graphes de dépendance et de contrôle de flux, on peut citer les travaux de Pfeiffer, où il a proposé des algorithmes qui caractérisent et estiment les dépendances d'un code, afin d'étudier et d'analyser le comportement du programme qui lui est associé. Les graphes de dépendance sont construits à partir d'une analyse basée sur la décomposition du code source en structures de contrôle telles que les blocs itératifs, les blocs conditionnels ou les blocs d'instructions simples. Ainsi la structure d'un graphe de dépendance décrit dans quel ordre les instructions élémentaires doivent être exécutées par le processus associé à un code.
Basé sur l'analyse syntaxique du code, un graphe de contrôle de flux de données est un graphe orienté et étiqueté. Les noeuds de ce type de graphe sont constitués des éléments de base du code, et les arcs connectant les nœuds sont étiquetés selon la nature du flux de données existant entre ces noeuds.
Il existe différentes techniques de transformation du code source qui sont souvent utilisées lors des opérations de plagiat. Ces techniques permettent de différencier le contenu d'un code plagié par rapport à celui du code original tout en conservant les mêmes fonctionnalités d'origines. Les outils de détection de plagiat doivent être robustes à ces transformations afin de mieux détecter les cas de plagiats.
La difficulté de la tâche de détection dépend de la complexité des modifications apportées au code original. Ces transformations varient des plus simples aux plus complexes, allant du simple copier/coller à la réécriture de quelques parties du code. On peut distinguer deux types de transformations :
A) Les transformations du premier type sont de nature lexicale. Parmi ces transformations, on peut citer :
- L'attribution de nouveaux noms aux identifiants (variables, fonctions) : Les noms des identifiants qui ont un nom significatif sont remplacés par des noms générés d'une manière aléatoire, comme l'illustre le Tableau 1 ci-dessous. - La substitution des chaînes de caractères constantes par des chaînes de codes (code Ascii, Unicode, etc) tel que le contenu soit conservé.
- La modification des Commentaires : l'une des transformations que peut subir un code original est la suppression de tous les commentaires du code (ou l'insertion de nouveaux commentaires). Dans d'autres cas ils sont modifiés manuellement mais tout en préservant le même sens que l'original.
B) Les transformations du second type sont de nature structurelle nécessitant une connaissance du langage et une forte dépendance à la grammaire qui le définit. Parmi les transformations structurelles les plus couramment utilisées on peut citer :
- Le changement de l'ordre des blocs d'instructions, de telle sorte que le comportement du programme ne soit pas affecté.
- la réécriture des expressions (permutation entre les opérandes et les opérateurs).
- Le changement du type des variables.
- L'ajout redondant d'instructions, de blocs d'instructions ou de variables, à condition que le comportement du programme ne soit pas modifié. - La dégénérescence du flux de contrôle, comme illustré dans le tableau 2 ci-dessous.
- La substitution des structures de contrôle itératives ou conditionnelles par d'autres structures de contrôle équivalentes. Par exemple un bloc itératif de type "While" est transformé en un bloc itératif de type "For". - La substitution des appels de fonctions par les corps de ces fonctions. Ces transformations peuvent être regroupées en fonction de leur niveau de complexité comme le spécifient les travaux de Faidhi et Robinsons où elles sont représentées par un spectre à six niveaux. Du niveau 1 au niveau 3 les transformations sont de nature lexicale, du niveau 4 au niveau 5 les transformations concernent la structure et le flux de contrôle, alors que le niveau 6 regroupe toutes les transformations possibles qui sont de nature sémantique telle que la réécriture des expressions. Les caractérisations obtenues par les approches basées sur les modèles vectoriels ainsi que celles basées sur les modèles structurels permettent de ne traiter efficacement que les transformations de niveaux 1 à 3.
Code original Code transformé
1 #ifndef PI H 1 #ifndef 11010
2 #define PI H 2 #define 11010
3 #ifndef PI 3 #ifndef 11
4 #define PI (4*atan(l) ) 4 #define 11 (4*atan(l) )
5 #endif 5 ttendif
6 #define deg2rad(d) d*Pl/180 6 #define Ol (110) 110*11/180
7 #define rad2deg(r) r*180/PI 7 #define OO (111) 111*180/11
8 #endif /* PI H */ 8 #endif /* 11010 */
Tableau 1 Code original Code transformé
1 int main () { 1 int main () {
2 float x=-2.0, y=l .2, z ; 2 float x=-2.0,y=l .2 , z;
3 z=fabs (x) ; int br=l;
4 y++; intit :
5 x+=y; switch(br) {
6 z=x+y; case 1 :
7 printf ("%f ,%f ,%f ",x,y,z) ; 3 z=fabs (x) ;
8 return 0 ; 4 y++ ;
9 } br=2 ; goto init; case 2 :
5 x+=y;
6 z=x+y;
7 printf ("%f,%f, %f", x, y;z) ;
}
8 return 0 ;
9 }
Tableau 2
Obiet et description succincte de l'invention
L'invention vise à remédier aux inconvénients précités et à permettre de pouvoir caractériser un code source de telle sorte qu'il soit ensuite possible de détecter de façon automatique différentes variantes de plagiats.
Ces buts sont atteints, conformément à l'invention, grâce à un procédé de protection de documents numériques contre des utilisations non autorisées, caractérisé en ce que l'on identifie pour un document numérique à protéger constituant un code source un langage de programmation L défini par une grammaire GL ; on associe audit langage de programmation L un module de grammaire à actions tel que : a) La grammaire GL est constituée d'un ensemble de règles noté /?={/?„/?,,...,/?„} b) Le module de grammaire à actions est constitué d'un ensemble d'actions noté Ac={si,s2,...,s J tel que :
• S1 = i,..., m est l'ensemble des actions associées à la règle/?,
• m ≤ n ; on réalise une caractérisation structurelle du code en une seule passe d'analyse syntaxique à partir du module de grammaire à actions ; pour ce faire, on construit un dictionnaire de grammaire GDL associé au langage de programmation et comprenant un ensemble de termes structurels tels que chacun de ces termes est associé à une règle ou un ensemble de règles qui appartiennent à ladite grammaire GL et on transforme le code source en une séquence structurelle (RL, TL, GDL) comprenant l'ensemble des termes structurels et le dictionnaire GDL de grammaire du langage L ; on procède de la même manière à la transformation d'un document numérique à analyser en une séquence structurelle (RL, TL, GDL) et on mesure le taux de plagiat entre le code source du document numérique à protéger et le code source du document numérique à analyser à l'aide d'une quantification du taux d'alignement entre les séquences structurelles respectives des codes sources du document numérique à protéger et du document numérique à analyser.
Les trois principales composantes qui singularisent les langages de programmation par rapport aux autres langages sont : les déclarations, les instructions et les expressions. Ces composantes sont considérées comme des "Points Critiques" dans un code source, d'où la nécessité d'exploiter l'information contenue à ce niveau du code.
Les déclarations peuvent être des types de données, des variables, des fonctions ou des prédicats. Pour les expressions une grande variété est permise en programmation, telles que les expressions relationnelles, logiques, arithmétiques et d'autres qui sont spécifiques à chaque langage (par exemple les expressions de type "Cast" en C/C++). La troisième composante peut être de nature atomique tel que les instructions d'entrées/sorties, ou de nature composée tel que les blocs itératifs.
Ces Points Critiques sont représentés dans le code par un ensemble de lignes dont la suppression peut causer des changements dans le comportement (ou le résultat) du programme généré par ce code. On peut constater qu'au niveau des Points Critiques cités précédemment il existe deux sources d'informations, et qui sont communes à tous les langages de programmation :
- La première source émerge à la suite d'une analyse du flux de données existant entre les Segments Indépendants du code. On appelle ici Segment Indépendant tout bloc d'instructions qui peut être utilisé séparément dans un autre contexte. Deux variantes d'analyse se présentent, une analyse intraprocédurale qui traite le flux entre les entités élémentaires d'un Segment Indépendant, et une analyse interprocédurale qui prend en considération le flux inhérent aux communications de ces Segments Indépendants. A partir de l'analyse des différents flux de données, les propriétés structurelles d'un code source sont alors déduites. Ces propriétés permettent de caractériser l'information véhiculée par les entités élémentaires d'un code source quel que soit le langage utilisé. Pour les langages impératifs les entités élémentaires d'un Segment Indépendant peuvent être des variables, des fonctions, des paramètres de fonction, des objets, etc. Pour les langages fonctionnels elles représentent les fonctions et les expressions, et enfin dans le cas des langages logiques elles représentent les prédicats, les symboles et l'ensemble des relations permises par ce type de langage.
- La deuxième source d'informations émerge d'une particularité commune à tous les langages de programmation. Cette particularité est représentée par l'aspect régulier du lexique et de la syntaxe des langages permettant de caractériser les codes bien formés. Cependant chaque langage de programmation possède ses propres particularités, impliquant une grammaire spécifique. En partant de ces grammaires une caractérisation structurelle basée sur la notion de "Dictionnaire de Grammaire" est réalisable quel que soit le modèle du langage de programmation (impératif, fonctionnel ou logique). Cette réalisation nécessite l'introduction de la notion de "Grammaire à Actions" qui est concrétisée par un module qui sera présenté plus en détail ci-dessous.
Une grammaire d'un langage permet d'effectuer une analyse lexicale et syntaxique du code dans le but de vérifier si ce dernier respecte bien la syntaxe du langage. Cette analyse est effectuée sans aucune interprétation du code. De ce fait, et pour accéder au contenu structurel d'un code, la grammaire doit permettre une traduction de ce code du langage de programmation vers le langage de caractérisation. Ainsi la grammaire doit être harmonisée avec un ensemble d'actions dites de "caractérisation", d'où la notion de "Grammaire à Actions". La logique de cette notion consiste à donner un sens à l'analyse syntaxique du code source et pouvoir ainsi incorporer une interprétation et une traçabilité de cette analyse dans un contexte de caractérisation. L'idée de base se résume donc dans l'association de chaque règle de grammaire à un ensemble d'actions. Ces actions contribuent à la construction des structures caractéristiques appelées "Séquences Structurelles", comme l'illustre la Figure 1. Chaque terme ou suite de termes appartenant à ces séquences, doit refléter un concept structurel discriminant permettant ainsi de singulariser un code lors de sa caractérisation structurelle.
Les deux principales particularités des langages de programmation sont l'aspect régulier de la syntaxe et la notion de flux de données. Ces deux particularités permettent d'établir une correspondance entre le contenu structurel du code et sa structure caractéristique.
Ainsi à chaque langage de programmation L défini par une grammaire notée GL1 on peut lui associer un module de Grammaire à Actions tel que :
1. La grammaire GL est constituée d'un ensemble de règles noté
2. Le module de Grammaire à Action est constitué d'un ensemble d'actions notéAc={s,,s2,...Λ,} tel Pue : .
• 5,. = {action, ,action2,...}, v/ = i,...,m est l'ensemble des actions associées à la règle/?,
• m ≤ n
La nature séquentielle des structures caractéristiques émerge de la ressemblance conceptuelle et fonctionnelle qui existe entre le compilateur et le module de Grammaire à Actions. Par sa définition, un compilateur permet de traduire un code source en un autre code écrit en langage machine. Ce langage est en général de nature séquentielle et il est représenté par une succession d'instructions. De la même manière, il est possible qu'un module de Grammaire à Actions puisse traduire le contenu du code en une séquence de symboles caractéristiques quel que soit le modèle du langage source.
On notera que le principal avantage du module de Grammaire à Actions est le fait de pouvoir réaliser une caractérisation structurelle du code en une seule passe d'analyse syntaxique. La caractérisation structurelle consiste à calculer une trace de l'analyse syntaxique du code. Cette trace est définie par un sous ensemble de règles de grammaire reflétant la manière dont le code est analysé syntaxiquement. Le sous ensemble contient donc les règles de grammaire qui ont été utilisées lors de l'analyse syntaxique, durant laquelle les actions de caractérisation qui sont associées à ces règles sont exécutées. Ces actions consistent à insérer des termes caractéristiques dans la "Séquence Structurelle" reflétant ainsi les concepts structurels contenus dans chacune des règles. Par exemple, "un bloc itératif et "une condition d'arrêt" sont deux concepts qui émergent des trois règles de grammaire qui définissent respectivement les structures de contrôle du type "While", "For" et "Do". D'où la nécessité d'associer à ces trois règles les mêmes actions de caractérisation et les mêmes Termes Structurels qui expriment ces deux concepts.
De ce fait il est construit un Dictionnaire de Grammaire associé à chaque langage de programmation. Ce dictionnaire est constitué d'un ensemble de termes appelés "Termes Structurels", tel que chacun de ces termes est associé à une règle ou un ensemble de règles. Pour chaque langage L défini par une grammaire GL constituée d'un ensemble de règles noté R, il est associé un Dictionnaire de Grammaire GDL permettant la mise en correspondance entre les règles et les termes : GDL : R -> Ensemble de Termes Structurels
Ri -» tj
La caractérisation de l'aspect lexical et syntaxique du code permet d'extraire une topologie du contenu de ce dernier. Cette topologie reflète les liens structurels pouvant exister entre les différents concepts qui émergent d'une ou de plusieurs règles de grammaire tels que les fonctions, les listes des arguments, les blocs d'instructions atomiques, etc. Cette caractérisation doit être robuste aux altérations que peut contenir un code plagié par rapport au code original, d'où la nécessité d'associer les règles de grammaires aux Termes Structurels d'une manière pertinente. La caractérisation structurelle d'un code écrit dans un langage L peut être assimilée à un automate fini, déterministe, et défini par le triplet (RυThGDL) ' avec : RL : est l'ensemble des règles de la grammaire GL TL : est l'ensemble des Termes Structurels
GDL est le Dictionnaire de Grammaire du langage L permettant de calculer la trace de l'analyse syntaxique du code et de pouvoir ainsi alimenter la Séquence Structurelle au fur et à mesure que les règles de grammaire sont utilisées durant l'analyse.
Après avoir présenté l'approche de caractérisation qui consiste à transformer un code source en un ensemble de Séquences Structurelles, il est mis en oeuvre une deuxième phase qui permet de mesurer le taux de plagiat entre deux codes source. Ceci peut être effectué par une quantification du taux d'alignement entre les Séquences Structurelles respectives.
La mesure de similarité entre deux séquences, considérée comme étant une abstraction au taux de plagiat, doit être robuste aux transformations que peut contenir une version plagiée du code, telles que les permutations et les duplications des segments de code, les insertions et les suppressions des lignes de code, etc.
Dans le but d'avoir une mesure qui reflète le plus pertinemment possible la ressemblance entre deux codes source, il est défini trois principales contraintes qui doivent être satisfaites lors de la mesure du taux de plagiat :
1. Les sous-séquences communes doivent être détectées sans tenir compte de leur position respective dans chacune des deux Séquences Structurelles. Autrement dit, la détection des plagiats doit être peu sensible aux permutations entres blocs d'instructions. 2. Les sous-séquences les plus longues doivent contribuer le plus dans le calcul du taux de plagiat, mais en même temps les sous- séquences noyées dans de longues séquences ne doivent pas être omises. Cette contrainte est due au fait que les longues sous- séquences sont plus fiables et plus pertinentes, alors que les sous- séquences courtes sont souvent source de bruit et de faux plagiats. 3. Éviter la redondance et le chevauchement entre les sous- séquences communes, c'est-à-dire que dans le cas où des segments indépendants d'un code original ont été repris d'une manière redondante dans le code plagié, il faut éviter que cette redondance apparaisse dans l'ensemble des sous-séquences communes, ce qui fait augmenter le taux de plagiat impertinemment, et inversement, c'est-à-dire dans le cas où les segments redondants ne sont pas des plagiats, ce qui fait baisser le taux de plagiat.
Une comparaison de séquence basée sur la technique de matrice de points connue sous le nom de "Dotplot", se révèle la plus adéquate à satisfaire ces trois contraintes. Cette technique est très informative du point de vue visuel
La matrice de points permet donc une représentation visuelle de l'alignement entre deux Séquences Structurelles. Ces deux séquences sont placées le long des axes d'un graphique à deux dimensions, où chaque point β# traduit une similarité entre le Fme terme et le fme terme dans les deux séquences.
Brève description des dessins
D'autres caractéristiques et avantages de l'invention ressortiront de la description suivante de modes particuliers de réalisation, donnés à titre d'exemples, en référence aux dessins annexés, sur lesquels :
- la Figure 1 est un schéma bloc montrant schématiquement la structure d'un module de grammaire à actions utilisé dans le cadre de la présente invention,
- la Figure 2 est un schéma illustrant la mesure de similarité entre deux séquences structurelles A et B, selon une étape du procédé selon l'invention,
- la Figure 3 montre deux courbes représentant les fréquences d'apparition des termes structurels dans des séquences caractéristiques de deux bases de codes Java, et - la Figure 4 montre les différents niveaux du spectre des techniques de plagiat d'un code source.
Description détaillée de modes particuliers de réalisation de l'invention Afin de pouvoir contrôler la diffusion des logiciels la présente invention assure une caractérisation particulière du contenu des documents code source pour mesurer la similarité entre le contenu d'un document numérique à protéger et celui d'un document numérique à analyser et pouvoir ainsi détecter l'existence de cas de plagiat. La caractérisation du contenu des documents code source est une tâche très complexe en raison de la similitude qui existe entre les différents codes sources des projets informatiques. De plus, il existe une multitude de techniques de plagiat pouvant être exploitées pour rendre les plagiats difficiles à détecter. La présente invention propose une approche de caractérisation basée sur un Dictionnaire de Grammaire et sur la notion de Grammaire à Actions. Ces deux notions sont concrétisées par un module permettant d'accéder au contenu structurel du code par le biais de la grammaire du langage dans lequel ce code est écrit. Les actions de ce module consistent à traduire un code du langage source vers un langage de caractérisation où le code est représenté par une séquence caractéristique. Une technique d'alignement de séquences est appliquée par la suite pour mesurer le taux de similarité entre deux séquences caractéristiques à deux codes distincts. Ce taux est considéré comme une abstraction au taux de plagiat détecté entre les deux codes en question. Comme on peut le voir sur la figure 1, qui symbolise un module de grammaire à actions, pour chaque langage de programmation constituant un langage source, tel que par exemple C++ ou Java, il est établi une grammaire qui comprend un ensemble de règles.
Chaque grammaire est harmonisée avec un ensemble d'actions dites de caractérisation. Ces actions contribuent à la construction des structures caractéristiques dénommées « séquences structurelles ». Il est alors défini un langage de caractérisation ou langage cible à partir des séquences caractéristiques, qui se substitue au langage de programmation ou langage source pour mesurer le taux de plagiat entre deux codes sources en effectuant une quantification du taux d'alignement entre les séquences structurelles respectives.
Comme on l'a déjà indiqué plus haut, il est possible d'effectuer une comparaison de séquence en se fondant sur la technique de matrice de points connue sous le nom de « Dotplot ».
La matrice de points permet une représentation visuelle de l'alignement entre deux Séquences Structurelles. Ces deux séquences sont placées le long des axes d'un graphique à deux dimensions, où chaque point OJ) traduit une similarité entre le Fme terme et le fme terme dans les deux séquences.
Ainsi une matrice de points permettant de mesurer le taux de similarité entre deux Séquences Structurelles A et B est définie par l'équation (3). Les séquences A et B sont respectivement définies par les équations (1) et (2) :
A =< β, ,a2 ,-,an > (1)
B =< A >-A > (2)
Si a, = bj (3)
Tel que dtJ -
- \ 0 Sinon
On définit deux métriques qui sont calculées à partir de la matrice de points, permettant de quantifier les zones de similarité et de pouvoir ainsi calculer le taux de plagiat entre deux codes. Ces deux métriques informent sur les longueurs de toutes les sous-séquences communes entre deux Séquences Structurelles, et informent en même temps sur les modifications effectuées sur la version originale du code. Par exemple une diagonale discontinue traduit une copie exacte avec des modifications, une copie redondante d'un segment de code se traduit par des diagonales en parallèles, etc.
Les deux métriques sont représentées par deux vecteurs d'estimations " VMH , VMV " qui sont calculés à partir des projections horizontale et verticale des éléments de la matrice Dn/m. Les deux vecteurs sont définis respectivement par les équations (4) et (5) :
VMH{n) - vm, m
Avec '. Vm1 = ∑dtJ (4)
VMV (m) = Vm1
Avec: vra, = ∑ dβ (5)
Les éléments successifs non nuls de chacun des deux vecteurs d'estimation représentent les sous-séquences qui sont en concordance entre les deux Séquences Structurelles A et B1 et appelées sous-séquences positives, notées Secf+, Secf+. Ces sous-séquences communes représentent des concepts structurels similaires au niveau des deux codes source caractérisés par les séquences A et B.
Ainsi la mesure de similarité entre les séquences A et B1 notée Sim(A,B) est définie par l'équation (6) :
Avec : Seqf+ est la fwe sous séquence positive extraite du vecteur VMH et Seqf+ est la fwe sous séquence positive extraite du vecteur VMv.
La Figure 2 résume la mesure de similarité entre les deux Séquences Structurelles A et B :
On présentera maintenant une analyse et une synthèse de l'approche de caractérisation selon l'invention en citant les avantages qu'elle apporte pour la problématique des plagiats du code source. Ensuite on évaluera la robustesse des Séquences Structurelles aux différentes techniques de transformations utilisées couramment lors des opérations de plagiats.
La translation d'un code source du langage d'origine vers un autre langage différent est aussi utilisée comme une technique de plagiat. Dans la majorité des cas, le langage de plagiat est du même type que le langage d'origine, par exemple un code écrit en Java peut être plagié par une translation vers un code écrit en C++, ou d'un code écrit en Pascal vers un autre code écrit en C. De ce fait il est important de caractériser d'une manière identique deux codes écrits dans deux langages différents afin de contrer les cas de plagiats utilisant la technique de translation.
L'architecture modulaire du système selon l'invention et en particulier celle du module de Grammaire à Actions offre la possibilité d'effectuer une caractérisation multilangage. En utilisant les grammaires correspondantes, deux codes similaires écrits en langages différents peuvent être représentés dans le même espace de séquence.
Soit deux langages de programmation Ll et L2 définis respectivement par les triplets {RLI, TL1IGDL1) et {RL2, TL2,GDL2). Deux modules de Grammaire à Actions associés à Ll et L2 produisent des Séquences Structurelles similaires pour deux codes Cu et &2 écrits en langage Ll et L2, si ces deux langages sont du même type, c'est-à-dire qu'il existe un sous ensemble de Termes Structurels en commun entre les deux langages (équation (7)).
GDL1 CΛ GDL2 ≠ {0} (7)
Une approche de caractérisation basée sur la grammaire du langage et indépendante de la représentation textuelle du code permet de renforcer la pertinence des Séquences Structurelles vis-à-vis de la structure du code et en particulier la syntaxe du langage. Afin de caractériser les structures de contrôle similaires de la même manière, chaque Terme Structurel doit être associé à l'ensemble des règles de grammaires qui reflètent le même concept. On peut citer par exemple les blocs itératifs de type "For", "While" et "Do" qui sont représentés par le même Terme Structurel. Le fait d'associer le même Terme Structurel aux opérations de contrôle du même type, permet plus de robustesse et de pertinence dans les Séquences Structurelles en particulier pour contrer les techniques de transformation qui consistent à remplacer des structures de contrôle par d'autres qui leur sont similaires. La construction du Dictionnaire de Grammaire est une étape importante dans la caractérisation structurelle, en particulier pour l'optimisation des coûts de calcul des Séquences Structurelles, du point de vue temps d'exécution et utilisation de la mémoire. Dans cette perspective, une étude sur les règles de grammaire du langage est nécessaire afin que le Dictionnaire de Grammaire associé à ce langage ne contienne que les règles qui contribuent le plus à la caractérisation du code, c'est-à-dire les règles les plus discriminantes. Ceci permet de réduire la taille du Dictionnaire de Grammaire, ainsi que la complexité des Séquences Structurelles.
A titre d'exemple, il a été effectué une caractérisation structurelle sur deux bases de codes Java. La première base représente la source de JDK 1.4.0, et la seconde base est constituée d'un ensemble de codes développés de façon spécifique. Les courbes de la Figure 3 représentent les fréquences d'apparition des Termes Structurels dans les séquences caractéristiques des deux bases. On constate que pour les deux bases, les termes les plus fréquents et plus redondants apparaissent dans les Séquences Structurelles de la majorité des codes appartenant aux deux bases et que les deux courbes représentent la même allure.
Les termes dont la fréquence est la plus élevée, correspondent aux règles de grammaire décrivant l'initialisation d'une variable, les blocs de gestion des exceptions "Try ... Catch", et les définitions de fonctions. De ce fait, il est avantageux de n'utiliser qu'un sous ensemble de Termes Structurels, qui ne contiendra aucun des termes fréquents (c'est-à-dire qui sont associés aux règles de grammaire les plus utilisées lors de l'analyse syntaxique), et par conséquent on peut optimiser les coûts des opérations d'alignement de séquences du fait qu'il y aura moins de redondance dans les Séquences Structurelles. On évaluera maintenant la robustesse des Séquences Structurelles vis-à-vis des différentes techniques de plagiats qui tentent de rendre le code illisible et de le différencier de l'original. Ces techniques ont été classées en six niveaux par Faidhi et Robinsons, comme l'illustre la Figure 3 : A titre d'exemple, un code java (un code de parcours d'un arbre binaire) a été modifié selon les six niveaux définis dans la figure 3. On a ensuite calculé le taux de plagiat entre les codes modifiés correspondant à chaque niveau et la version originale de ce code. Les modifications effectuées sur le code original sont comme suit :
- Niveau O : Aucune modification.
- Niveau 1 : Modification des commentaires, ajout de nouveaux commentaires, suppression de commentaires et modification des chaînes de caractères dans les messages de sortie. - Niveau 2 : Changements des noms de variables (9 variables) + les changements du niveau 1.
- Niveau 3 : Changements des déclarations et de leur position dans le code (remplacer deux constantes par deux nouvelles variables déclarées, changement des positions de déclaration entre trois variables) + les changements du niveau 2.
- Niveau 4 : Remplacer deux blocs itératifs "For" par deux blocs "While", et un bloc itératif "While" par un bloc "For" + les changements du niveau 3.
- Niveau 5 : Changement de la modularité (création de deux nouvelles fonctions, changement de position entre deux fonctions existantes) + les changements du niveau 4.
- Niveau 6 : Changements de deux expressions logiques et permutation entre le contenu du bloc "If et "Else" en modifiant l'expression d'évaluation du test "If + les changements du niveau 5.
On peut illustrer les résultats de calcul du taux de plagiat entre le code original et les versions modifiées. A chaque niveau de transformation un taux d'alignement dans les Séquences Structurelles est calculé reflétant ainsi le taux de plagiat entre les deux codes (l'original et le code transformé).
On constate que le taux de plagiat calculé à partir des Séquences Structurelles est de l'ordre de 100% pour les niveaux 0, 1 et 2 et reste important pour les niveaux supérieurs (de l'ordre de 70% pour le niveau 3 et de 60% pour le niveau 4). Le procédé de caractérisation des documents de type code source, qui est basé sur la notion de "Dictionnaire de Grammaire", permet de caractériser l'information lexicale et syntaxique d'un code source par des structures séquentielles. Ces structures conservent l'information structurelle véhiculée par le code même s'il a subi plusieurs niveaux de transformations. Une autre particularité du procédé réside dans le fait que l'on peut réaliser une caractérisation multilangages et que l'on peut ainsi détecter des codes plagiés et translatés dans d'autres langages. Les Séquences Structurelles sont assez robustes aux techniques de transformations qui sont couramment utilisées lors des opérations de plagiats.
L'approche de la matrice de points offre une robustesse dans la détection des plagiats.

Claims

REVENDICATIONS
1. Procédé de protection de documents numériques contre des utilisations non autorisées, caractérisé en ce que : - on identifie pour un document numérique à protéger constituant un code source un langage de programmation L défini par une grammaire GL ; - on associe audit langage de programmation L un module de grammaire à actions tel que : a) La grammaire GL est constituée d'un ensemble de règles noté
b) Le module de grammaire à actions est constitué d'un ensemble d'actions notéΛc={,sps-...-Λ,} tel que :
• S1 = {αcrion, ,αcfio«2 ,...}, v/ = ι,...,m est l'ensemble des actions associées à la règle/?.
• m ≤ n )
- on réalise une caractérisation structurelle du code en une seule passe d'analyse syntaxique à partir du module de grammaire à actions ; - pour ce faire, on construit un dictionnaire de grammaire GDL associé au langage de programmation et comprenant un ensemble de termes structurels tels que chacun de ces termes est associé à une règle ou un ensemble de règles qui appartiennent à ladite grammaire (GL) et on transforme le code source en une séquence structurelle (RL, TL, GDL) comprenant l'ensemble des termes structurels et le dictionnaire GDL de grammaire du langage L ;
- on procède de la même manière à la transformation d'un document numérique à analyser en une séquence structurelle (RL, TL, GDL) ; et
- on mesure le taux de plagiat entre le code source du document numérique à protéger et le code source du document numérique à analyser à l'aide d'une quantification du taux d'alignement entre les séquences structurelles respectives des codes sources du document numérique à protéger et du document numérique à analyser.
EP08775741A 2007-03-23 2008-03-21 Procede de protection de documents numeriques contre des utilisations non autorisees Withdrawn EP2137663A1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0702152A FR2914081A1 (fr) 2007-03-23 2007-03-23 Procede de protection de documents numeriques contre des utilisations non autorisees.
PCT/FR2008/050503 WO2008132395A1 (fr) 2007-03-23 2008-03-21 Procede de protection de documents numeriques contre des utilisations non autorisees

Publications (1)

Publication Number Publication Date
EP2137663A1 true EP2137663A1 (fr) 2009-12-30

Family

ID=38691809

Family Applications (1)

Application Number Title Priority Date Filing Date
EP08775741A Withdrawn EP2137663A1 (fr) 2007-03-23 2008-03-21 Procede de protection de documents numeriques contre des utilisations non autorisees

Country Status (4)

Country Link
US (1) US20100199355A1 (fr)
EP (1) EP2137663A1 (fr)
FR (1) FR2914081A1 (fr)
WO (1) WO2008132395A1 (fr)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9858051B2 (en) * 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
US9596222B2 (en) 2011-08-02 2017-03-14 Cavium, Inc. Method and apparatus encoding a rule for a lookup request in a processor
US20130332903A1 (en) * 2012-06-08 2013-12-12 Massively Parallel Technologies, Inc. System and methods for determining decomposition graph complexity
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
CN112394973B (zh) * 2020-11-23 2024-03-12 山东理工大学 一种基于伪孪生网络的多语言代码剽窃检测方法
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225371B2 (en) * 2002-09-18 2012-07-17 Symantec Corporation Method and apparatus for creating an information security policy based on a pre-configured template
US7503035B2 (en) * 2003-11-25 2009-03-10 Software Analysis And Forensic Engineering Corp. Software tool for detecting plagiarism in computer source code
US7779396B2 (en) * 2005-08-10 2010-08-17 Microsoft Corporation Syntactic program language translation
US8170868B2 (en) * 2006-03-14 2012-05-01 Microsoft Corporation Extracting lexical features for classifying native and non-native language usage style

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See references of WO2008132395A1 *

Also Published As

Publication number Publication date
FR2914081A1 (fr) 2008-09-26
WO2008132395A1 (fr) 2008-11-06
US20100199355A1 (en) 2010-08-05

Similar Documents

Publication Publication Date Title
WO2008132395A1 (fr) Procede de protection de documents numeriques contre des utilisations non autorisees
CN110737899B (zh) 一种基于机器学习的智能合约安全漏洞检测方法
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
US7797245B2 (en) Methods and systems for identifying an area of interest in protectable content
CN113360915A (zh) 基于源代码图表示学习的智能合约多漏洞检测方法及系统
Ullah et al. IoT-based green city architecture using secured and sustainable android services
Zhang et al. BDA: practical dependence analysis for binary executables by unbiased whole-program path sampling and per-path abstract interpretation
FR2934388A1 (fr) Procede de creation de programme informatique
Song et al. Computation of program source code similarity by composition of parse tree and call graph
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统
Martínez et al. Efficient model similarity estimation with robust hashing
Mokhov Intensional cyberforensics
Okonta et al. Deploying Java Platform to Design a Framework of Protective Shield for Anti–Reversing Engineering
D'Antoni et al. Fast: A transducer-based language for tree manipulation
Bechhofer et al. Parsing owl dl: trees or triples?
Kuang et al. Automated data-processing function identification using deep neural network
Wang et al. Large language model supply chain: A research agenda
Al-Obeidallah et al. A structural rule-based approach for design patterns recovery
EP3195113B1 (fr) Procédé de vérification de traçabilité de premières instructions en un langage de programmation procédurale générées à partir de secondes instructions en un langage de modélisation
Hostettler High-level Petri net model checking: the symbolic way
Guan et al. A framework for security driven software evolution
Fan et al. Automatic Generation of Smart Contracts from Real-World Contracts in Natural Language
Ferreira Vulnerabilities Fast Scan: Tackling Sast Performance Issues with Machine Learning
Al-Azzoni et al. On persisting EMF data using blockchains
WO2024209100A1 (fr) Procédé de génération d&#39;un code informatique résistant aux attaques par injection sql

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20091013

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MT NL NO PL PT RO SE SI SK TR

DAX Request for extension of the european patent (deleted)
RAP1 Party data changed (applicant data changed or rights of an application transferred)

Owner name: HOLOGRAM INDUSTRIES

17Q First examination report despatched

Effective date: 20130813

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20131224