You are on page 1of 10

http://translate.google.fr/translate_n?hl=fr&langpair=en%7Cfr&u=http:...

Aide

Langue source : Langue cible :

Afficher : Traduction Original

1 sur 1 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

RECHERCHE:

Lancer la Recherche Avancée


LOGIN:

Login
Créer un compte gratuit

ACCUEIL
Recherche de brevets
CHIMIQUES DE RECHERCHE
DATA SERVICES
HELP

génération et la méthode de code du système à cet effet polymorphe


United States Patent 6591415
Ads by Google
Do you speak English ?
Prenez des cours d'Anglais en ligne Recevez 1 cour Personnalisé / jour
www.Gymglish.fr/Cours-Anglais
Une méthode et un système pour produire de multiples copies d'un objet logiciel exécutable, dont une copie est fonctionnellement identique à toutes
les autres copies, tout en étant structurellement unique, modifier le code source en fonction de paramètres spécifiés par une graine et un ensemble de
préférences. code source de haut niveau est traduit en code assembleur. choix des procédures du code de l'Assemblée sont mélangés pour former de
plus grandes procédures fonctionnellement équivalente à la procédure initiale. Instructions au sein de procédures sont rebattues, alors que le flux
d'exécution d'origine est conservée. Dummy opcodes sont entrecoupées des instructions exécutables. Le code résultant modification est traduit en
code objet et un objet exécutable est construit. L'invention est également inscrit en tant que produit un programme d'ordinateur lisible sur un support
lisible par ordinateur. Chaque exemplaire porte une empreinte unique qui permet au producteur du produit à exercer un contrôle sur l'utilisation du
logiciel et de prévenir toute utilisation non autorisée et la copie.
Ads by Google
French Course In France
Learn French Language Fast in the City Of Montpellier, Book Now!
Ila-France.com/French_Courses
Study Spanish Abroad
The Spanish School in Guadalajara University of Guadalajara, CEPE
www.Spanish-spanish.info
Study Chinese Abroad
Language School in China Accommodations also available
www.sprachcaffe.com
Be Fluent in French
Download a Free ebook and discover the 8 steps to THINKING in French.
www.formez-vous.com/en
Références en matière de brevets des
États-Unis:
Méthode pour l'intégration des tests logiciels
automatisés avec le développement de logiciels
Rodrigues et al. - 6067639

Logiciels d'authentification, de protection et


système de sécurité
Drake - 6006328

Méthode et système pour générer et vérifier


une signature pour un programme d'ordinateur
Davidson et al. - 5559884

Image représentant:

1 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

Inventeurs:
Torrubia-Saez, Andres (Alicante, ES)
Numéro de la demande:
09/558096
Date de parution:
08/07/2003
Date de dépôt:
25/04/2000
Citation à l'exportation:
Cliquez pour la génération automatique de bibliographie
Cessionnaire:
Systems Trymedia (San Francisco, CA)
Des classes au primaire:
717/159
Autres catégories:
717/172, 717/168, 717/158
Cours international:
G06F1/00; G06F21/00; G06F9/45
Domaine de recherche:
713/200, 717/159, 713/176
Images des brevets Voir:
Télécharger le PDF 6591415 Aide PDF
Ads by Google
CAD drawing translation Translate For Free German English Translator
Professional translation of CAD and Try This Ultimate Translation Tool. Fast and accurate translations by
MicroStation drawings 100% Free. DipTrans qualified translator
www.translateplus.com translatorbar.com www.german-english-translator.co.uk

Premier examinateur:
Morse, Gregory
Examinateur adjoint:
Gross, Kenneth A.
Avocat, agent ou Société:
Groupe des brevets Glenn
Glenn, Michael A.
Wong, Kirk D.
Données sur les cas des parents:

RENVOI DES APPLICATIONS ASSOCIEES


Cette application est une continuation-in-part "d'une demande en instance des États-Unis Ser. N ° 09/328, 737 déposée le 9 juin 1999, qui prétend
bénéficier de US provisoire Requête n ° 60/131, 769, déposée le 30 avril 1999.

Revendications:
Ce qui est revendiqué est la suivante:

1. Une méthode pour générer plusieurs copies d'un logiciel exécutable objet chacune desdites copies est fonctionnellement identique au reste des
copies, tout en étant structurellement unique, comprenant les étapes consistant à: fournir le code source pour cet objet exécutable, ledit code est tout
de haut niveau et le code de l'Assemblée; éventuellement, la traduction du code de haut niveau pour le code d'assemblage, de fournir une graine et un
ensemble de préférences, a déclaré semences et les préférences en spécifiant les paramètres pour modifier le code source a déclaré, dans lequel un
ensemble distinct de préférences est fourni pour chaque version de ladite objet; modifier ce code source selon ledit semences et les préférences;
traduction dudit code source modifié en code objet, et la construction de cet objet logiciel exécutable à partir dudit code objet.

2. La méthode de la revendication 1, dans lequel une graine distincte est produite pour chaque version dudit objet.

3. La méthode de la revendication 2, au moins un ensemble de préférences par défaut est fournie.

