Antivols pour vos animations

Votre chef-d'oeuvre est terminé. Vous avez utilisé des images géniales, des sons somptueux et tout votre savoir-faire en matière de Lingo. Vous voulez bien que le monde entier puisse admirer votre travail... mais que personne ne s'en empare.

Vous créez donc une projection, et vous y intégrez tous vos fichiers. Ou vous créez une animation et des distributions en format Shockwave (en prenant bien soin de garder des copies non protégées, n'est-ce pas ?). Voilà, vos sources sont inviolables... ou presque.

Attention aux fuites

Premier danger : qu'est-ce qui empêche une personne sans scrupules de copier votre animation Shockwave sur son propre site ?

Deuxième danger : il est possible de récupérer les acteurs et le scénario d'une animation protégée. Certes, un acteur script récupéré ne contient plus rien d'utilisable, mais les images et les sons se laissent facilement prendre.

Un voleur d'acteurs se sert d'une animation dans une fenêtre (MIAW) ouverte depuis Director. Je ne vous en dirais pas plus. Vous, vous n'êtes pas malhonnête...

Troisième danger : votre projection Director 7 a une faiblesse. C'est une faiblesse qui peut bien vous servir, mais une faiblesse quand même. Il est possible d'ouvrir la fenêtre des Messages et de l'utiliser comme dans le mode auteur de Director. Il est également possible d'éxécuter du Lingo entre le moment ou la projection est lancée et le moment où la première animation ne démarre. Ainsi, on peut créer un fichier texte qui fait état, étape par étape, de l'exécution du Lingo.

NomDeLaProjection.ini et Lingo.ini

Ceci vous permet de déboguer vos projections, et c'est donc une bonne chose. Mais une personne sans scrupules peut utiliser la même technique pour reconstituer vos scripts ou voler vos autres acteurs. Puisqu'il s'agit d'une technique par ailleurs honnête, en voici la recette.

Je cite un courrier d'Emmanuel Beuque sur Pistes-L :

  Il faut mettre un fichier texte à côté de ta projection, portant
  le même nom que la projection mais avec l'extension ".ini".
  A l'intérieur, en ce qui concerne la fenêtre de message, voici
  ce qu'il faut y mettre :
  [Settings]
  FullScreen=0
  MessageWindow=1
  Tu peux rajouter une ligne comme suit pour préciser le rectangle
  de la fenêtre de messages...
  MessageWindowRect=0 600 900 800

Vous pouvez également placer un fichier texte nommé "Lingo.ini" à côté de votre projection. Ce fichier peut contenir un gestionnaire "on startUp" qui s'éxécute avant toute autre ligne de Lingo de votre projection. Example :

  on startUp
    alert "Coucou !"
  end

Attention : si votre fichier "Lingo.ini" est mal conçu, il peut faire planter la projection.

Voler un URL

Maintenant que vous connaissez les dangers, voici des armes pour vous défendre.

Il est assez simple de brider votre animation Shockwave pour qu'elle ne fonctionne que sur votre propre site. Vous testez le "fileName" de votre animation. Si the fileName ne correspond pas à une adresse URL sur votre site, vous avertissez l'internaute de la superchérie, et vous l'emmenez faire un tour sur votre site à vous.

on startMovie
  case the runMode of
    "plugin":
      set pageAttendu   = "mapage.htm"
      set cheminAttendu = "http://www.mondomaine.fr/monsite/"
      set cheminActuel  = the moviePath
      -- cheminActuel est "" si le fichier a été placé sur un disque local
      -- et ouvert dans un browser 
 
      if not (cheminActuel starts cheminAttendu) then
        -- Isoler le nom de domaine et le repertoire
        set delimiteur to the last char of cheminActuel
        set the itemDelimiter to delimiteur
        set finChemin = the number of items of cheminAttendu
        if the number of items of cheminActuel > finChemin then
          set cheminActuel = item 1 to finChemin of cheminActuel&delimiteur
        end if
    
        alert "¬
Le site <"&cheminActuel&"> n'est pas autorisé à diffuser cette animation."&¬
RETURN&RETURN&"¬
Venez trouver la version originale à :"&RETURN&RETURN&¬
cheminAttendu
        gotoNetPage cheminAttendu&pageAttendu
        halt -- Sinon l'animation se déroule quand même.
      end if
  
      -- Si on arrive ici, c'est que l'animation se trouve au bon endroit
      alert "Bienvenue sur mon site !" -- Ou d'autres commandes
  end case
end

Pour tester, ouvrez l'animation antivol.dir qui a été "volée" d'une autre partie du site Director Hors Piste.

Entrer par la fenêtre

Le gestionnaire "on startMovie" n'est peut-être pas le premier qui est exécuté dans votre animation, mais c'est le premier gestionnaire dans un Script d'Animation qui permet de naviguer ou d'arrêter le déroulement de l'animation. Si votre animation est ouverte dans un browser, "startMovie" intervient avant que le mal soit fait.

Si quelqu'un essaie d'ouvrir votre animation protégée dans une fenêtre dans l'environnement auteur de Director, tous vos acteurs sont vulnérables bien avant que le gestionnaire "on startMovie" ne soit appelé.

Il s'agit donc de détecter si votre animation a été ouverte dans une fenêtre. Le gestionnaire "on openWindow" vous permet de le faire. Pour empêcher le vol de vos acteurs, il suffit de fermer la fenêtre qui vient d'être ouverte.

on openWindow
  case the runMode of
    "Author":
      if the serialNumber = "WDM"&702&"-"&12345&"-"&67890&"-"&10000 then
        -- Le numéro de série correspond au votre : vous avez le droit
        -- d'ouvrir votre propre animation dans une fenêtre.
      else 
        alert "Cette animation ne peut pas être ouverte par Director."
        forget the activeWindow
      end if
  end case
end

Pour tester, sauvegardez l'animation antivol.dir sur votre disque dur. (Il s'agit de la même animation que tout à l'heure. Cliquez sur le lien, puis gardez le bouton de la souris enfoncé. Un menu contextuel s'ouvrira. Choisissez l'option "Enregistrer ce lien sous..." ou équivalent).

Sur PC, assurez-vous que le fichier est réglé sur "Lecture seule". (Cliquez avec le bouton gauche de la souris sur son icône, puis choisissez "Propriétés" dans le menu contextuel qui so'ouvre. Cocher la case "Lecture seul"). Sur Macintosh, ceci n'a aucune importance.

Ouvrez l'animation dans Director (elle n'est pas protégée), puis cliquez sur le bouton "Infraction". Une nouvelle instance de l'animation s'ouvrira dans une fenêtre, puis se refermera aussitôt. Maintenant, remplacez le faux numéro de série par le vôtre, puis sauvegardez l'animation (en lecture seule, si vous êtes sur PC). Essayez encore : cette fois-ci la fenêtre restera ouverte.

Voler un numéro de série

J'ai utilisé un numéro de série inventé. Mais pourquoi est-ce que je l'ai enguirlandé avec des guillemêts et des esperluètes ? Parce que, si vous ouvrez une animation, même protégée, dans un traitement de texte (Word, BBEdit, ...) les chaînes de caractères restent lisibles. Voici un extrait d'une animation protégée (.dxr) ouverte dans un traitement de texte :

WDM702-12345-67890-10000
WDM---

... et le gestionnaire d'origine :

on proteger
  put "WDM702-12345-67890-10000"
  put "WDM"&702&"-"&12345&"-"&67890&"-"&10000

end

Une bonne nouvelle : si le fichier est converti en animation Shockwave, aucune chaîne ne reste lisible.

Pensez à utilisez cette technique également pour protéger les numéros de série de vos Xtras.

Notez que les zéros au début d'un numéro doivent être traités comme une chaîne de caractères et non comme des chiffres : "—00"&123 marche bien, mais "—"&00123 donne "—123", ce qui n'est pas l'effet attendu.

Cambrioler une projection

Pour protéger une animation dans une projection, il faut s'assurer que les éventuels fichiers "NomDeLaProjection.ini" et "Lingo.ini" n'ont pas été remplacés par d'autres qui ouvrent la fenêtre de Messages ou créent un traceLogFile. Si le fichier "NomDeLaProjection.ini" contient le mot "MessageWindow", il y a de bonnes chances qu'un espion est à l'oeuvre. De même si le fichier "Lingo.ini" contient le mot "traceLogFile".

Puisque le fichier "Lingo.ini" permet d'exécuter du Lingo, il faut également se prémunir contre le cambrioleur malin qui bricole une chaîne à partir des morceaux de texte anodin, puis exécute l'ensemble avec la commande "do ()".

Le script de protection est un peu long, donc je ne le détaille pas ici. Vous le trouverez à l'intérieur de l'animation antivol.dir que vous avez déjà eu l'occasion de découvrir. Regardez surtout le gestionnaire "on MauvaiseIntentions", qui est bien commenté.

Pour tester ses capacités, créez une projection qui intègre cette animation. Appelez votre projection "Essai.exe". Placez à côté de cette projection deux fichiers texte nommés "Essai.ini" (c'est-à-dire, le même nom que la projection) et "Lingo.ini".

Pour le texte de "Essai.ini" utilisez :

  [Settings]
  FullScreen=0
  MessageWindow=1

Pour le texte de "Lingo.ini" utilisez :

  on startUp
    set the traceLogFile = "EssaiTrace.txt"
    set the trace = TRUE
    put "-- Bienvenu dans EssaiTrace --"
  end

Placez FileIO Xtra dans un répertoire nommé "Xtras" juste à côté de la projection. Cet xtra est utilisé pour lire le contenu des fichiers "*.ini" avant de laisser la projection se dérouler.

Votre projection s'arrêtera aussitôt lancée. Retirer FileIO Xtra du répertoire "Xtras". La projection ne marche toujours pas. Testez avec une autre projection qui contient une animation différente. Insouciante, votre deuxième projection se lance sans hésitation. Pourtant, la fenêtre des Messages et the traceLogFile sont prêts pour vider votre projection de tous ses secrets.

Conclusion

Si la protection de vos données est importante pour vous, adaptez les techniques décrites ici pour défendre vos animations. Mais attention : je ne garantie pas qu'il n'existe pas d'autres failles. Si vous en trouvez, faîtes-le savoir à la communauté de développeurs Director. Mieux vaut connaître les dangers que de se fier aveuglément à une protection partielle.

Vous pouvez m'envoyer vos commentaires à james@director-fr.com. Vous pouvez avertir les autres abonnés de Pistes-L en écrivant à pistes-l@director-fr.com, et l'équipe Director de Macromedia en écrivant à wish-director@macromedia.com.

 

Remerciements

Merci à Michel Rousseau pour avoir posé la question qui a inspiré cet article, pour avoir mis à l'épreuve mes méninges et mes scripts, et pour y avoir comblé certains trous. Merci aussi à Emmanuel Beuque et à Cécile Adam pour leurs commentaires précieux.

 

 


Director Hors Piste - http://www.director-fr.com - Tous droits réservés. - (c) 1999 Director Hors Piste - Macromedia Director est une marque déposée de Macromedia - Contactez-nous!