Checker la presence d'un morceau de code à la volée?

30 views
Skip to first unread message

ali_o_kan

unread,
Mar 29, 2013, 9:54:16 AM3/29/13
to fc...@googlegroups.com
Hello, 

On vient de me poser une colle, et après une rapide recherche sur le Net, je n'ai rien trouvé de concluant…
La question est : comment checker si un swf contient un morceau de code précis? Et pour corser un peu le tout, ça doit fonctionner de l'AS1,2,3.

Idéalement, la détection se ferait à partir d'un player en Flash qui charge le swf, mais une solution backend pourrait faire l'affaire.
Alors, je sais qu'en théorie ça doit être faisable en jouant avec le bytecode; mais là sans un minimum de support, ça sort de mes capacités.

J'ai bien trouvé des solutions à base de décompilateur, mais je ne vois pas comment je pourrai les utiliser à la volée.

Toutes les pistes sont les bienvenues !

Bon week-end,
Laurent

ekameleon

unread,
Mar 29, 2013, 9:58:08 AM3/29/13
to FCNG
Hello :)

la bonne question c'est avant tout ... pourquoi faire ? C'est comme vouloir protéger du code javascript.. Cela sert à rien !

Si on veut entièrement protéger du code ou une appli faut le faire dans son ensemble avec de l'encryption, du code côté serveur, etc....

Après si on veut juste voir si on a pas était copié... bah c'est comme pour tout c'est un travail où faut beaucoup d'argent...

++


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes FCNG.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse fcng+uns...@googlegroups.com.
Pour envoyer un message à ce groupe, adressez un e-mail à fc...@googlegroups.com.
Visitez ce groupe à l'adresse http://groups.google.com/group/fcng?hl=fr .
Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .
 
 

Laurent Deletelaere

unread,
Mar 29, 2013, 10:26:17 AM3/29/13
to fc...@googlegroups.com
Rien de tout ça.
C'est pour automatiser une validation de modules Flash, vérifier que le
morceau de code genre "clickTAG" est bien présent.

++

On 29/03/13 14:58, ekameleon wrote:
> Hello :)
>
> la bonne question c'est avant tout ... pourquoi faire ? C'est comme
> vouloir protéger du code javascript.. Cela sert à rien !
>
> Si on veut entièrement protéger du code ou une appli faut le faire dans
> son ensemble avec de l'encryption, du code côté serveur, etc....
>
> Après si on veut juste voir si on a pas était copié... bah c'est comme
> pour tout c'est un travail où faut beaucoup d'argent...
>
> ++
>
>
> Le 29 mars 2013 14:54, ali_o_kan <l.deke...@gmail.com
> <mailto:l.deke...@gmail.com>> a écrit :
>
> Hello,
>
> On vient de me poser une colle, et après une rapide recherche sur le
> Net, je n'ai rien trouvé de concluant…
> La question est : comment checker si un swf contient un morceau de
> code précis? Et pour corser un peu le tout, ça doit fonctionner de
> l'AS1,2,3.
>
> Idéalement, la détection se ferait à partir d'un player en Flash qui
> charge le swf, mais une solution backend pourrait faire l'affaire.
> Alors, je sais qu'en théorie ça doit être faisable en jouant avec le
> bytecode; mais là sans un minimum de support, ça sort de mes capacités.
>
> J'ai bien trouvé des solutions à base de décompilateur, mais je ne
> vois pas comment je pourrai les utiliser à la volée.
>
> Toutes les pistes sont les bienvenues !
>
> Bon week-end,
> Laurent
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google
> Groupes FCNG.
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> fcng+uns...@googlegroups.com
> <mailto:fcng%2Bunsu...@googlegroups.com>.
> Pour envoyer un message à ce groupe, adressez un e-mail
> à fc...@googlegroups.com <mailto:fc...@googlegroups.com>.

ekameleon

unread,
Mar 29, 2013, 10:28:46 AM3/29/13
to FCNG
Flash player ou sur mobile ?

ok je vois.. beaucoup de library alors pour juste valider la présence d'un module ? C'est assez lourd d'implémenter un parseur ABC... 

PS : pourquoi AS1 et AS2 qui code encore en AS1 ou AS2 ? Perso je refuserai le taf si le target reste là dessus...

++

GOABONGA