4. La méthode de la revendication 2 caractérisé en ce que la modification étape comprend les étapes suivantes: choisir au moins deux procédures de
ladite code assembleur; mélanger lesdites procédures, dans lequel une procédure unique, mélange est formé à partir de ladite choix des procédures,
des instructions traînant dans une ou plusieurs procédures, afin que ces instructions sont réorganisés, tandis que l'ordre d'exécution est conservée, et

2 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

l'insertion opcodes mannequin dans une ou plusieurs procédures.

5. La méthode de la revendication 4, caractérisé en ce brassage étape comprend les étapes suivantes: modifier l'ordre des instructions dans une
procédure, dans laquelle la procédure à être mélangées est spécifiée par ces préférences et un critère de trouble est donnée par ledit semences, et
l'ajout de branchement des instructions afin que l'ordre d'exécution est conservée.

6. La méthode de la revendication 5, dans lequel une ou plusieurs procédures mélangés sont sélectionnés pour être mélangées.

7. La méthode de la revendication 4, caractérisé en ce que l'insertion étape comprend les étapes suivantes: après chaque instruction dans une
procédure, l'insertion d'une branche d'une instruction ultérieure, et l'insertion de données fictives entre la branche et de l'instruction subséquente, de
sorte que le déroulement du programme saute sur ladite mannequin données.

8. La méthode de la revendication 7, dans lequel une ou plusieurs procédures mélangées sont sélectionnés pour l'insertion des opcodes mannequin.

9. La méthode de la revendication 4, dans lequel la production de ces opcodes mannequin est entraînée par un générateur de nombres aléatoires
initialisé par ledit semences.

10. La méthode de la revendication 4, caractérisé en ce que mannequin opcodes sont sélectionnés parmi une pluralité de prédéfinis opcodes
mannequin stockées dans une table de consultation.

11. Une méthode de modifier le code source pour un objet logiciel, dans lequel chaque exemplaire d'un objet résultant exécutable est structurellement
unique tout en étant fonctionnellement identique à toutes les autres copies, et ledit code source est tout de code de haut niveau et le code de
l'Assemblée, comprenant les étapes suivantes: éventuellement, la traduction dudit code de haut niveau pour le code d'assemblage, de fournir une
graine et un ensemble de préférences, dans lequel un ensemble distinct de préférences est fourni pour chaque version de cet objet, a déclaré semences
et les préférences en spécifiant les paramètres pour modifier le code source a déclaré ; mélanger au moins deux procédures de ladite code source, de
sorte qu'une procédure unique est formé à partir dudit au moins deux procédures brassage instructions dans une ou plusieurs procédures de façon à ce
que ces instructions sont réorganisés, tandis que l'ordre d'exécution est conservée, et l'insertion opcodes fictif dans un ou plusieurs pyrocedures.

12. La méthode de la revendication 11, dans lequel une graine distincte est produite pour chaque version dudit objet.

13. La méthode de la revendication 11, dans lequel au moins un ensemble de préférences par défaut est fournie.

14. La méthode de la revendication 11, caractérisé en ce brassage étape comprend les étapes suivantes: modifier l'ordre des instructions dans une
procédure, dans laquelle la procédure à être mélangées est spécifiée par ces préférences et un critère de trouble est donnée par ledit semences, et
l'ajout de branchement des instructions afin que l'ordre d'exécution est conservée.

15. La méthode de la revendication 11, dans lequel une ou plusieurs procédures mélangés sont sélectionnés pour être mélangées.

16. La méthode de la revendication 11, caractérisé en ce que l'insertion étape comprend les étapes suivantes: après chaque instruction dans une
procédure, l'insertion d'une branche à l'instruction suivante, et l'insertion de données fictives entre la branche et la prochaine instruction, afin que
saute le déroulement du programme portant sur ce mannequin données.

17. La méthode de la revendication 11, dans lequel une ou plusieurs procédures mélangées sont sélectionnés pour l'insertion des opcodes mannequin.

18. La méthode de la revendication 11, dans lequel la production de ces opcodes mannequin est entraînée par un générateur de nombres aléatoires
initialisé par ledit semences.

19. La méthode de la revendication 11, caractérisé en ce que mannequin opcodes sont sélectionnés parmi une pluralité de prédéfinis opcodes
mannequin stockées dans une table de consultation.

20. Un générateur de code polymorphe pour modifier le code source pour un objet exécutable, dans lequel chaque version dudit objet exécutable est
structurellement unique tout en étant fonctionnellement identique à toutes les autres copies, et ledit code source est tout de code de haut niveau et le
code de l'Assemblée, comprenant : éventuellement, des moyens de traduire ledit code de haut niveau pour le code d'assemblage, des moyens de
fournir une graine et un ensemble de préférences, dans lequel un ensemble distinct de préférences est fourni pour chaque version de cet objet, a
déclaré semences et les préférences en spécifiant les paramètres pour modifier cette code source, un mélangeur procédure, dans lequel au moins deux
procédures de ladite code source sont mélangés, de sorte qu'une procédure unique est formé à partir dudit au moins deux procédures, un mélangeur
de cartes, dans lequel les instructions dans une ou plusieurs procédures sont battues pour que ces instructions sont réorganisés, tandis que l'ordre
d'exécution est conservée, et une insertion opcode mannequin, mannequin opcodes lequel sont insérés dans une ou plusieurs procédures.

