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.
|