unread,
Mar 29, 2013, 10:36:45 AM3/29/13
to fc...@googlegroups.com
Je ne veux pas dire de bêtises, mais le problème c'est que le bytecode n'est pas toujours le même pour la même action .... 

exemple : 
var i:int = 0; for(;i<10;i++) ... 
et 
for(var i:int .... 

non ?

Memmie Lenglet

unread,
Mar 29, 2013, 10:43:36 AM3/29/13
to fc...@googlegroups.com, GOABONGA
Je pense il pourrai suffire d'un check simple du dictionnaire de chaine
de caractères (dans le bytecode), vérifier si le nom de la fonction est
bien présent (mais ça veux pas forcément dire qu'il est utilisé).

Après, sinon il faut vérifier le code logique, ce qui doit pas être une
mince affaire...

Memmie Lenglet
http://memmie.lenglet.name
mem...@lenglet.name
+33666122999

Le 29/03/13 15:36, GOABONGA a écrit :
memmie.vcf

ekameleon

unread,
Mar 29, 2013, 10:45:22 AM3/29/13
to FCNG
Non mais ajouter un tag dans le swf au niveau de son bytecode c'est tout à fait possible sans chercher à lire le code précisément... ensuite suffit de voir si le tag de version est à jour ou pas...

Idem tu peux mettre dans le swf une image qui a un tag binaire spécifique  (une image vide et de 0px par 0px) et du coup t'en servir pour savoir si le swf est à jour ou pas...

++

Cédric Muller

unread,
Mar 29, 2013, 11:32:34 AM3/29/13
to fc...@googlegroups.com
Hello,

Il y a une solution de barbares envisageable:
1) tu acceptes le module, mais le 'tag' pour une validation avant d'être envoyé sur la plateforme (en production)
2) tu charges le modules avec un SWF de test (niveau serveur, procédure automatique) qui regarde si la fonction clickTAG est présente, si oui ce SWF de test envoie une requête au serveur qui valide le module (procédure à étendre pour contrôler plusieurs méthodes et/ou variables)
3) le module est maintenant disponible

Je sais, je sais. C'est du hack. Mais Flash, c'est aussi du hack. Et par la même occasion, cette solution de rigolo a le mérite de ne même pas devoir décompiler quoique ce soit, et elle ne peut pas être moins chère que ça (j'imagine ...)

++
Cédric
> <memmie.vcf>

Cédric Muller

unread,
Mar 29, 2013, 11:35:16 AM3/29/13
to fc...@googlegroups.com
C'est plus ou moins réaliste en fait. Mais j'ai déjà usé de cette technique pour un système sur lequel nous avions travaillé. Au final, le 'SWF de test' était le SWF qui permettait à l'utilisateur de faire l'upload vers le serveur: si le swf à uploader ne contenait pas les bonnes méthodes (interface de base), alors le bouton 'upload' n'était pas activé.

++
Cédric

ekameleon

unread,
Mar 29, 2013, 11:38:14 AM3/29/13
to FCNG
Plus simple sinon... utilisation des namespaces en AS3...

Si tu as le namespace présent dans l'application bah tu utilises des classes définies avec ce namespace, sinon pas de module.

A noter que tu peux du coup créer ton application avec toute sorte d'interfaces... et changer le contenu comme tu veux avec des classes qui implémentent les interfaces de l'appli mais définies dans des namespaces précis...


Reste que sur ta question il y a tout de même un truc qui me cloche... nous manque trop d'infos pour savoir si en fait le concept est bon ou pas... en général les modules on les charge avec des swf externes non ? Suffit de vérifier si le swf existe... si on parle d'un seul swf depuis le début, je pige mal l'intérêt vu que la mise à jour dans tous les cas remplace tout le bytecode...

Ou alors ta solution est basée sur un player swf qui charge d'autres swf ? Ou alors c'est un projet AIR et du coup là encore on peut gérer des tas de stratégies différentes selon les besoins sans avoir à regarder dans le bytecode des swfs...

++

YopSolo

unread,
Mar 30, 2013, 5:52:23 AM3/30/13
to fc...@googlegroups.com
Il y a un super outils qui s’appelle http://www.swfwire.com/
il permet de lire le header du swf pour connaitre sa version et surtout il y a un lecteur de tagABC

Le projet est en AS3 et son code est ouvert, tu y trouveras très certainement des réponses.

ali_o_kan

unread,
Apr 8, 2013, 6:58:55 PM4/8/13
to fc...@googlegroups.com
Merci pour vos retours! Je vais gratter du côté de swfwire. 

@Eka, Je ne peux malheureusement rien imposer sur la création des swf à tester. Ils peuvent venir de partout et être codés dans toutes les versions d'AS. C'est vraiment comme si je voulais valider le fait que le clickTAG d'une banner de pub soit bien implémenté dans un swf. 

Je vous tiens au jus si j'arrive à quelque chose ;)

Bonne soirée, 
Laurent

ekameleon

unread,
Apr 9, 2013, 1:23:21 AM4/9/13
to fc...@googlegroups.com
C'est l'intérêt en principe de concevoir une API avec interfaces et namespces pour tous :)
--

