Una pequeña biblioteca de Python 2 que proporciona:
La intención original era proporcionar un transpilador del código AS3 compilado a LLVM IR.
Hay uno o dos en otros idiomas, pero la mayoría han bitroted, o estaban demasiado incompletos para analizar mis archivos de destino.
La serialización de regreso a los archivos SWF debe ser relativamente sencillo de agregar.
pip install swiffas
Eche un vistazo a example.py : imprime una lista de desmontaje para todo el código de ActionScript que encuentra en una etiqueta doabc.
En cualquier caso, aquí hay un resumen rápido:
import swiffas
from swiffas import swftags
# parse the SWF file
p = swiffas . SWFParser ()
with open ( 'example.swf' , 'rb' ) as f :
p . parse ( f )
print 'has' , p . properties . frame_count , 'frames'
print 'has' , len ( p . record_headers ), 'records; parsed' , len ( p . tags ), 'of them'
# get each exported AS3 program in the SWF file
as3_exports = filter ( lambda x : isinstance ( x , swftags . DoABC ), p . tags )
# print some information about them
for as3_export in as3_exports :
as3 = swiffas . ABCFile ( as3_export . bytecode )
print as3_export . name , 'has' , as3 . method_count , 'methods'
# print all the strings used in the program
print ' n ' . join ( map ( lambda sinfo : sinfo . value , as3 . constant_pool . strings )) La estructura de cada objeto SWF y AVM2 analizado se puede encontrar en swiffas/swftags.py y swiffas/avm2.py , respectivamente. Cada elemento de la lista _struct se instancia en el objeto durante la deserialización (si su tamaño no es ninguno, falso o 0).
Cada tupla en _struct es de la forma (type, name, optional size or existence boolean) . El tamaño puede ser un entero o consultar el valor de un campo anterior.
Un caso especial de una tupla es donde su tipo es bytes , es el último elemento en la lista y None tiene tamaño. Esto representa un campo que ocupa el resto del objeto, y los contenidos cuyas contenidas son esos bytes.
No hay AS3 VM empaquetado (todavía), por lo que iterará manualmente sobre el cuerpo de cada método y vinculará todos los índices.
Ver swiffas/swftags.py . Las etiquetas faltantes se enumeran en la parte inferior.
La limitación actual es solo que no puede codificar un bitfields dentro de un objeto alineado de byte. Las clases de Bitobject y impacable solo necesitan combinarse.
Ver swiffas/avm2ins.py .
Se incluyen todos los de la especificación, al igual que varias instrucciones indocumentadas (incluidas todas las FLASCC).
Hay algunos indocumentados en esta tabla que no apoyamos, pero cansado de que algunas entradas estén mal.
Sin embargo, es mejor verificar cruzado con la caída del código fuente de Adobe de su máquina Virtual de ActionScript (a la baja es que tiene que navegar a través de mucho Cruft para obtener lo que desea).
Liberado bajo la licencia MIT. Consulte LICENSE para el texto completo de la licencia.