Jump to content
Sign in to follow this  
BnK

SwishMax - Peut-on proteger nos swf ?

Recommended Posts

Bonjour,

Actuellement en pleine réflexion concernant une problématique pourtant simple, je me tourne vers vous :)

Le but est de proposer de petits simulateurs à mes clients pour qu'ils puissent les proposer sur leurs sites internet. Jusque là, aucun problème. J'ai développé les simulateurs sous SwishMax.

Le problème, c'est que pour disposer de ces simulateurs, il faut payer une location et si celle-ci n'est plus active, je devrais pouvoir couper l'accès au service -ce qui semble logique- et je ne sais vraiment pas comment faire.

J'ai trouvé plusieurs réponses :

A- Ajouter dans l'animation un chargement d'une page PHP présente sur mon serveur et interrogeant ma base SQL pour savoir si le client a payé ou non. Problème, il existe des dé compilateurs...

B- Créer l'application en JAVA (ce que je ne maitrise pas encore d'ailleurs ...) est-ce comme le Javascript, s'en rapproche-t-il ?

Merci de votre aide :smartass:

Share this post


Link to post
Share on other sites

Note que je ne connais pas swish, uniquement flash (c'est +/- pareil non ?).

Que ce soit en java ou en swf, il existe des décompileurs. Cependant, la compilation swf est un peu minable et ce n'en est pas vraiment une (noms des variables conservés, même les commentaires...c'est dire si on peut utiliser le terme "compilation" concernant le swf).

Quoi que tu fasses, tu risques potentiellement d'être copié ou floué, mais il me semble qu'une requête sur une page php à partir de ton animation suffira à dissuader 99,5% des utilisateurs de tes applis. En réalité très peu décompileront, et encore moins arriveront à recompiler si tu laisses un grand flou sur le code qui fait cette requête http (nommage pourri, code compacté, appels bidons etc.), tu en dissuaderas 99.9%...

Le jeu vaut il réellement la chandelle d'aller si loin, sachant qu'une personne déterminée y arrivera, et ce quoi que tu fasses ?

Un autre solution (j'y pense en vitesse) serait d'inclure un swf de ton serveur comme bibliothèque externe, ou même d'effectuer les traitements chez toi avec soap (ce qui semble le plus sécurisé).

Share this post


Link to post
Share on other sites

Ce que dit SStephane n'est pas faux concernant la dissuasion que représente la décompilation pour les utilisateurs du dimanche. Mais le problème reste le même. Car il suffit d'un seul pirate pour déplomber ton logiciel et le mettre en partage sur des sites comme rapidshare ou en P2P.

Il faut protéger, c'est certain, et parfois il faut ajuster le prix pour que le jeux du piratage ne soit pas rentable (je sais que c'est pas toujours possible). En tout état de cause, il faut regarder régulièrement les sources de téléchargement "pirate" de ton logiciel et envoyer un courrier demandant le retrait dès que tu aperçois une copie pirate. Là encore c'est pas toujours possible.

Share this post


Link to post
Share on other sites

Bonjour et merci pour vos réponses.

J'ai bien noté que de toute manière, la sécurité 0 n'existe pas. C'est bien dommage.

Je vais donc faire le choix d'appeler une page PHP (sur mon serveur) depuis l'animation SWF présente sur les sites de mes clients. D'ailleurs, question subsidiaire, est-ce qu'en flash il est possible d'appeler une page PHP distante car sinon je risque d'avoir des soucis... ne pouvant bien évidemment pas donné la page PHP avec l'animation lol

Bobo, as-tu déjà testé l'encryptage? Est-ce que les résultats sont satisfaisants ?

SStephane >

Un autre solution (j'y pense en vitesse) serait d'inclure un swf de ton serveur comme bibliothèque externe, ou même d'effectuer les traitements chez toi avec soap (ce qui semble le plus sécurisé).

là, il faut m'expliquer plus en détails. :)

Merci encore

Share this post


Link to post
Share on other sites

Tu peux effectuer des requêtes http sur des pages php, aucun souci; je te renvoi vers la classe URLRequest (ou URLLoader) en AS3 et ainsi enregistrer les sites qui ont droit d'utiliser ou nom ton programme dans une bdd.

Au delà de ça, flash permet de charger des swf externes, et de les utiliser comme bibliothèque (comme un genre de dll, en gros), rien ne t'empêche d'héberger cette/ces bibliothèque sur ton serveur et de gérer l'accès à ces fichiers.

Quel est le style d'appli (jeux, calculette/formulaire, widget) ?

Si les calculs ne sont pas extraordinaires, fournir un webservice qui les gère est une solution approchant le risque 0 puisqu'ils seraient effectués par un langage serveur.

Share this post


Link to post
Share on other sites

Je vais regarder ce que je trouve du coté de URLRequest mais cela me semble difficile quand même enfin je vais voir :)

