IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Comment protéger le code d'un composant [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Comment protéger le code d'un composant
    Bonjour,

    Je cherche comment protéger le code d'un composant dans l'IDE en ne fournissant pas son source à l'installation.

    Pour test, j'ai pris un petit composant visuel que j'ai réalisé avec l'aide de ce forum.
    Extrait du lzbuttons.lpk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Files Count="2">
          <Item1>
            <Filename Value="lzbitbtn.pas"/>
            <HasRegisterProc Value="True"/>
            <UnitName Value="lzBitBtn"/>
          </Item1>
          <Item2>
            <Filename Value="lzspeedbutton.pas"/>
            <HasRegisterProc Value="True"/>
            <UnitName Value="lzSpeedButton"/>
          </Item2>
        </Files>
    Hormis ce fichier (le .lpk), j'ai laissé dans le répertoire de ce composant :
    • lzbuttons.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    { This file was automatically created by Lazarus. Do not edit!
      This source is only used to compile and install the package.
     }
    unit lzButtons; 
    interface
    uses
      lzBitBtn, lzSpeedButton, LazarusPackageIntf;
    implementation
    procedure Register; 
    begin
      RegisterUnit('lzBitBtn', @lzBitBtn.Register); 
      RegisterUnit('lzSpeedButton', @lzSpeedButton.Register); 
    end; 
    initialization
      RegisterPackage('lzButtons', @Register); 
    end.
    • le répertoire /lib
    Du répertoire initial, j'ai supprimé les fichiers lzButtons.pas; lzspeedbutton.pas; lzspeedbutton_icon.lrs et lzbitbtn_icon.lrs.

    L'installation du composant dans l'IDE se passe (semble se passer) correctement. Mais une fois dans une Form, si
    1. j'y dépose un lzButton (ras)
    2. puis double-clique sur ce dernier, l'IDE déclare à ce moment une erreur
    unit1.pas(20,3) Error: source de l'unité G:\lazarus\0.9.31-28842-fpc-2.4.3-20101231\components\lzButtons\lib\i386-win32\lzbitbtn.ppu non trouvé.
    La ligne 20 correspond au "end;" de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     TForm1 = class(TForm)
        lzBitBtn1: TlzBitBtn;
      private
        { private declarations }
      public
        { public declarations }
      end;
    Or le fichier lzbitbtn.ppu existe bien dans le répertoire en question. Pour l'instant, je teste sous Win XP. Les versions de Lazarus et fpc sont contenues dans le nom du répertoire du message d'erreur ci-dessus.

    Merci d'avance.
    Cordialement. Gilles
    Dernière modification par Invité ; 07/02/2011 à 12h12.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    10H00
    J'ai retourné le problème dans tous les sens... Est-on obligé de fournir les .pas (ou .pp) avec les composants Lazarus ? J'ai cherché vainement un tel objet sur le Web...

    Si tel n'est pas le cas, comment le déclare-t-on dans le composant : le laisser tel quel en supprimant simplement les 2 fichiers .pas provoque une erreur signalant que le premier (lzbitbtn.pas) n'est pas trouvé avec l'option d'ignorer ou d'abandonner. Si j'ignore l'erreur, l'installation du paquet (une fois compilé avant que les 2 .pas ne soient supprimés) semble se faire correctement... Mais provoque l'erreur signalée dans le premier message.

    Si je compile le paquet, supprime les 2 .pas et le déclare dans le composant tel que ci-dessous, l'erreur est alors la suivante :



    Il doit bien y avoir une solution. J'imagine mal qu'un outil de développement ne permette pas de protéger le code source de certains de ses composants...

    16H30
    Bon j'ai trouvé un peu de docs sur les packages... et je ne sais toujours pas s'il est possible de construire des .lpk qui ne contiennent pas les 2 .pas d'origine (une fois ces derniers compilés)... et de les installer. Je suis allé voir dans le components\lzButtons\lib\i386-win32\lzButtons.compiled sans plus de succès. Par contre, le problème est identifié :"The component editor of class tdefaultcomponenteditor has created the error unable to find method, please fix the error shown in the message window...". Et donc le message d'erreur c'est le .ppu non trouvé. Message que j'avais déjà rencontré à une autre occasion et réglé en ajoutant le répertoire lib\i386-win32 au bon endroit dans les options de compilation.

    Or cette déclaration correspond également à un bug plus ou moins présent suivant les versions et semble-t-il très "actif" depuis la 0.9.29... Ce qui ne m'aide pas beaucoup. J'ai essayé sur plusieurs versions installées sur mon poste de la 0.9.28.3-26434-fpc-2.4.0-20100703 à la 0.9.31-29426-fpc-2.4.3-20110209... Et le résultat est le même...

    17H00
    Comme, il me faut avancer, je vais placer les fonctions, procedures et codes que je dois cacher dans une librairie dynamique à laquelle fera appel le composant... et j'espère sans mauvaise surprise cette fois .

    Cordialement. Gilles
    Dernière modification par Invité ; 09/02/2011 à 17h19.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Hum, cela se présente mal...(cf Form lazarus.freepascal).

    Cordialement. Gilles

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Comme mentionné ci-dessus, il n'existe pas de solution pour installer et utiliser un composant sans src (ie sans fichiers .pas) car ces fichiers (la partie interface de ceux-ci pour être plus précis) sont exigés par l'IDE pour "intégrer" les composants dans ce dernier.

    Cependant l'équipe Lazarus propose une solution de contournement...

    C'est dans la doc m'ont-ils précisé :
    Create a copy of the package.
    Set in the package editor / Options / IDE integration / Update to Manual compilation.
    Compile it once.
    Delete the implementation sections of all units.
    Optional: You can use the publish package tool (Package Editor / More... / Publish Package) to create a zip of the package.
    You do not need to publish the .compiled file, Makefile, rst files, lrt files.
    Donc,
    1. Vous faites une copie du répertoire de votre composant.
    2. Paquet --> Ouvrir un fichier paquet( votre.lpk dans la copie de votre répertoire) --> Option --> Intégration de l'EDI : choisir "Compilation manuelle (jamais automatique)"
    3. Puis compilez.
    4. Ensuite, vous devez conserver tous les fichiers .pas du répertoire (la copie) de votre composant mais dans chacun d'eux vous enlevez tout ce que contient la partie implementation... Le code est donc "protégé" puisqu'il a disparu... (mais les sections interface restent visibles).
    5. Vous pouvez ensuite supprimer le fichier xxxx.compiled (dans /lib), et les fichiers xxx.rst, xxx.lrt et Makefile.


    Ceci fait, votre composant protégé partiellement est prêt à être installé.

    C'est très curieux cette méthode d'amputer tous les .pas et de devoir les laisser pour finalement pouvoir utiliser les fichiers compilés (.ppu). Avec mon anglais médiocre, j'ai eu beaucoup de mal à assimiler cette pratique très euh...lazarusienne.

    J'ai testé avec mon composant d'essai sous Windows et sous Linux. Evidemment, il faut autant de compilations que d'OS... voire même de versions de Lazarus ou/et de fpc ou du moins est-il plus prudent de vérifier.

    Cordialement. Gilles.
    Dernière modification par Invité ; 11/02/2011 à 08h45.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment protéger le code VBA par mot de passe
    Par electrosat03 dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/01/2012, 12h19
  2. Comment protéger son code du reverse engineering ?
    Par progfou dans le forum Débats sur le développement - Le Best Of
    Réponses: 120
    Dernier message: 12/01/2011, 18h12
  3. Comment protéger mon code ?
    Par cjpneros dans le forum VBA Word
    Réponses: 1
    Dernier message: 21/01/2009, 15h31
  4. Comment protéger le code source
    Par super-java dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/06/2008, 20h11
  5. Comment copier les codes dans le composant AdvCodeList ?
    Par Triste dans le forum Composants VCL
    Réponses: 1
    Dernier message: 30/10/2007, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo