Derniers Commentaires

  • TiBaker-974: Heu… lol ta parfaitement raison Julien c’est pour ça je suis déçus mais bon on pourra...
  • Julien: Hey, Salut. Je viens de tomber sur ton post avec retard et après tout c’est pas bête à la base comme...
  • usual: Effectivement le paramètre transparent empêche l’utilisation de la molette au sein d’un flash....
  • jean-michel: merci matthieu j’ai déja mtasc et je suis depuis longtemps sur la mailing list je connais haxe...
  • jean-michel: salut j’essaie de faire fonctionner avec les classe FP8 et FP9 je pense que c’est faisable...

Freelance – Protéger votre application flash

Freelance - Protéger votre application flash

En tant que Freelance, vous développez des applications flash pour des clients : SSII, PME, TPE. Dans la majorité des cas, vous êtes payés après avoir développé le produit fini.

Problème

Il arrive (très rarement heureusement) qu’un de vos client décide de ne pas vous payer pour le travail rendu. Il utilise pour cela des prétextes plus ou moins crédibles…

Pour éviter de ce genre de problème, j’utilise une astuce toute simple à mettre en place avec Flash ActionScript 1, 2 ou 3 ou haXe également.

Protection du swf

Il suffit de fournir comme convenu l’application terminée et entièrement fonctionnelle à votre client. Mais vous ne lui livrez le code source uniquement après le paiement.

Et vous protégez votre code de la façon suivante :

  • Sur la 1ère frame, vous testez si l’application est autorisée ou non à se lancer. Si oui, elle fonctionne correctement, si non elle affiche un message à votre convenance (par exemple : problème d’utilisation de la licence non valide…).
var bAutorize:Boolean = Protect.isAllow(2009, 5, 17);
if(bAutorize)
{
// votre code d'exécution de l'application
}
else
{
// afficher un texte expliquant la situation et bloquer l'application
// var sTxt : String = "Problème sur la licence d'utilisation!";
}

Dans la classe de gestion de l’autorisation de lancement de l’application, vous fixez une date limite au delà de laquelle l’application flash se bloque. C’est à dire, jusqu’au 17 mai 2009, l’application flash fonctionne correctement. Puis après cette date, elle se bloque en affichant votre message d’erreur.

Si votre client ne vous paye pas, il va être bien ennuyé avec une application flash qui ne fonctionne pas et qui lui affiche de surcroit un problème de paiement de licence.

Le client n’a aucune possibilité de faire fonctionner l’application s’il ne possède pas le code source!

La seule solution pour que le flash s’affiche est que l’internaute modifie la date de son ordinateur en la reculant de quelques années. Mission irréaliste dans le cas d’une agence web…

Avec cette astuce, je peux vous assurer que vous serez payé à chaque livraison et en cas de retard de paiement, j’espère que dans votre contrat, vous avez prévu des pénalités que vous n’aurez aucun mal à réclamer à votre client vu l’urgence de la situation.

Code source AS3

Et voici le code source de la classe AS3 que j’utilise régulièrement :

package com.utils 
{
 
	/**
	 * Use to protect your application with a limit date for usage.
	 * 
	 * 	@usage :
		var bAutorize:Boolean = Protect.isAllow(2008, 9, 21);
	 * 
	 * 
	 * @class Protect
	 * @author Matthieu
	 * @version 0.1
	*/
	public class Protect 
	{
		/**
		 * CONSTRUCTOR
		 * @usage   
		 * @return  
		 */
		public function Protect() {}
 
		/**
		 * Stop execution of the application flash if date isn't correct.
		 * 
		 * @see     
		 * @param   
		 * @return  
		 */
		public static function isAllow(nYear:int, nMonth:int, nDay : int) : Boolean 
		{	
			var oDate:Date = new Date();
 
			if(nYear < oDate.getFullYear())	return false;
			if(nMonth < (oDate.getMonth()+1) ) return false;// 0 pour janvier, 1 pour fevrier
			if(nDay < oDate.getDate() && nMonth==oDate.getMonth()+1) return false;		
			return true;
		}
 
		/**
		 * Returns the string representation of this instance.
		 * @return the string representation of this instance
		 */
		public function toString() : String 
		{
			return "[object Protect]";
		}	
 
	}// end of class
}

Conclusion

Je trouve cette astuce simple à mettre en ouvre et très pratique.
Et vous comment protégez vous vos applications en tant que freelance ?

Attention : cette astuce n’empêche aucunement la décompilation de votre swf.