il s'agît de simulateurs web. Pour le moment peu complexe du fait de la nouveauté du service. Par la suite, il s'agira plus d'un logiciel que d'un simple simulateur. Il me faudra alors un risque proche de 0 pour le diffuser sur le web.

Share this post


Link to post
Share on other sites

Slt,

Bobo, as-tu déjà testé l'encryptage? Est-ce que les résultats sont satisfaisants ?

Oui j'ai déjà testé et en plus je peux confirmer que ca tourne avec des swf version swishmax, je n'utilise que ça pour générer du flash (swishmax)...

L'inconvénient c'est surement que cette protection ne peux jamais durer, car les décompileurs de swf dans le futur pourront surement tenir compte de cet encryptage. Mais en général, si tu prends la dernière version de swfencrypt, tu seras quand même tranquille pour un bon bout de temps.

Une autre chose que tu pourrais aussi mettre en place, c'est vérifier (via swishscript) l'url courante pour le fichier swf, et si elle est différente du domaine ou tu est censé l'heberger, alors tu ne démarre pas l'anim.. (par exemple faire une scene avec un message d'erreur, et si le domaine est different de tondomaine.com alors tu l'envoi sur cette scene...)

Voilà ;)

b0b0

Share this post


Link to post
Share on other sites

Bonjour BoBo, encore merci pour tes réponses.

Je vais commencer à travailler sur ça et voici ce que j'en retiens :

- Création du SWF avec uniquement les animations. Les calculs seront effectués depuis des pages PHP présentes uniquement sur mon serveur.

- Chaque SWF contiendra un ID correspondant au client.

- Les pages PHP controleront à chaque appel si l'id_client est différent de VIDE & si l'accès est bien accordé (paiement effectué).

Option facultative : Encrypter le fichier flash (bien qu'avec la méthode retenue, cela semble avoir moins d'intérêts ?)

Ainsi, je donnerai un SWF à chacun de mes clients qu'ils devront mettre sur leur hébergement. Celui-ci communiquera avec le notre.

QU'en penses-tu ?

Est-ce que ta proposition de vérifier le domaine ne devient pas inutile avec la méthode retenue ?

Ben

Share this post


Link to post
Share on other sites

Slt BnK,

en effet, le fait de charger des fichiers PHP sur un serveur distant est une très bonne idée...Cependant, je pense qu'il est très important d'encrypter le fichier swf, afin d'éviter sa décompilation, sinon lors de la lecture du code, on peut trouver une parade beaucoup plus facilement (et éventuellement modifier l'ID client qui est dans chaque anim!).

Autre chose, le client peut modifier son fichier hosts et faire comme si il hébergeait ton serveur chez lui.... ainsi il peut étudier les réponses de tes fichiers PHP et les reproduire chez lui, ce qui lui permettrait d'utiliser tes swf avec son propre serveur... mais bon... c'est pas gagné (ca dépend de ce que retournent tes pages PHP)!

L'avantage de vérifier le nom de domaine sur lequel tourne le swf, c'est que si le client met le swf sur un autre serveur pour bidouiller (ou même en local) ou le décompiler, le swf refusera de tourner... On évite ainsi le bidouillage de la part du client.

Donc afin d'éviter "les bidouillages", personnellement je rajouterai un maximum de sécurités... Encryptage du swf pour éviter la décompilation, vérification du NDD au lancement de l'anim, et aussi chargement des fichiers distants...

Attention, je pense qu'il va falloir que tu joues avec un fichier crossdomain.xls afin de pouvoir charger des fichiers situées sur un autre serveur.A vérifier ;)

Voilà,

j'espère que cela t'aidera,

b0b0

Share this post


Link to post
Share on other sites

Merci pour tes réponses. J'ai déjà commencé le travail et sa avance plutôt bien. J'ai cependant une question.

La question porte sur les function que j'ai crée sous SwishMax, comment faire pour qu'elles n'y soient plus mais pour qu'elles soient dans PHP (je sais faire l'envoie / reception de variables). Finalement, quelle est la meilleure méthode pour ce type de "transfert" ? Si je laisse l'ensemble de mes fonctions et que je fais des appels à chaque fois, c'est certainement pas la meilleure solution car en décompilant, on retrouve le mécanisme bien que les formules ne soient pas à l'intérieur, le travail est déjà mâché !

Merci,

Ben

Edited by BnK

Share this post


Link to post
Share on other sites

bonsoir,

car en décompilant, on retrouve le mécanisme

d'où la nécessité d'encrypter le swf ;)

Sinon, pour que tes fonctions de calculs soient dans php et non swishmax, il va falloir les réécrire entièrement, mais façon php, et non plus swishscript (actionscript), je ne vois pas d'autres solutions à ce problème...

b0b0

Share this post


Link to post
Share on other sites

Hello,

Concernant l'obfuscateur d'as :

Développant énormément en as3 (j'ai peu pratiqué l'as2), j'avais jusqu'alors jamais constaté qu'il existait ce type d'outil pour as. Autant c'est déroutant pour l'as2 et ça fait bien son boulot (la page arborée fièrement sur leur site en est une illustration manifeste : http://www.amayeta.com/software/swfencrypt/#Content ), autant pour l'as3 lorsque tu codes objet et en externalisant, c'est purement et simplement inutile.

J'arrive à la même conclusion que l'auteur de ce topic http://flash.mediabox.fr/index.php?showtopic=84513 ça m'a plus ou moins rassuré tant mediabox est une source d'inspiration pour tous les dev flasheurs.

Récupérer le résultat avec php :

Énormément de solutions s'offrent à toi : requêtes http, webservice, socket... le plus simple étant une requête, le plus propre un webservice.

Le webservice te permettra de gérer les accès avec un crossdomain (et même un htaccess si tu as peur d'être floué dans un autre langage qu'as), ce qui n'est pas négligeable si tu accordes tes licences par domaine... et t'évitera de te soucier du :

le travail est déjà mâché !

Cela dit, je soutiens que c'est une perte de temps, je m'en tiendrai à la vérification au lancement de l'appli (et encore); à moins que la formule que tu utilises ne soit un truc à protéger, cela ne présente qu'un intérêt très moyen.

Share this post


Link to post
Share on other sites

Bonjour Stephane,

Pour te répondre briévement, oui la formule est ce que je dois protéger. si ce n'était que de l'animation, je ne mettrais aucune protection. Je ne tiens pas à travailler des heures pour que mes simulateurs soient efficaces et correctes pour que quelqu'un les utilisent aussi facilement en y passant que quelques minutes. Ainsi, j'aimerai que mes formules se trouvent sous PHP mais là j'ai du mal (non pas en PHP mais à trouver comment faire).

Autre point, qu'appelles-tu webservices ? Comment le mettre en oeuvre ?

merci

Share this post


Link to post
Share on other sites

Un webservice offre la possibilité d'instancier et de manipuler des objets à distance, quel que soit les langages qui communiquent en utilisant un protocole : SOAP , c'est parfaitement adapté à tes besoins.

J'avais écrit un article sur comment utiliser les webservice en AS3, tu as la source en bas, c'est très simple. Elle ne fonctionne pas dans la page car elle viole la sandbox, en local, tu n'auras aucun souci.

Pour mettre en place un server soap avec PHP, regarde du côté de nuSOAP en php4 (je crois que c'est le nom), ou de la class SoapServer en php5.

Si le webservice te parait trop "abstrait", tu peux aussi "requêter" un script php qui affiche uniquement le résultat (en utilisant URLLoader & URLRequest).

Share this post


Link to post
Share on other sites

Encore merci pour tes réponses et les liens. Je vais m'y attarder un peu. Autre question avant que je commence, n'aurais-je pas le même problème que si je fais comme ça :

1 Le SWF envoie un code (que j'aurai défini dans chaque simulateur pour chaque client) à PHP

2 PHP recherche d'où vient la demande (URL du POST) et défini si on a une réponse dans SQL pour URL + Code si oui on lance l'application

3 Appel du SWF

MOn petit 2, est-ce possible ? J'héberge le PHP sur mon serveur, celui-ci est appelé depuis X swf et il faut qu'il trouve d'où vient la requete ?

Thx

Share this post


Link to post
Share on other sites

Hello,

Inutile de tester au lancement de l'application, car de toutes façons, tu devras tester à chaque requête. Juste un truc, ne teste pas sur l'URL, c'est trop facile à spoofer, teste plutôt sur l'ip. Sinon bien sur que le 2 est possible !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...