C=Fax T="Text(24)" P=No M=No N="Fax" Z=false

publicité
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
Téléchargement