Partagez cet article :
  • Digg
  • del.icio.us
  • Facebook
  • Technorati
  • MySpace
  • LinkedIn
  • Wikio FR
  • Yahoo! Buzz
  • Netvibes
  • Google Bookmarks
  • PDF
  • email
  • Print

Articles sur le même sujet :

  1. Utiliser des polices partagées dynamiquement en AS3, HAXE et AS2

6 commentaires pour Freelance – Protéger votre application flash

  • frederic

    salut,
    excellente initiative de mettre ce genre de code en ligne. de nombreux clients de payent pas ! ou barratine une fois le travail terminé.
    néanmoins, pour le code as2, je n’arrive pas du tout à le mettre en place.

    var bAutorize:Boolean = Protect.isAllow(2009, 5, 17);
    if(bAutorize)
    {
    // votre code d’exécution de l’application
    }
    else
    {
    sTxt.text = « Expiration de la licence d’utilisation! »;
    }
    tel quel, dans la 1ere image de la timeline, c’est toujours expiré. pourrais tu m’aider a faire fonctionner tout ca? ou pourrais tu y joindre un fla?
    merci.
    f

  • Salut,

    Voici le code source de la classe Protect pour la version AS2, le fonctionnement est identique à la version AS3.

    Tu as juste à utiliser le code de l’exemple sur la 1ère image de la timeline dans un fla.
    Vérifie si tu importes bien ta classe au moment de la compilation du fla.
    Vérifie si l’heure de ton pc est correcte. Effectue un trace de la date (var oDate:Date = new Date();) pour vérifier ce que te renvoie flash.

    class com.utils.Protect
    {

    /**
    * CONSTRUCTOR
    * @usage
    * @return
    */
    private function Protect()
    {}

    /**
    *
    *
    * @see
    * @param nYear : year limit
    * @param nMonth : month limit
    * @param nDay : day limit
    * @return true if it’s good
    */
    public static function isAllow(nYear:Number, nMonth:Number, nDay:Number):Boolean
    {
    var oDate:Date = new Date();

    if(nYear > oDate.getFullYear()) return true;
    if(nMonth < (oDate.getMonth()+1) ) return false;// 0 pour janvier, 1 pour février
    if(nDay < oDate.getDate() && nMonth==oDate.getMonth()+1) return false;
    return true;
    }

    /**
    * Returns the string representation of this instance.
    * @return the string representation of this instance
    */
    public function toString() : String
    {
    return « [object Protect]« ;

    }
    }

  • Bonjour ,
    merci pour votre code très sympa mais pour question de décompilation du .swf il y a pas un astuce pour que quand ca décompile le fichier et illisible ????!! Ça serait bien ça!

  • Bonjour,

    A ma connaissance, il n’existe pas de solution 100% fiable et optimisée pour empêcher la décompilation des swf.

    Ensuite plus les projets sont développés avec une analyse poussée (séparation des éléments graphiques, audio, xml… dans des swf différents) plus il est difficile de tout décompiler pour récupérer le code source.
    Il devient plus facile de développer l’application soit même.

  • Julien

    Hey, Salut.

    Je viens de tomber sur ton post avec retard et après tout c’est pas bête à la base comme astuce…
    Malheureusement comme tu le dit Matthieu, avec ce tour de main, une agence malhonnête (et renseignée !) peut aisément décompiler ton code via sothink décompiler ou autre en moins de 50s. (Période de licence expirée ou non)… Et dans ce cas bye bye le paiement. Essaye ce maudit soft sur tes productions ! Tu vas voir il fait froid dans le dos. Il y a même une extension FF afin de « grabber » plus facilement les fichiers.

    Bref : Aïe Aïe Aïe !!

    La seule alternative presque sérieuse dans la protection des travaux swf reste l’obfuscation afin de rendre ton code plus délicat à déchiffrer et à suivre en cas de reverse engineering… Des softs sont même spécialisés en ce domaine, le leader est SecureSWF.

    Dur dur d’être un honnête programmeur AS
    ++

  • TiBaker-974

    Heu… lol ta parfaitement raison Julien c’est pour ça je suis déçus mais bon on pourra j’aimai protéger a 100% son code mais on peut crée des difficulté pour les gents qui de bosse pas!! et qui vole simplement…

    Merci quand même lol!!! Pour ton lien je vais le voir et te dirais ca @++

Répondre

 

 

 

Vous pouvez utiliser ces balises HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">