2008 Merise Kn3ckes Exia 05/02/2008 Merise 2008 Définition des mots-clés - REVERSE-ENGINEERING : La rétro-ingénierie (traduction littérale de l'anglais reverse engineering), également appelée rétro conception, ingénierie inversée ou ingénierie inverse, est l'activité qui consiste à étudier un objet pour en déterminer le fonctionnement interne ou sa méthode de fabrication. - BDD MYSQL : MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées. Il est multi-thread, multi-utilisateurs. 2 CER SCHMITT Mathieu Merise 2008 Axes de recherches Les bases du « R-E » Définition Le but de l'ingénierie inverse des données est d'obtenir un modèle logique de données à partir d'une implémentation physique existante. La démarche d'ingénierie inverse permet soit: - de créer une documentation qui n'existe pas; de compléter une documentation qui n'est pas synchrone avec la réalité. Exemple d’application 3 CER SCHMITT Mathieu Merise 2008 Le reverse engineering avec PowerAMC Le reverse engineering est le processus qui consiste à générer un MPD, ou des objets de MPD, à partir d'une structure de base de données. Vous pouvez générer un MPD depuis une structure de base de données de deux façons différentes : Génération d'un MPD Description A l'aide d'un fichier de script Vous effectuez le reverse engineering de fichiers de script SQL qui contiennent les instructions de création. Il s'agit généralement du script utilisé pour générer la base de données, mais cette opération peut impliquer d'autres scripts Via une source de Vous effectuez le reverse engineering de la structure d'une base de données existante, en spécifiant une source de données ODBC ainsi que des informations données ODBC de connexion Power Designer permet de procéder au reverse engineering de plusieurs fichiers de script simultanément pour créer un MPD. Vous pouvez placer dans un nouveau MPD le contenu d'une base de données sur laquelle vous effectuez un reverse engineering. La source de données peut être constituée par un ou plusieurs fichiers script, ou bien par une source de données ODBC. Pour effectuer le reverse engineering d'une base de données via ODBC : Sélectionnez File-->Reverse engineer-->Database. La boîte de dialogue Choix du SGBD s'affiche. Cliquez sur le bouton radio Share. Sélectionnez un SGBD dans la liste déroulante. 4 CER SCHMITT Mathieu Merise 2008 Figure 2.14 : Reverse Enfineering : Choix du SGBD Cliquez sur OK. La boîte de dialogue Reverse engineering d'une base de données s'affiche. Cliquez sur le bouton radio Using an ODBC source et sélectionnez une source de données ODBC. Figure 2.15 : Reverse Engineering : source ODBC 5 CER SCHMITT Mathieu Merise 2008 Cliquez sur OK. La boîte de dialogue Reverse engineering via ODBC s'affiche. Figure 2.16 : Reverse Engineering : sélection des objets Sélectionnez un filtre pour le qualifiant et le propriétaire dans les listes déroulantes situées dans la parties supérieure gauche de la boîte de dialogue. Cliquez sur un onglet de type d'objet. Cochez la case des objets sur lesquels vous souhaitez faire porter le reverse engineering. Décochez la case des objets que vous ne souhaitez pas inclure dans le reverse engineering. Le cas échéant, cochez ou décochez l'option de reverse engineering proposée pour chaque type d'objet. Cliquez sur OK. La fenêtre Résultats signale la conversion des tables et indique que la base de données a subi le reverse engineering avec succès. 6 CER SCHMITT Mathieu Merise 2008 Réaliser le problème du prosit. On passe d’Access au MLD : 7 CER SCHMITT Mathieu Merise 2008 On passe ensuite, du MLD au MCD : 8 CER SCHMITT Mathieu Merise 2008 Génération du code sql : #============================================================== # Nom de SGBD : Microsoft Access 2000 # Date de création : 06/02/2008 15:40:16 #============================================================== RemoveJoin C="FK_DETAILS _REFERENCE_COMMANDE" T="Details commandes" P=commandes; RemoveJoin C="FK_DETAILS _REFERENCE_PRODUITS" T="Details commandes" P=produits; RemoveJoin C=FK_CLIENTS_REFERENCE_FONCTION T=clients P=fonctions; RemoveJoin C=FK_COMMANDE_REFERENCE_CLIENTS T=commandes P=clients; RemoveTble C="Details commandes"; RemoveIndx C="Code postal" T=clients; RemoveIndx C="code fonction" T=clients; RemoveTble C=clients; RemoveIndx C="Code client" T=commandes; RemoveTble C=commandes; 9 CER SCHMITT Mathieu Merise 2008 RemoveTble C=fonctions; RemoveTble C=produits; #============================================================== # Table : "Details commandes" #============================================================== CreateTble C="Details commandes" N="Details commandes" ( C="N° commande" T="INTEGER" P=Yes M=Yes N="N° commande" Z=false, C="Ref produit" T="INTEGER" P=Yes M=Yes N="Ref produit" Z=false, C=Quantite T="SMALLINT" P=No M=No N="Quantite" Z=false, C="Remise (%)" T="REAL" P=No M=No N="Remise (%)" Z=false ); addcollabl T="Details commandes" C="N° commande" L="Identique au N° commande de la table Commandes"; addcollabl T="Details commandes" C="Ref produit" L="Identique à la Réf produit de la table Produits"; #============================================================== # Table : clients #============================================================== CreateTble C=clients N="clients" ( C="Code client" T="Text(5)" P=Yes M=Yes N="Code client" Z=false, C="Raison sociale 1" T="Text(35)" P=No M=No N="Raison sociale 1" Z=false, 10 CER SCHMITT Mathieu Merise 2008 C="Raison sociale 2" T="Text(35)" P=No M=No N="Raison sociale 2" Z=false, C="Nom correspondant" T="Text(30)" P=No M=No N="Nom correspondant" Z=false, C="Adresse 1" T="Text(35)" P=No M=No N="Adresse 1" Z=false, C="Adresse 2" T="Text(35)" P=No M=No N="Adresse 2" Z=false, C=Ville T="Text(25)" P=No M=No N="Ville" Z=false, C="Code postal" T="Text(10)" P=No M=No N="Code postal" Z=false, C=Pays T="Text(15)" P=No M=No N="Pays" Z=false, C=Telephone T="Text(24)" P=No M=No N="Telephone" Z=false, C=Fax T="Text(24)" P=No M=No N="Fax" Z=false, C="code fonction" T="INTEGER" P=No M=No N="code fonction" Z=false ); #============================================================== # Index : "code fonction" #============================================================== CreateIndx C="code fonction" T=clients ( C="code fonction" A=ASC ); #============================================================== # Index : "Code postal" #============================================================== CreateIndx C="Code postal" T=clients ( C="Code postal" A=ASC ); 11 CER SCHMITT Mathieu Merise 2008 #============================================================== # Table : commandes #============================================================== CreateTble C=commandes N="commandes" ( C="N° commande" T="INTEGER" P=Yes M=Yes N="N° commande" Z=false, C="Code client" T="Text(5)" P=No M=No N="Code client" Z=false, C="Date commande" T="DATETIME" P=No M=No N="Date commande" Z=false, C="Date expedition" T="DATETIME" P=No M=No N="Date expedition" Z=false ); addcollabl T=commandes C="N° commande" L="Numéro d'ordre unique des commandes"; addcollabl T=commandes C="Code client" L="Identique au Code client de la table Clients"; #============================================================== # Index : "Code client" #============================================================== CreateIndx C="Code client" T=commandes ( C="Code client" A=ASC ); #============================================================== # Table : fonctions #============================================================== 12 CER SCHMITT Mathieu Merise 2008 CreateTble C=fonctions N="fonctions" ( C="code fonction" T="COUNTER" P=Yes M=Yes N="code fonction" Z=false, C="Libelle fonction" T="Text(30)" P=No M=No N="Libelle fonction" Z=false ); #============================================================== # Table : produits #============================================================== CreateTble C=produits N="produits" ( C="Ref produit" T="COUNTER" P=Yes M=Yes N="Ref produit" Z=false, C="Nom du produit" T="Text(40)" P=No M=No N="Nom du produit" Z=false, C=conditionnement T="Text(30)" P=No M=No N="conditionnement" Z=false, C="Prix unitaire" T="CURRENCY" P=No M=No N="Prix unitaire" Z=false, C="Unites en stock" T="SMALLINT" P=No M=No N="Unites en stock" Z=false, C="Niveau de reapprovisionnement" T="SMALLINT" P=No M=No N="Niveau de reapprovisionnement" Z=false ); addcollabl T=produits C="Ref produit" L="Numéro automatiquement assigné aux nouveaux produits"; addcollabl T=produits C=conditionnement L="[(Exemple : 24 bouteilles (1litre)]"; addcollabl T=produits C="Niveau de reapprovisionnement" L="Nombre minimum d'unités à garder en stock"; 13 CER SCHMITT Mathieu Merise 2008 CreateJoin C="FK_DETAILS _REFERENCE_COMMANDE" T="Details commandes" P=commandes D=restrict U=restrict ( P="N° commande" F="N° commande" ); CreateJoin C="FK_DETAILS _REFERENCE_PRODUITS" T="Details commandes" P=produits D=restrict U=restrict ( P="Ref produit" F="Ref produit" ); CreateJoin C=FK_CLIENTS_REFERENCE_FONCTION T=clients P=fonctions D=restrict U=restrict ( P="code fonction" F="code fonction" ); CreateJoin C=FK_COMMANDE_REFERENCE_CLIENTS T=commandes P=clients D=restrict U=restrict ( P="Code client" F="Code client" ); 14 CER SCHMITT Mathieu Merise 2008 Limite du Reverse-engineering La sécurité et la propriété intellectuelle sont deux priorités des éditeurs de logiciels. La sécurité d'une application est nécessaire pour sa large diffusion. La propriété intellectuelle garantie la pérennité des recettes et justifie les investissements réalisés pour son développement. Mais quid du secret industriel ? A. Les dangers du reverse engineering Le reverse engineering est une technique permettant de reconstituer le code source d'une application à partir de sa forme compilée telle que livrée à ses clients par un éditeur. La possession du code source permet de connaître le fonctionnement précis d'une application. Un concurrent peut grâce à cette technique connaître les algorithmes utilisés par son concurrent et lui voler ses secrets. Outre les algorithmes, les identifiants de connexion à des ressources (bases de données, annuaires...) sont là aussi accessibles, d'où le risque de vol de mot de passe et d'accès frauduleux à des ressources protégées. B. Les techniques de protection Face aux risques liés au reverse engineering quelles techniques permettent de cacher le code source d'une application ? Il en existe quatre : l'obfuscation transforme le code source avant compilation de manière à le rendre illisible pour l'être humain le chiffrement assure la confidentialité totale du code source tant que l'algorithme de chiffrement n'a pas été cassé et que la clé n'a pu être trouvée par force brute l'exécution de code distant permet de ne livrer aux clients qu'une partie de l'application, les portions sensibles sont conservées sur un serveur distant protégé sur lequel elles s'exécutent 15 CER SCHMITT Mathieu Merise 2008 le code natif protégé est un code compilé pour une architecture matérielle très spécifique, rendant difficile l'utilisation d'un décompilateur adapté Validation des hypothèses - Vrai. MySQL = base de donnée Web Vrai. R-E est une option de PowerAMC Faux. On peut interroger une BDD avec un navigateur Vrai. R-E = outils de conversion de BDD Vrai. R-E est une technique qui permet d’obtenir un MLD à partir d’une BDD. Vrai. R-E est une technique qui permet d’obtenir un MLD à partir de la structure d’une BDD. 16 CER SCHMITT Mathieu