Guide d intégration Protection de logiciels PHP avec DinkeyPRO/FD Contact Commercial : Tél. : 02 47 35 70 35 Email : com@aplika.fr Contact Technique : Tél. : 02 47 35 53 36 Email : support@aplika.fr Version 1.00 du 15/02/2011 La Foltière - 37270 AZAY SUR CHER Tél. 33(0)2 47 35 70 35 - Fax 33(0)2 47 35 70 25 - e-mail : aplika@aplika.fr
Guide d intégration DinkeyPRO/FD PHP 1. Introduction... 3 2. Les étapes de protection de vos pages PHP... 3 3. Fonctions de vérification de la protection PHP... 5 3.1. Liste des fonctions GET... 5 3.2. Code exemple PHP... 6 3.3. Tableau des valeurs de FLAGS... 6 3.4. Protection des extensions PHP... 6 4. Déploiement de votre application... 9 2
Guide d intégration DinkeyPRO/FD PHP 1. Introduction Afin de vous aider dans les premiers pas de la pose de protection sur vos logiciels PHP, vous trouverez dans ce guide de prise en main rapide l essentiel des commandes et fonctionnalités pour la bonne utilisation des clés DinkeyPRO/FD. La solution que nous proposons vous permettra de distribuer vos logiciels PHP tout en maîtrisant le nombre de licences installées et en protégeant les sources et scripts ainsi distribués contre la copie ou les modifications. L utilisation seule de notre solution sans obfuscation des scripts PHP n est pas conseillée. Pour garantir l efficacité de la solution nous vous invitons à crypter vos sources PHP afin que les appels à nos APIs ne puissent pas être retirés. Il existe plusieurs programmes permettant le cryptage de script PHP, parmi ceux que nous avons testés pour vous, nous recommandons l utilisation de SourceGuardian. Pour faire une demande de version d évaluation cliquez-ici http://www.sourceguardian.com/free_php_encoder_trial.html. Nous proposons également la fourniture de ce logiciel pour cela, contactez votre commercial. Pour utiliser cette solution vous devez dans un premier temps, lors de l installation du SDK DinkeyPRO sous Windows, faire le choix d installer les Extensions PHP. Ces extensions permettent d établir des appels à nos APIs directement à partir de vos scripts PHP. Remarque : Les extensions PHP proposées pour l utilisation de nos APIs ne permettent pas d effectuer un contrôle des accès à vos pages PHP, mais de protéger la distribution de vos solutions. Pour mettre en place un contrôle d accès vous pouvez utiliser notre solution DinkeyWeb. Plus d informations sur www.dinkeyweb.fr Méthode utilisée : API avec des extensions PHP de notre fourniture, pour tout type de serveur web et d OS et de versions de PHP. En effet, le choix de l extension dépend de la version PHP et de son type de built, du type d OS et de son mode d exécution 32 ou 64 bits, du type de serveur Internet utilisé et de son paramétrage. Afin de simplifier le choix de l extension nous avons mis au point un script qui, après avoir analysé votre serveur, vous indiquera précisément quelle extension choisir. Il convient donc de copier le script which_extension.php sur le serveur destiné à recevoir l installation de vos programmes PHP, puis de l exécuter dans un navigateur. Ce script analysera alors l équipement et indiquera avec exactitude quelle extension doit être utilisée. Pour protéger votre application, vous devrez donc protéger le ou les extensions en utilisant DinkeyADD, en spécifiant la méthode API comme méthode de protection. Vous ne protégez pas directement vos scripts PHP. Une astuce possible pour protéger simplement toutes les extensions est de les copier toutes dans le même dossier (exemple c:\dossiera) puis de les protéger avec la même licence (exemple c:\dossiera\*.* dossier de sortie c:\dossierb) Remarque : une fois protégée avec DinkeyADD ne laissez pas de version non protégée des extensions, même si les fichiers ont été renommés. Le chargement d une extension non protégée entraînerait une erreur 413 lors de test de protection. 2. Les étapes de protection de vos pages PHP 1/ Modifiez vos scripts en y insérant des appels à nos fonctions de vérification de protection, tel que décrit dans phptest.php. Cryptez-les ensuite avec l outil de votre choix. 2/ Protégez toutes les extensions avec DinkeyADD (pour les modèles Plus et réseau vous devrez également programmer les dongles). 3/ Sur les serveurs où seront installés les scripts protégés, exécutez which_extension.php pour savoir quelle extension vous devez installer. 3
4/ Il suffit alors de copier la bonne extension dans le dossier comme indiqué dans which_extension.php 5/ Connectez un dongle 4
3. Fonctions de vérification de la protection PHP int DDSimpleCheck(flags) Exécute un test de protection avec la valeur flags indiquée en paramètre et retourne un code d erreur ou 0 si succès. int DDSimpleCheckEx($flags, $execs_decrement, [string] $alt_licence_name) Exécute un test de protection avec la valeur flags indiquée et initialise la valeur execs_decrement du DRIS (Mettre Flags à 2 pour utiliser le décompte d exécutions avec la valeur execs_decrement) et positionne la valeur alt_licence_name dans le DRIS (flags = 128) Si flags n est pas correctement positionné, execs_decrement et alt_licence_name sont ignorés. Retourne un code d erreur ou 0 si succès. int DDSimpleCheckAlg($flags, $alg_num, $var_a, $var_b, $var_c, $var_d, $var_e,$var_f, $var_g, $var_h) Exécute un test de protection avec la valeur flags indiquée et permet également d utiliser les algorithmes (valeur avec alg_num et variables a à h). Retourne un code d erreur ou 0 si succès. Pour obtenir le résultat de l algorithme, appelez la fonction GetAlgAnswer. int DDSimpleCheckAlgEx($flags, $execs_decrement, [string] $alt_licence_name,$alg_num,$var_a, $var_b, $var_c, $var_d, $var_e, $var_f, $var_g, $var_h) Exécute un test de protection avec la valeur flags indiquée et permet également d utiliser les algorithmes (valeur avec alg_num et variables a à h). Permet également d utiliser execs_decrement et alt_licence_name Retourne un code d erreur ou 0 si succès. Pour obtenir le résultat de l algorithme, appelez la fonction GetAlgAnswer. int DDWriteString($flags, $rw_offset, [string] $data) Exécute un test de protection avec la valeur flags indiquée et écrit rw_length octets de "data" à l offset rw_offset dans la zone de données du dongle. Retourne un code d erreur ou 0 si succès. int DDReadString($flags, $rw_offset, $rw_length, [string] &$data)exécute un test de protection avec la valeur flags indiquée et effectue la lecture de rw_length octets de "data" à partir l offset rw_offset dans la zone de données du dongle. Les données seront lues à partir de l argument "data". Retourne un code d erreur ou 0 si succès. 3.1. Liste des fonctions GET Remarque : Toutes les fonctions ci-dessous retournent FALSE si un test de protection n a pas été effectué avant leur appel. Si au moins un test de protection à déjà été effectué, la valeur de retour sera TRUE. Pour plus d informations sur ces valeurs reportez-vous au manuel, rubrique Structure DRIS. DDGetExtendedError(int &$exterr) DDGetType(int &$type) DDGetModel(int &$model) DDGetSDSN(int &$sdsn) DDGetDongleNumber(int &$donglenumber) DDGetUpdateNumber(int &$updatenumber) DDGetDataAreaSize(int &$dataareasize) DDGetMaxAlgNum(int &$maxalgnum) DDGetExecs(int &$execs) DDGetExpDay(int &$expday) DDGetExpMonth(int &$expmonth) 5
DDGetExpYear(int &$expyear) DDGetFeatures(int &$features) DDGetNetUsers(int &$netusers) DDGetAlgAnswer(int &$AlgAnswer) DDGetFDCapacity(int &$fdcapacity) DDGetProdCode(string &$prodcode) DDGetFDDrive(string &$fddrive) 3.2. Code exemple PHP Nous joignons à notre exemple deux scripts PHP prêts à l emploi, phptest.php pour tester l appel à nos APIs et vérifier la présence et les paramètres d un dongle et which_extension.php pour connaître l extension à choisir. Le code de test de protection est disponible dans notre page phptest.php. Remplacer le SDSN de demo 10101 par votre numéro SDSN dans les 10 fonctions principales. Changer le code MyAlgorithm (si vous utilisez vos algorithmes) Changer le code de CryptDRIS (si vous utilisez le cryptage du DRIS dans DinkeyADD) Changer CryptApiData (Si vous utilisez la fonction de cryptage des données) Changer le code de MyRWAlgorithm (si vous utilisez le cryptage des données ou l algorithme R/W de nos APIs) Vous remplacerez probablement la fonction Echo par votre propre code afin d uniformiser l affichage des codes d erreurs de protection avec les autres fenêtres de votre application. 3.3. Tableau des valeurs de FLAGS 0 DEC_ONE_EXEC test par défaut. 1 DEC_MANY_EXECS décrémente de 1 le compteur d exécutions. 2 START_NET_USER décrémente le compteur d exécutions de la valeur indiquée dans execs_decrement, utilisée avec les fonctions DDSimpleCheckEx et DDSimpleCheckAlgEx. 4 STOP_NET_USER Démarre un utilisateur réseau. 8 USE_FUNCTION_ARGUMENT Stoppe un utilisateur réseau. 32 CHECK_LOCAL_FIRST Vérifie les ports USB locaux avant de rechercher un dongle réseau (DinkeyServer). 64 CHECK_NETWORK_FIRST Vérifie d abord si un dongle réseau est disponible, puis scrute les ports USB locaux. 128 USE_ALT_LICENCE_NAME Fait un test de protection en vérifiant le nom du programme appelant indiqué dans alt_prog_name avec les fonctions DDSimpleCheckEx et DDSimpleCheckAlgEx. 256 DONT_SET_MAXDAYS_EXPIRY - Si la date d expiration n a pas été calculée, ne pas le faire cette fois. 512 MATCH_DONGLE_NUMBER - Restreindre le test à un numéro de série de dongle précis (valeur indiquée dans le champ DRIS). 3.4. Protection des extensions PHP Si vous faîtes appel au plugin sans l avoir préalablement protégé avec DinkeyADD, alors vous obtiendrez un code erreur 413. Pour protéger les extensions, veuillez procéder comme suit. Remarques : Vous devez protéger les extensions et pas directement vos applications. Vos programmes faisant appel aux extensions protégées seront alors également protégés. 6
Ouvrez l'utilitaire DinkeyAdd. Dans l'onglet "Général" : Précisez le type de clé que vous utilisez. En cas de doute, exécutez DinkeyLook afin d'afficher un diagnostic de la clé (Vous pouvez également indiquer plusieurs types de clé). Indiquez le Code Produit (pour les clés d'évaluation, celui-ci est "DEMO"). Dans l'onglet "Profils Licences" : Cliquez sur le bouton "Ajouter à la liste". Puis indiquer le nom d un profil licence et choisissez vos restrictions. 7
Dans l'onglet "Programmes" : Cliquez sur le bouton "Ajouter à la liste". Dans le champ "Chemin source", pointez sur le fichier plugin correspondant à votre utilisation (celui-ci se trouve par défaut dans le sous-dossier "Modules" du dossier d'installation de DinkeyPRO). Dans le champ "Chemin cible", indiquez l'emplacement vers lequel vous souhaitez qu'une copie protégée du plugin soit placée. Vérifiez que la méthode "API" est bien sélectionnée. Laissez les valeurs par défaut pour les champs suivants. Validez en cliquant sur le bouton OK. Les fichiers extensions du dossier c:/dossiers sont alors tous sélectionnés. Dans l'onglet "Zone de données" : 8
Initialisez la taille de la zone de données sécurisée, par exemple 128 octets. Le code exemple fourni permet de tester la lecture/écriture à vers/à partir de la zone de données sécurisée. Ceci ne fonctionnera que si cette zone est initialisée avec une taille suffisante pour recevoir les données de test. Remarques : Selon le type de clé (DinkeyPRO ou DinkeyFD) choisi dans l'onglet "Général", les paramètres de la zone de données correspondante seront activés dans l'onglet "Zone de données". Seules les versions Plus et Net disposent d'une zone de données sécurisées. Dans l'onglet "Protéger" : Vérifiez que l'option "Protéger l'application et programmer le dongle" est sélectionnée. Assurez-vous que le dongle est connecté. Cliquez sur le bouton "Ajouter la protection maintenant" Un message de confirmation apparaît. Vous disposerez alors d'un dongle correctement programmé, ainsi que d'une version protégée du/des extension(s) utilisé(s) dans le dossier vers lequel vous aurez pointé dans le champ "Chemin cible" de la fenêtre "Détails de la protection des fichiers". 4. Déploiement de votre application Vous devrez fournir les fichiers extensions en version protégée par DinkeyADD et leur arborescence avec votre script PHP crypté. Ces fichiers doivent être copiés sur les postes utilisateurs. Pour savoir quelle extension utiliser, il convient d utiliser notre script which_extension.php Si les fichiers extensions ne sont pas présents, une erreur surviendra. 9
La Foltière - 37270 AZAY/CHER Tél. 02 47 35 70 35 - Fax 02 47 35 70 25 e-mail : aplika@aplika.fr www.aplika.fr 10