Forum Programmation.autre Tatouage de code source

Posté par  .
Étiquettes : aucune
0
21
mar.
2011

Bonjour,

j'ai eu l'idée saugrenue d'essayer de tatouer un code source.
Du coup j'ai cherché un peu ce qu'il se faisait dans le domaine et la seule solution sérieuse sur laquelle je suis tombé est spécifique au C/C++:
Source Code Watermarking Based on Function Dependency Oriented Sequencing

Par sérieuse, j'écarte les solutions qui peuvent aisément être détectées par comparaison entre deux fichiers (tatoués ou pas) comme:

  • l'insertion d'espaces, tabulations, et autres caractères invisibles
  • la substitution de guillemets simples en guillemets doubles et inversement
  • les modifications dans l'indentation du code.

Est-ce un problème sans solution, même partielle, à l'heure actuelle ?
Certains d'entre vous y ont-ils déjà réfléchi entre deux pétales de maïs lors d'un petit déjeuner embrumé ?

Et si en plus je voulais que la présence et/ou l'absence de tatouage aient un effet sur les fonctionnalités du programme, je demande la Super Lune ?

Je me rends bien compte que si cette solution existait, SCO Group n'aurait pas survécu aussi longtemps et leur cabinet d'avocats n'aurait jamais pu faire fortune malgré un échec cuisant.

Maintenant que j'ai bien joué avec le nouveau système d'édition de DLFPRonR, vos avis éclairés sur la question sont les bienvenus !