21. Le générateur de code polymorphe de la revendication 20, caractérisé en ce que le mélangeur procédure, a déclaré Batteur, et dit insertion opcode
mannequin comportent chacun une procédure au sein d'un objet logiciel exécutable.

22. Le générateur de code polymorphe de la revendication 20, caractérisé en ce que le mélangeur procédure, a déclaré Batteur, et dit insertion opcode
mannequin comportent chacun un objet logiciel exécutable.

23. Le générateur de code polymorphe de la revendication 20, dans lequel une graine distincte est produite pour chaque version dudit objet.

24. Le générateur de code polymorphe de la revendication 20, dans lequel au moins un ensemble de préférences par défaut est fournie.

25. Le générateur de code polymorphe de la revendication 20, caractérisé en ce que shuffler comprend: des moyens pour modifier l'ordre des
instructions dans une procédure, dans laquelle la procédure à être mélangées est spécifiée par ces préférences et un critère de trouble est donnée par
ledit semences, et des moyens pour l'ajout de branchement des instructions afin que l'ordre d'exécution est conservée.

26. Le générateur de code polymorphe de la revendication 20, dans lequel une ou plusieurs procédures mélangés sont sélectionnés pour être
mélangées.

3 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

27. Le générateur de code polymorphe de la revendication 20, caractérisé en ce qu'il insertion opcode mannequin comporte: des moyens pour
l'insertion d'une branche à une instruction après chaque instruction dans une procédure et des moyens pour insérer des données fictives entre la
branche et la prochaine instruction, de sorte que le déroulement du programme saute sur ces données factices.

28. Le générateur de code polymorphe de la revendication 20, dans lequel une ou plusieurs procédures mélangées sont sélectionnés pour l'insertion
des opcodes mannequin.

29. Le générateur de code polymorphe de la revendication 20, dans lequel la production de ces opcodes mannequin est entraînée par un générateur de
nombres aléatoires initialisé par ledit semences.

30. Le générateur de code polymorphe de la revendication 20, caractérisé en ce que mannequin opcodes sont sélectionnés parmi une pluralité de
prédéfinis opcodes mannequin stockées dans une table de consultation.

31. Un programme informatique permettant de générer plusieurs copies d'un logiciel exécutable objet chacune desdites copies est fonctionnellement
identique au reste des copies, tout en étant structurellement unique, ledit produit programme d'ordinateur comprenant un support de stockage
informatique utilisable avoir un code de programme informatique lisible par des moyens consacrés dans le milieu , le code informatique comprenant
des moyens: le code du programme informatique lisible par des moyens de: fournir le code source pour cet objet exécutable, ledit code est tout de
code de haut niveau et le code de l'Assemblée; traduction du code de haut niveau pour le code d'assemblage, de fournir une graine et un ensemble de
préférences, dans lequel un ensemble distinct de préférences est fourni pour chaque version de cet objet, a déclaré semences et les préférences en
spécifiant les paramètres pour modifier le code source a déclaré, modifier ce code source selon ledit semences et les préférences; traduction dudit
code source modifié en code objet et la construction de cet objet logiciel exécutable à partir dudit code objet.

32. Le produit programme d'ordinateur selon la revendication 31, comprenant en outre un code de programme informatique lisible par des moyens
pour générer une graine séparé pour chaque version dudit objet.

33. Le produit programme d'ordinateur selon la revendication 31, comprenant en outre un code de programme informatique lisible par des moyens
pour fournir au moins un par défaut des préférences.

34. Le produit programme d'ordinateur selon la revendication 31, caractérisé en ce que le code du programme informatique lisible par des moyens
pour modifier le code source a déclaré comprend en outre un code de programme informatique lisible par des moyens pour: sélectionner au moins
deux procédures de ladite code assembleur; mélanger lesdites procédures, dans lequel une procédure unique et mixte est formés à partir dudit choix
des procédures, des instructions traînant dans une ou plusieurs procédures de façon à ce que ces instructions sont réorganisés, tandis que l'ordre
d'exécution est conservée d', et l'insertion opcodes mannequin dans une ou plusieurs procédures.

35. Le produit programme d'ordinateur selon la revendication 34, caractérisé en ce que le code du programme informatique lisible par des moyens de
brassage des instructions dans une ou plusieurs procédures comprend en outre le code lisible par ordinateur des moyens pour: modifier l'ordre des
instructions dans une procédure, dans laquelle la procédure à être mélangées est spécifiée par ledit les préférences et un critère de trouble est donnée
par ledit semences, et l'ajout de branchement des instructions afin que l'ordre d'exécution est conservée.

36. Le produit programme d'ordinateur selon la revendication 35, dans lequel une ou plusieurs procédures mélangés sont sélectionnés pour être
mélangées.