Ejoe

unread,
Apr 9, 2013, 11:28:22 AM4/9/13
to fc...@googlegroups.com
Salut, Ali_O_Kan,
je ne sais pas si j'ai bien compris la problématique, mais si ton but est d'être sur d'avoir le bout de code inclus dans ton swf, pourquoi ne pas l'intégrer quoi qu'il arrive? En gros tu écrases l'écrit à chaque fois, comme çà tu es sur de l'avoir (au pire, çà écrasera les mêmes variables/objets/fonctions, mais c'est pas bien grave)?
Tu as plusieurs manières de faire, j'avais utilisé un système pour faire quelquechose de plus ou moins ressemblant en scriptant le code d'intégration du swf il y a quelques années.
A l'époque j'instanciais un loadmovienum à partir du javascript pour ajouter un swf qui allait contrôler que tout allait bien et éventuellement changer une variable.
Aujourd'hui tu as une interface un peu plus "classe" pour le faire, notemment via JQuery (un truc du genre var movie = getFlashMovie('my_movie_name');).
Tu pourrais :
A. via JQuery checker que la fonction ou les variables existent
B. Loader un swf dans ton swf qui va faire le travaille

M'enfin tout çà reste théorique, mais çà avait marché pour moi il y a quelques années.

Ai-je bien saisi ta problématique ou suis je complètement à côté de la plaque?
Comme le dirais Zwetan, c'est plus simple à comprendre quand on a un bout de code... ;-)

Ejoe

Le vendredi 29 mars 2013 14:54:16 UTC+1, ali_o_kan a écrit :

zwetan

unread,
Apr 9, 2013, 12:03:01 PM4/9/13
to fc...@googlegroups.com
salut,

alors reponse super en retard =)

possible mais va etre un peu compliqué

1) pour trouver du string dans le SWF

methode propre: scanner le bytecode du SWF pour trouver le poolinfo contenant les strings
voir abcdis

methode gros bourrin: dans le bytearray lire direct le UTF/UTF8 et faire une simpel recherche de strings

2) pour trouver des signatures de code

c'est en 2 partie

a) depuis le source compiler et generer la signature

par ex: utiliser asc ou mxmlc en ligne de commande pour generer un SWF ou ABC

b) trouver la signature dans un SWF
en gros il faut scanner tous les tags du SWF et trouver les tags marqués "DoABC" et "DoABC2"

une fois dans les tags DoABC, c'est un search binary pour trouver la signature identique que celle générée

alors oui il y a plusieurs maniere d'ecrire le meme code mais pour trouver un "virus"
ou "vilain pas beau code" ca marche

a une époque lointaine j'avais proposé ca a DoubleClick mais ils ne me consideraient pas
comme un vrai developeur alors je leur ai dis d'aller se faire cuire un oeuf

voir

pour la base du scanning d'un SWF
y a d autres code sur internet de Claus Wahlers (as3swf), as3-commons et surtout abcdis
qui sont bien plus avancés

voili voilou
zwetan

ps: si y a une boite interesser par ca je suis dispo en freelance 1 jour par semaine ;)

zwetan

unread,
Apr 9, 2013, 12:07:07 PM4/9/13
to fc...@googlegroups.com
tu peux aussi faire un emulateur du "flash player" basé sur tamarin

voir ici

>>>>>     <mailto:fcng%2Bun...@googlegroups.com>.
Reply all
Reply to author
Forward
0 new messages