merci

  • # Re: ForumProgrammation.autre —Tatouage de code source

    Posté par  . Évalué à 3.

    Vas contribuer à Weboob plutôt que de poser des questions qui n'ont d'intérêt que dans le monde du logiciel propriétaire !

    • [^] # Re: ForumProgrammation.autre —Tatouage de code source

      Posté par  . Évalué à 4.

      continue de dessiner des poires et laisse les grands causer !

      pouvoir déterminer que tel fichier libre a été pompé de tel projet à tel autre (propriétaire ou libre) permettrait de limiter sérieusement l'utilisation de logiciels libres dans des conditions non respectueuses de leur licence d'utilisation.

      • [^] # Re: ForumProgrammation.autre —Tatouage de code source

        Posté par  . Évalué à 1.

        Il est amusant que vous répondiez aux critiques en disant que c'est pour le bien du logiciel libre, et que vous avouiez plus bas que vous avez besoin d'une solution pour développer du non-libre (restrictions sur la diffusion du logiciel).

        • [^] # Re: ForumProgrammation.autre —Tatouage de code source

          Posté par  . Évalué à 0.

          et ?

          moules< pose comme vérité que la problématique soulevée n'a d'intérêt que pour le monde propriétaire, je lui répond que ça en aussi pour le monde du libre et lui propose un exemple.

          Quel rapport avec ce qui m'a amené à poser cette question ?

          Tu noteras d'ailleurs que j'ai avoué mes intentions sous une torture des plus féroces et après de longues heures de souffrances indicibles

  • # Autres solutions

    Posté par  (site web personnel) . Évalué à 3.

    Dans les mécanismes de tatouage, on pourrait rajouter:

    • l'inversion de l'ordre de déclaration des variables d'une fonction: int I; int J; deviendrait: int J; int I; Mais attention, il y a un effet de bord dans le cas de dépassement de tampon des variables (ce qui est de toute façon un bug du programme)

    • l'inversion des paramètres d'un test if ((I == 2) && (J <= 10)) deviendrait: if ((J <= 10) && (I == 2)) ATTENTION, il y a là un risque que le programme ne fonctionne plus comme avant, dans le cas où l'ordre des fonctions de test est important (exemple: if (test1() || test2()) avec test1 et test2 qui sont 2 fonctions)

    • le changement de nom des variables. Suivant le cas, cela se rapproche de l'obstrufication du code

    • le rajout de faute d'orthographes, ou d'erreur de description, dans les commentaires

    • changer certains caractères par leur équivalents hexadécimaux I[0] = ' '; deviendrait: I[0] = 0x20;

    Désolé pour le manque de RC dans les puces, je n'ai pas réussi à en écrire avec le nouveau LinuxFR... :=(

    Alors que les autres propositions sont plus ou moins automatisables, on peut aussi imaginer quelque chose comme ceci:

    char MyString[128];
    strcpy(MyString, "This is a test @copyright")

    deviendrait:
    char MyString[128];
    strcpy(MyString, "This is a test @copyright") MyString[14] = 0;

    Dans le 1er exemple, un "printf" de "MyString" donnerait "This is a test @copyright"
    Dans le 2nd cas, ce serait "This is a test"

    J'ai souvenir que par le passé, les développeurs du drivers proprio NVIDIA avaient utilisé cette astuce, afin que le chargement du module n'affiche plus le mot "taintened" dans "dmesg". L'idée étant alors pour eux, de masquer le fait que le driver n'était pas libre... ;)

    • [^] # Re: Autres solutions

      Posté par  . Évalué à 1.

      Mais toutes ces méthodes sont facilement détectables et "corrigeables" par simple comparaison de deux fichiers, identiques à l'origine, mais tatoués différemment.
      La méthode décrite dans le papier dont je donne le lien impacte directement la structure du code, rendant le tatouage indissociable des fonctionnalités du logiciel (d'après ce que j'ai compris du résumé)

  • # Quel et le but ?

    Posté par  . Évalué à 2.

    Quel est le but de ce tatouage ?

    • savoir si tel fichier source a été piqué ?
    • trouver automatiquement avec Google du code pompé ?

    Le tatouage ne peut fonctionner que pour un nombre restreint de personnes. Une fois le procédé connu du grand nombre, le tatouage est facilement supprimé.

    • [^] # Re: Quel et le but ?

      Posté par  . Évalué à 0.

      Le cas hypothétique de départ était de permettre l'utilisation d'un logiciel libre et d'y associer l'utilisation de plugins open source mais à licence restrictive en terme de diffusion. En gros, ouverture du code et droit de modification pour le client du plugin, mais interdiction de diffuser à des tiers.

      • [^] # Re: Quel et le but ?

        Posté par  (site web personnel) . Évalué à 1.

        Le cas hypothétique de départ était de permettre l'utilisation d'un logiciel libre et d'y associer l'utilisation de plugins open source mais à licence restrictive en terme de diffusion

        Si ce sont les plugins dont tu veux limiter/contrôler la diffusion, pourquoi ne pas: 1) ne les fournir que sous forme de programmes compilés en statique, et 2) associés à un mécanisme de protection : utilisation d'un ou plusieurs identifiant unique du hardware, d'une clé physique sur le port parallèle/USB, récupération d'un "token" sur Internet, etc... ?

        • [^] # Re: Quel et le but ?

          Posté par  . Évalué à 1.

          1/ parce que l'accès au source pour vérification et modification ne serait plus possible

          2/ l'idée n'est pas de déclarer l'utilisateur coupable par défaut ou de fliquer son utilisation du logiciel. De plus, ces protections ne sont finalement gênantes que pour les utilisateurs légitimes: les autres trouvent rapidement un moyen de s'en accommoder.

          Le but est d'avoir la possibilité de constituer, au minimum, un faisceau de preuve amenant à soupçonner une utilisation non autorisée d'un logiciel dont le code source a été tatoué.

      • [^] # Re: Quel et le but ?

        Posté par  . Évalué à 3.

        Les greffons dont vous voulez ouvrir les sources ne seront pas "open-source" (ni libres) si vous imposez des restrictions sur la rediffusion.

        The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale. -- en:Open-source_software

        • [^] # Re: Quel et le but ?

          Posté par  . Évalué à 0.

          c'est pas bien de sélectionner les citations selon ses objectifs.
          Allez, parce que c'est toi, voici les premières lignes de l'article dont tu as cité un extrait:

          Open-source software (OSS) is computer software that is available in source code form for which the source code and certain other rights normally reserved for copyright holders are provided under a software license that permits users to study, change, improve and at times also to distribute the software.

          traduction (rapide parce que je ne vais pas non plus y passer 3h):

          Un logiciel open-source est un logiciel qui est disponible sous forme de code source pour le quel le code source et certains autres droits normalement réservés au détenteur du copyright sont accordés selon une licence d'utilisation qui permet aux utilisateurs d'étudier, changer, améliorer et parfois aussi de distribuer le logiciel

          C'est pas pour rien que RMS râle sur la confusion faite entre logiciel open-source et logiciel libre

          • [^] # Re: Quel et le but ?

            Posté par  . Évalué à 2.

            L'article Wikipedia n'a pas de valeur légale, seule la "définition" en a une. Cette définition est copiée sur Wikipedia et je cite une partie de celle-ci. En revanche, ce que vous citez ne fait pas partie de la définition, cela n'a donc strictement aucune valeur.

            • [^] # Re: Quel et le but ?

              Posté par  . Évalué à 0.

              Si je pinaillais je te demanderai pourquoi tu n'as pas cité l'Open Source Initiative (OSI), source primaire de la "définition", puisque tu considères la source secondaire comme sans valeur: doit-on dévaloriser tout contenu publié en première main par Wikipedia ? Vaste sujet ...

              La définition de l'OSI n'engage que l'OSI: si tu considères qu'elle fait loi, libre à toi.

              De manière concrète, les mots ont un sens, et je traduis "open source" par "source accessible": c'est ma "définition".
              En ce qui me concerne, ce qu'en fait l'OSI n'est qu'une interprétation parmi d'autres.
              Selon mon interprétation, la question de savoir à qui ces sources doivent être accessibles n'est pas contenue dans la dénomination "open source". Cela semble aussi être le cas des personnes qui ont contribué à l'article de Wikipedia que tu as cité puis dévalorisé. Cette question trouvera sa réponse dans les éléments complémentaires de la licence qui confère son caractère "open source" au logiciel associé.

              J'ai indiqué dans un commentaire ci-dessus dans quel contexte je posais la question initiale, mais celui-ci est maintenant caché de la vue de tous par un incorrigible moinsseur qui ne semble pas comprendre la signification du mot "inutile".
              Dans ce contexte, les personnes acceptant de ne pas diffuser le code source obtiennent le droit d'utiliser, étudier, modifier et améliorer le logiciel.

              En me relisant je m'aperçois que cela ressemble de fortement à un accord de confidentialité. Je te concède alors que si la lettre est respectée, on s'éloigne de l'esprit.

              Pour le reste, je te souhaite une très belle érection lors de ton prochain moinssage, et te remercie d'avoir apporter une réponse constructive à la question initialement posée.

              • [^] # Re: Quel et le but ?

                Posté par  . Évalué à 1.

                pour la forme, ce qui m'a piqué les yeux après avoir validé:
                demanderai => demanderais
                apporter => apporté

  • # j'ai rien lu mais

    Posté par  (site web personnel) . Évalué à 6.

    J'ai pas lu la moitié de ton journal et aucun des commentaires mais ctrl-f me dit que personne n'a cité snowdrop (made in lcamtuf): http://lcamtuf.coredump.cx/soft/snowdrop.tgz

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.