37. Le produit programme d'ordinateur selon la revendication 34, caractérisé en ce que le code du programme informatique lisible par des moyens de
brassage des instructions dans une ou plusieurs procédures comprend en outre le code lisible par ordinateur des moyens pour l'insertion opcodes
mannequin dans une ou plusieurs procédures comprend en outre un code de programme informatique lisible par des moyens pour: après chaque
instruction dans une procédure, l'insertion d'une branche à l'instruction suivante, et l'insertion de données fictives entre la branche et la prochaine
instruction, de sorte que le déroulement du programme saute sur ces données factices.

38. Le produit programme d'ordinateur selon la revendication 34, dans lequel une ou plusieurs procédures mélangées sont sélectionnés pour l'insertion
des opcodes mannequin.

39. Le produit programme d'ordinateur selon la revendication 34, dans lequel la production de ces opcodes mannequin est entraînée par un générateur
de nombres aléatoires initialisé par ledit semences.

40. Le produit programme d'ordinateur selon la revendication 34, caractérisé en ce que mannequin opcodes sont sélectionnés parmi une pluralité de
prédéfinis opcodes mannequin stockées dans une table de consultation.

41. Un logiciel comprenant: un ou plusieurs objets logiciels exécutable comprenant code lisible par ordinateur incorporé sur un support tangible, dans
laquelle une copie d'au moins un de ces objets logiciels exécutables est fonctionnellement identique à toutes les autres copies de ladite au moins un
objet logiciel exécutable et structurellement code unique pour chaque version de ladite au moins un logiciel exécutable objet en cours de modification
en fonction de paramètres spécifiés par une graine et un ensemble distinct de préférences.

42. Un logiciel exécutable objet comprenant code lisible par ordinateur incorporé sur un support tangible dans laquelle une copie de ces objets
logiciels exécutables est fonctionnellement identique à toutes les autres copies dudit code objet exécutable du logiciel et structurellement unique, pour
chaque version de ces logiciels exécutables objet en cours de modification en fonction de paramètres spécifiés par une graine et un ensemble distinct
de préférences.

Description:

CONTEXTE DE L'INVENTION
1. Domaine de l'invention

La présente invention concerne la conception de logiciels et de la production de copies pour la distribution commerciale. Plus particulièrement,
l'invention concerne des méthodes et systèmes pour produire de multiples copies d'un logiciel dans lequel une copie du logiciel est fonctionnellement

4 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

identique à toutes les autres copies, tout en étant structurellement unique.

2. Description de la technique

Le co-instance des États-Unis demande de brevet Ser. N ° 09/328, 737, "procédés et appareils pour la distribution sécurisée de logiciels», A.
Torrubia-Saez, le 9 juin 1999 révèle les différentes méthodes de production et de distribution dans le commerce des logiciels à accès contrôlé au
moyen de transmission de données. Ces forfaits à accès contrôlé empêcher un utilisateur de tirer pleinement parti d'un logiciel téléchargé jusqu'à ce
qu'une transaction d'achat a été complété. Elle concerne en outre des procédés de watermarking objets exécutables et des objets de données afin
d'empêcher toute utilisation non autorisée ou la copie. Cependant, les méthodes et les systèmes de production différents exemplaires d'un logiciel dans
lequel chaque exemplaire est fonctionnellement identique et ayant une structure unique ne sont pas décrites.

La figure. 1 fournit un organigramme d'un procédé classique pour la conception et la fabrication de produits logiciels. Au cours de la phase de
conception, des programmeurs ou des ingénieurs en logiciels généralement écrire le logiciel dans un langage de programmation tels que C ou C + + de
haut niveau. A ce stade de la production, la demande est généralement constitué de plusieurs modules, chacun écrit dans le langage de programmation
de choix. Un compilateur 10 traduit ensuite le code de haut niveau pour le code assembleur. Par la suite, un assembleur 11 traduit le code assembleur
pour objet de code, le code lisible par machine entièrement composé d'instructions binaires. Un éditeur de liens 12 prend les modules distincts de code
objet et les combine avec des routines nécessaires à partir des bibliothèques externes pour produire un programme exécutable 13 . Plusieurs copies
identiques 14 sont faites de ce fichier exécutable et distribué. En règle générale, lorsqu'un utilisateur installe l'application sur leur ordinateur, ils
doivent fournir un numéro de série ou un code d'autorisation pour que le programme d'installation pour terminer l'installation.

R. Davidson et Myhrvold N., «Méthode et système pour générer et la vérification d'une signature pour un programme d'ordinateur," US. N °
5.559.884, le 24 septembre 1996, constituent un moyen unique d'identifier une version autorisée d'un module exécutable. Davison, et al. enseigner la
sélection de plusieurs portions de code exécutable, et la réorganisation et la modification des portions de code exécutable dans une manière qui
préserve le flux d'origine de l'exécution. L'ordonnance de placement de nouvelles des sections de code les formulaires de signature pour la version qui
est difficile à détecter ou à supprimer. Moskowitz S. et M. Cooperman, "Méthode pour la protection Stega-Cipher de code informatique," US. N °
5745569 (28 avr. 1998) fournissent une méthode pour protéger les droits d'auteur du code informatique en codant un filigrane numérique en portions
essentiel des ressources de code. Encodage des portions de code en une ressource de données cache encore le filigrane. Le filigrane peut être enlevé
sans détruire la fonctionnalité de l'application logicielle.

Dans l'une des méthodes divulguées état de la technique, l'utilisateur final typique serait en effet avoir de la difficulté de détecter et de supprimer les
mécanismes de sécurité sans endommager le code exécutable. Toutefois, les modifications apportées au code exécutable sont suffisamment simples
pour qu'un pirate qualifiés ou pirate pourrait détecter et d'éliminer au moins une partie de la signature ou un filigrane sans perturber le flux normal de
l'exécution par le démontage ou d'inverser la compilation du code exécutable et en examinant la source résultant code. Plusieurs personnes, ayant
chacun une version du programme et des copies de comparer, pourrait accomplir la tâche encore plus facilement. En outre, parce que chaque version
du logiciel est identique, la méthode de l'Moskowitz, et al. enseignements est vulnérable à un contournement par rapiéçage. Si un programme est
logique de sécurité intégré à empêcher la copie ou utilisation non autorisée, un pirate peut enlever la sécurité d'une copie par la création d'un
programme correctif de petites taches endroits octets à supprimer les contrôles de sécurité. Par exemple, si un programme a pour code:

0 X 123001 checksecurity appel:

0 X 123008 : Hache d'essai, la hache

0 X 123009 : JE PersonneMalveillante

Un pirate aurait simplement pour patcher 0 X 123009 avec deux opérandes NOP pour passer outre la protection de la sécurité. Comme tous les
exemplaires du programme sont au même endroit, le rapiéçage 0 X 123009 serait de désactiver la sécurité dans toutes les copies du programme.

Ainsi, comme un moyen unique d'identifier et de contrôler toutes les copies d'un programme informatique, il serait souhaitable de prévoir un moyen
de produire des copies du programme dans lequel une copie est fonctionnellement identique à toutes les autres copies et structurellement unique, de
sorte que chaque copie constitue en réalité une version distincte du programme. Il serait souhaitable de produire ces copies structurellement unique en
sélectionnant des parties du code source de l'application au hasard et la fusion des procédures individuelles en de vastes procédures. Il serait
souhaitable de continuer à modifier le code source par des instructions réorganisation d'une manière qui préserve le flux normal d'exécution. Il serait
souhaitable d'apporter les modifications de code extrêmement difficile à détecter et à rendre le programme invulnérable à l'ingénierie inverse en
modifiant le code source encore plus avec l'insertion d'choisis au hasard opcodes fictives entre les instructions, de sorte que le code exécutable ne
peut pas être inversée-compilés ou démontée.

RESUME DE L'INVENTION
La présente invention concerne un procédé et un système de production de différentes versions d'un logiciel dans lequel chaque version est
fonctionnellement identique à toutes les autres versions et structurellement unique. L'utilitaire destiné à l'invention est une mesure de sécurité dans un
système de distribution sécurisée de logiciels afin de fournir une empreinte digitale unique pour chaque copie d'un logiciel distribué en réponse à une
demande d'achat. L'invention a en outre l'utilité de prévenir toute utilisation non autorisée et la copie. L'invention comprend également des mesures
pour isoler le logiciel contre le reverse-engineering.

L'invention, incarnée ici comme un système et une méthode, fonctionne sur le code assembleur à une application logicielle. La méthode de l'invention
est une procédure pseudo-aléatoire conduit par une graine et un ensemble de préférences. Diverses modifications sont apportées à des séquences
d'instructions sélectionné dans le code assembleur, la sélection de l'instruction séquences étant pseudo-aléatoire. Dans une première étape, les
procédures multiples au sein d'une séquence d'instructions sont confondus, ou ont fusionné, de sorte que d'un seul, plus la procédure est formé qui est
fonctionnellement équivalent à la procédure initiale. Dans une deuxième étape, les instructions contenues dans une séquence d'instructions sont
mélangées, ou réorganisés, d'une manière qui préserve l'ordre original de l'exécution. Dans une troisième étape, opcodes factices sont insérées entre
les instructions dans une séquence d'instructions, précédée d'une instruction de branchement d'une instruction à la suivante il suit dans la séquence.
Les étapes de la méthode inventée peuvent être exécutées dans n'importe quel ordre, ou ils peuvent être réalisés simultanément. Il n'est pas nécessaire
que toutes les étapes de la méthode inventée être appliquée à toutes les séquences d'instructions sélectionné. L'insertion de suffisamment grand
opcodes vide fournit une mesure de protection contre la rétro-ingénierie car ils confondent un programme de démontage et le fait de démonter le code
exécutable de manière incorrecte.

5 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

BRÈVE DESCRIPTION DES DESSINS


La figure. 1 fournit un organigramme d'une méthode conventionnelle de concevoir et de distribuer des applications logicielles.

La figure. 2 fournit un organigramme d'un procédé de production de logiciels dans lequel une version du logiciel est fonctionnellement identique à
toutes les autres copies, tout en étant structurellement unique, selon l'invention;

La figure. 3 montre un schéma synoptique d'un générateur de code polymorphe, selon l'invention;

La figure. 4 fournit un schéma d'une séquence d'instructions avant et après elle est traitée par la procédure de mélangeur La figure. 3 , Selon
l'invention;

La figure. 5 fournit un schéma de la séquence d'instructions de mélange La figure. 4 avant et après elle est traitée par le système de brassage de La
figure. 3 , Selon l'invention, et

La figure. 6 montre un schéma de la séquence d'instructions mélangées de La figure. 5 avant et après elle est traitée par l'insertion de la figure opcode
mannequin. 3 .

DESCRIPTION DETAILLEE
Aux fins de la description actuelle, le terme «code source» ou «source» peut se référer soit à haut niveau du code ou le code assembleur. "Les fichiers
source» font référence à des fichiers comportant soit le code de haut niveau ou le code assembleur. L'invention est particulièrement bien adapté pour
l'application de la sécurité des méthodes de distribution de logiciels et d'objets de données décrites dans le co-instance Ser demande de brevet US. N °
09/328, 737, "procédés et appareils pour la distribution sécurisée de logiciels», A. Torrubia-Saez, le 9 juin 1999.

Se référant maintenant à La figure. 2 , an overview of a process for producing copies of an executable software product is shown, in which a copy of
the software product is functionally identical to all other copies while being structurally unique. A request 21 is directed to a polymorphic generator
23 . The request may originate from a purchaser or a prospective purchaser of the software product, or it may also originate with an operator involved
in the design and commercial production of the software product. Source files 22 are supplied to the polymorphic generator. In the case of high-level
source files, an external translator translates them to assembly code (not shown). Along with the source files, a seed 24 and a set of preferences 25 are
supplied to the polymorphic generator 23 . The seed 24 initializes a multi-step procedure, described further below, in which the polymorphic
generator modifies the source code 22 according to parameters specified by the seed 24 and the preferences 25 , such that the normal execution flow
of the program is conserved. The resulting modified code is translated and packaged and an executable software object 26 is produced. It is to be
understood that the seed is unique and therefore the particular executable 26 produced incorporates code modifications that render it structurally
unique while being functionally identical to any other copy of the same software product, so that each copy constitutes a separate version of the
software product. Methods of generating unique seeds to initialize random processes are commonly known to those skilled in the art of computer
programming. In certain embodiments of the invention, a default set of preferences is provided. In other embodiments of the invention, a unique set
of preferences is generated for each version of the software product produced.

The polymorphic generator 23 may be a computer programmed to carry out the process of La figure. 1 or it may be a software module that is
operative to carry out the process of FIG. 1 . In the case of a software module, the polymorphic generator may comprise a standalone executable
program or it may be a functional unit, such as a procedure or function within an executable program. Other embodiments consistent with the scope
of the invention will be apparent to those skilled in the art of computer programming.

As described above, the request 21 may originate from a purchaser or prospective purchaser. The parent application to the current application, Ser.
No. 09/328,737, supra, describes various methods of distributing software packages commercially in the online environment. Thus the request may be
directed to the polymorphic code generator 23 via a data connection to an online service, for example; or it may be delivered over a network, the
Internet, for example. The executable software object 26 may also be distributed on various forms of computer readable media, diskettes or compact
discs, for example.

Turning now to La figure. 3 , a detailed block diagram of the polymorphic code generator is shown. The modifications performed by the polymorphic
code generator are to assembly code; therefore assembly source 31 est spécifié dans la figure. Toutefois, dans le cas du code de haut niveau, un
traducteur externe traduit le code de haut niveau pour le code assembleur (non représenté). Le générateur de code polymorphe comprend trois
composants uniques: un mélangeur procédure 32 , Un mélangeur de cartes 36 , Et une insertion opcode mannequin 37 . Chacun des composants du
générateur polymorphe peut être réalisée que le matériel programmé pour exécuter la fonction spécifiée ou modules logiciels dispositif pour remplir la
fonction spécifiée. Paramètres pour des opérations effectuées par le mélangeur procédure, le système de brassage, et l'insertion opcode factices, sont
précisées en fonction de la graine 24 , Et les préférences 25 , Indiqué par des flèches 33 , 34 , Et 35 . Le mélangeur procédure, conformément aux
instructions fournies par les semences et les préférences, choisit les procédures dans le code assembleur, et les mélanges, ou fusionne, le choix des
procédures en une seule procédure qui est fonctionnellement équivalent à l'origine des procédures choisies. La fonction du mélangeur procédure sera
décrite plus en détail ci-dessous. Le système de brassage 36 identifie une ou plusieurs procédures dans le code assembleur et réordonne, ou mélange,
les instructions contenues dans la procédure, de sorte que l'ordre d'exécution est conservée. La fonction du mélangeur de cartes est décrite en détail
ci-dessous. L'insertion opcode mannequin 37 Encarts une succursale d'une première instruction d'une prochaine instruction, puis des données factices
entre la branche et la prochaine instruction. La fonction de l'insertion opcode mannequin est décrit plus en détail ci-dessous.

