Perpustakaan Python 2 kecil yang menyediakan:
Niat asli adalah untuk memberikan transpiler dari kode AS3 yang dikompilasi ke LLVM IR.
Ada satu atau dua dalam bahasa lain, tetapi sebagian besar memiliki bitrotted, atau mereka terlalu tidak lengkap untuk menguraikan file target saya.
Serialisasi kembali ke file SWF harus relatif mudah ditambahkan.
pip install swiffas
Lihatlah example.py - mencetak daftar pembongkaran untuk semua kode ActionScript yang ditemukan di tag DoABC.
Bagaimanapun, inilah ikhtisar singkat:
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 )) Struktur setiap objek SWF dan AVM2 yang diuraikan dapat ditemukan di swiffas/swftags.py dan swiffas/avm2.py , masing -masing. Setiap elemen dari daftar _struct dipakai pada objek selama deserialisasi (jika ukurannya tidak ada, salah atau 0).
Setiap tuple dalam _struct adalah dari bentuk (type, name, optional size or existence boolean) . Ukurannya mungkin bilangan bulat, atau merujuk pada nilai bidang sebelumnya.
Kasus khusus dari tuple adalah tempat jenisnya adalah bytes , adalah elemen terakhir dalam daftar dan memiliki ukuran None . Ini mewakili bidang yang mengambil sisa objek, dan siapa isinya adalah byte tersebut.
Tidak ada yang dikemas AS3 VM (belum), jadi Anda akan mengulangi secara manual di atas tubuh masing -masing metode, dan menghubungkan semua indeks.
Lihat swiffas/swftags.py . Tag yang hilang terdaftar di bagian bawah.
Keterbatasan saat ini hanya karena Anda tidak dapat mengkode ladang bit di dalam objek yang disejajarkan oleh byte. Kelas Bitobject dan Unpackable hanya perlu digabungkan.
Lihat swiffas/avm2ins.py .
Semua yang dari spesifikasi disertakan, seperti juga beberapa instruksi tidak berdokumen (termasuk semua yang FLASCC).
Ada beberapa yang tidak berdokumen di tabel ini yang tidak kami dukung, tetapi lelah bahwa beberapa entri di sana salah .
Namun, lebih baik untuk memeriksa silang dengan penurunan kode sumber Adobe dari mesin virtual ActionScript mereka (downside Anda harus menavigasi banyak cruft untuk mendapatkan apa yang Anda inginkan).
Dirilis di bawah lisensi MIT. Lihat LICENSE untuk teks lisensi lengkap.