Ecrire du bytecode directement dans Flash
Par -Alexandre LEGOUT aka LAlex- le mardi, septembre 16 2003, 10:17 - AS2 - Lien permanent
Robin Debreuil a trouvé un moyen d'écrire du code directement en ActionScript, et ce grâce à la fonction __bytecode__. Pour information, le bytecode est le code compilé qui fait partie du SWF. Elle est analogue à une fonction C qui permettait d'écrire de l'assembleur dans du code C (j'avais un copain de promotion qui n'utilisait que ca en cours de C, c'en était stressant ! :D)
Robin nou donne un exemple de code (enlever les retours à la ligne) __bytecode__("88240002006900486F6C7920736869742C206279
7465636F646520696E2074686520666C612100960B000800060000
0000000000003C96020008001C960500070A00000048129D020015
00960200080126960400080008001C501D990200D6FF00");
Cette instruction pourrait amener vers des brouilleurs de code trés puissants, qui protegeraient de manière plus efficace le code dans les fichiers .fla ! ![]()
Commentaires
C'est terrible ce truc. J'ai jamais fait de C. Tu pourrais être plus explicite sur ce que c'est ce truc stp ? Comment arrive-t-on à passer du code as à cette chaine ce caractère ? Et comment revenir au code as à partir de cette chaine ?
Il faut pour cela étudier les spécifications du format SWF disponibles à l'adresse : http://www.macromedia.com/software/flash/open/licensing/fileformat/license.html (disponible uniquement pour la version 6 pour l'instant). Macromedia attend en général que le nouveau Flash soit bien implanté avant de donner les spécifications du nouveau format SWF : pas fous !
Ces spécifications expliquent comment compiler de l'ActionScript en bytecode...
On commence à arriver dans le fond du sujet. Pourrons nous du coup ajouter des fonctionnaltés à une animation FLASH ?
Pour ce qui est de la sécurité, là aussi cela peut être utile mais je ne considère pas que cela doit être appliqué à tout le code, juste des liens par exemples pour des chargements dynamiques ... Pour moi un mec qui casse un swf réalisé complètement en POO AS2 ... qui en général est composé d'un code de plusieurs milliers de lignes ... je vois déjà le temps que mettra un développeur pour traduire et comprendre parfaitement tout le code pour le réutiliser par lui même. Donc à voir ...
Biensûr un encodeur d'AS avec ce type de résultat numérique c'est un +

... faudra voir aussi avec Royal par exemple si on peut passer du code dans des XML encodé de la sorte
bye
Attendez, si vous décompilez dans asv le __bytecode__ d'exemple vous avez clairement :
var i = 0;
while (i < 10) {
trace ("Holy shit, bytecode in the fla!");
i++;
}
;
Donc je vois pas trop en quoi vous pouvez protéger le code.
Et pour créer une simple ligne comme celle-là, il faut déjà s'arracher les cheuveux non ?
Imagine que tu as une petite application qui te permet de prendre tes .As et d'en faire des fichiers codé avec en + une clé de cryptage.
Coté serveur tu as un script (PHP ou autre...) qui décode tes as (clé de cryptage) et parse le tout vers flash qui génère à la volée son contenu en fonction de cela... du coup, en + d'avoir tout le contenu du code ors du SWF... tu as également un super codage coté serveur. Moi je vois par contre une énorme perte de temps ... c'est pour cela que je pense que c'est valable que pour des éléments précis dans le site. Ce type de protection avec l'utilisation des sécurité allowDomain de flash. C'est déjà un bon pas vers des sites sécurisés en flash visant du e-commerce ou autre... (Enfin faut tester...)
bye
Attention eka : il n'est pas possible d'utiliser des valeurs dynamiques avec __bytecode__ ... :? Ca veut dire qu'on ne peut pas lui passer une variable, parce que l'instruction est chargé au moment de la compilation, pas à l'execution ... :roll:
Alors j'avais mal compris l'utilisation ... oui dans ce cas cela ne sert pas à grand chose du coup, cela revient à bosser avec les ASNative ?
Cela peut servir pour des optimisations que fait actuellement flasm ... pour la gestion de gros tableaux, ou des tris. En fait, le compilo de Flash oublie d'optimiser certaines choses. Si on connait le byteCode correspondant à l'instruction optimisée, on peut l'utiliser sans avoir recours a flasm ...
comment utiliser flams et ou le trouver ?? merci d avance
google ?
Fil des commentaires de ce billet