Les trois composantes décrites précédemment peuvent également être incorporées comme des étapes d'une méthode. Bien que l'invention a été
décrite dans un ordre particulier, en réalité, l'ordre des éléments est sans importance. Ainsi, le code peut d'abord être mélangées, ou des données
factices inséré avant toute autre opération. Après le code source est modifié comme décrit précédemment, le code modifié est traduit en code objet
par l'assembleur 11 et un exécutable est construit par l'éditeur de liens 12 partir du code objet.

Se référant maintenant à La figure. 4 , Le fonctionnement du mélangeur procédure est illustrée plus en détail. La figure. 4 montre une séquence
d'instructions avant et après qu'il a été modifié par le mélangeur procédure. La séquence d'instructions originale contient les procédures FUNC 1 ( 41
), FUNC 2 ( 42 ), Et FUNC 3 ( 43 ). Dans la séquence d'instructions modification, FUNC 1 et FUNC 2 ont été combinées en une seule procédure,
mélangés ( 44 ), Identiques en fonction des deux procédures initiales. FUNC 3 a été laissée inchangée. Le choix des procédures à être mélangé est
entraînée par les semences et les préférences.

La figure. 5 montre le fonctionnement du mélangeur de cartes 36 dans le détail. La séquence d'instructions de départ contient la procédure mixte ( 44

6 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

), Tel que décrit ci-dessus et FUNC 3 ( 43 ). La séquence d'instructions modification montre mélangé avec les instructions réorganisés 51 . Le
mélangeur de réordonne les instructions selon un critère de trouble spécifié par la semence. La procédure ou les procédures à être mélangées sont
spécifiées par les préférences. En plus de réorganiser les instructions, les inserts Batteur de branches dans le code de sorte que l'ordonnance initiale
d'exécution est conservée. Ainsi, en mélange, l'ordre de FUNC 1 et FUNC 2 est inversé et les instructions sont réorganisés, mais les instructions sont
toujours exécutées dans le bon ordre, en dépit de la réorganiser, à cause des instructions de branchement qui redirigent le flux d'exécution à ce qui
était à l'origine de la prochaine instruction. FUNC 3 a été laissée inchangée. Dans l'exemple, la procédure de mélange 63 qui a été initialement formé à
partir des procédures FUNC 1 ( 41 ) Et FUNC 2 ( 42 ) A été battu. L'invention ne nécessite pas une procédure d'abord être mélangés avant d'être
battu. Les mesures peuvent être appliquées dans le fichier de code source dans n'importe quel ordre, à l'ordre particulier est spécifié par les semences
et les préférences.

L'insertion des opcodes mannequin en outre modifie le code source d'une manière qui permet l'écoulement normal de l'exécution doivent être
conservés, tout en faisant les modifications extrêmement difficiles à détecter. Le fonctionnement de l'insertion opcode mannequin 37 est indiqué en
détail dans la figure. 6 . La séquence d'instructions de départ comprend procédure que le mélange, mélangées BLENDED 51 . Après chaque
instruction dans la procédure de mélange, la inséreuse opcode mannequin, avec une probabilité indiqué dans les préférences, les inserts d'une
succursale 62 à l'instruction suivante 63 . Après l'insertion des branches, des données factices 64 est inséré entre le pouvoir et la prochaine instruction.
Ainsi, dans la séquence d'instructions résultant 61 , Parce que les branches inséré cause le déroulement du programme de sauter sur les opcodes
mannequin inséré, le flux d'exécution correcte est conservée.

Dans certains modes de réalisation de l'invention, les opcodes à insérer sont générés par un générateur de nombres pseudo aléatoires initialisé par le
germe, comme illustré ci-dessous:

mov ax, bx

Aller XX 1

DB RND [ 1 ]

XX 1 :

mov, ax, cx

saut, XX 2

DB RND [ 2 ]

XX 2 :

mov ax, dx

Aller XX 3

DB RND [ 3 ]

XX 3 :

où RND [x] représente un nombre pseudo-aléatoire initialisé avec la semence. Il est préférable qu'un plus grand nombre être employé comme opcodes
factices car elles fournissent une mesure de protection contre le reverse engineering. Dans le cas où un pirate a tenté de démonter le code exécutable
d'une version du logiciel produit selon l'invention, le désassembleur serait tenter de démonter les opcodes mannequin et l'instruction qui suit le opcode
mannequin pourrait être incorrectement démonté, à la suite. Dans d'autres réalisations, le mannequin opcodes sont sélectionnés à partir d'une table de
correspondance (LUT) sur un pseudo au hasard, comme illustré ci-dessous. Le tableau 1 représente une LUT de 17 prédéfinies opcodes mannequin.

TABLEAU 1
Factices [0] db 0ebh, 3,0 cdh, 20h, 17h; 3 eip jmp
Factices [1] db 0ebh, 2,0 cdh, 20h, 0ebh, 2,0 CDH; 20h, +2 eip JMP, JMP
eip 2
Factices [2] db 0ebh, 2,0 C7H, 5,0 EBH, 2,0 cdh, 20h
Factices [3] db 0ebh, 2,0 cdh, 20h
Factices [4] db 0ebh, 2,0 C7H, 85h
Factices [5] db 0ebh, 3,0 cdh, 20h, 0c7h
Factices [6] db 0ebh, 3,0 cdh, 20h, 0eah
Factices [7] db 0ebh, 3,0 cdh, 20h, 069h
Factices [8] db 0ebh, 2069 h, 0b1h
Factices [9] db 0ebh, 2,0 EBH, 1,0 EBH, 1,0 EBH
Factices [10] db 0ebh, 3,0 cdh, 20h, 0ebh, 0ebh, L, 0ebh
Factices [11] db 0ebh, 1,0 EBH, 0ebh, 2,0 cdh, 20h
Factices [12] db 0ebh, 3,0 cdh, 20h, 0ebh
Factices [13] db 0ebh, 3,0 cdh, 20h, 3
Factices [14] db 0ebh, 4,0 cdh, 20h, 2,2,0 EBH, 2,0 cdh, 20h
Factices [15] db 0ebh, 4,0 cdh, 20h, 0ebh, 2,0 EBH, 2,0 cdh, 20h
Factices [16] db 0ebh, 4,0 cdh, 0ebh, 3,0 cdh, 0ebh, 2,0 cdh, 20h

Pour la séquence d'instructions:

mov ax, bx

7 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

mov ax, cx

mov ax, dx,

une pseudo suite de nombres aléatoires 40 , 12 , 49 , 32 est généré par l'initialisation d'un générateur de nombres pseudo aléatoires (PNRG) avec les
semences. Comme décrit précédemment, les branches de l'instruction suivants sont insérés après chaque instruction, et d'un opcode mannequin est
inséré entre chaque branche et de l'instruction qui suit immédiatement. Ainsi, les résultats suivants séquence d'instructions:

mov ax, bx

Aller xx 1

<--------

XX 1 :

mov ax, cx

Aller XX 2

<--------

XX 2 :

mov ax, dx

Aller XX 3

<--------

XX 3 :

où <-------- représente le point d'insertion d'un opcode mannequin. Cependant, la branche ne doit pas nécessairement pour rediriger le flux
d'exécution à l'instruction suivante immédiatement après la première instruction. Dummy opcodes sont extraites de la LUT d'une manière déterminée
par la séquence de nombres aléatoires. Par exemple: Le tableau 1 contient un tableau de 17 opcodes mannequin. Utilisation de la séquence de
nombres aléatoires, les calculs suivants peuvent être faites:

Factices [ 40 mod17] = [MANNEQUIN 6 db] = 0ebh, 3,0 cdh, 20h, 0eah

Factices [ 12 mod17] = [MANNEQUIN 12 db] = 0ebh, 3,0 cdh, 20h, 0ebh

Factices [ 49 mod17] = [MANNEQUIN 15 ] =

db 0ebh, 4,0 cdh, 20h, 0ebh, 2,0 EBH, 2,0 cd.

Ainsi, la séquence d'instructions qui en résulte est:

mov ax, bx

Aller XX 1

db 0ebh, 3,0 cdh, 20h, 0eah

XX 1 :

mov ax, cx

Aller XX 2

db 0ebh, 3,0 cdh, 20h, 0ebh

XX 2 :

mov ax, dx

Aller XX 3

db 0ebh, 4,0 cdh, 20h, 0ebh, 2,0 EBH, 2,0 cd

XX 3 :

La description ci-dessus est exemplaire, et non destinés à être limitatif. Dans la pratique, la séquence de nombres aléatoires seront de durée variable,
et l'algorithme de sélection des opcodes blanc peut varier. D'autres méthodes de sélection des opcodes mannequin conforme à l'esprit et la portée de
l'invention apparaîtront à l'homme de l'art de la programmation informatique. En outre, bien que l'exemple montre une séquence d'instructions qui ont
déjà été modifiés selon les procédures décrites précédemment, la procédure d'insertion opcode pourrait aussi bien être appliquée à des séquences
d'instructions non modifié.

Bien que l'invention est décrit ci-après en référence à un mode de réalisation préféré, l'homme de l'art facilement comprendre que d'autres
applications peuvent être substitués à ceux qui y sont énoncés sans s'écarter de l'esprit et la portée de la présente invention. En conséquence,
l'invention ne devrait être limitée par les revendications inclus ci-dessous.

8 sur 9 05/07/2010 01:17


méthode de génération de code polymorphe et leurs système - Brevet 6... http://translate.googleusercontent.com/translate_c?hl=fr&langpair=en%...

<- Précédent brevets (conve programme binaire ...) | Suivant brevets (functio interprétation ...) ->

Copyright 2004-2010 FreePatentsOnline.com. Tous droits réservés. Politique de confidentialité & Conditions d'utilisation .

Maison
Recherche de brevets
Services de données
Aider
Contactez-nous
Annoncer sur ce site

9 sur 9 05/07/2010 01:17

You might also like