又一个swf解析器。
yaswfp的Python项目详细描述
又一个swf解析器。
你可以随意发音:)
如何使用
可以将swfparser.py用作命令行程序或模块。
如果直接执行,则用法为:
swfparser.py [-h] [-t] [-e] filepath positional arguments: filepath the SWF file to parse optional arguments: -h, --help show this help message and exit -t, --show-tags show the first level tags of the file -e, --extended show all objects with full detail and nested
如果要将其用作模块,可以使用SWFParser类 直接或方便的parsefile函数:
>>> swf = swfparser.parsefile(<yourSWFfile>) >>> swf.header Header(name=Header, FileLength=4228, ...) >>> len(swf.tags) 365 >>> swf.tags[0] UnknownObject(name=SetBackgroundColor, raw_payload=b'\xff\xff\xff') >>> swf.tags[3] >>> obj = swf.tags[3] >>> obj PlaceObject2(name=PlaceObject2, CharacterId=1, ...) >>> obj.CharacterId 1 >>> obj.Matrix.ScaleX 65536
这跟在SWF File Format Specification Version 19后面,但它是 尚未完全覆盖,因此您可能会发现一些未知对象。
如何处理仍然未知的对象
并不是所有的规范都包括在内(这是一个正在进行的工作!).
当解析器发现仍然无法处理的结构时(因为 需要编程),将返回一个未知对象 未分析的字节,如果设置 未知的警报标志:
SWFParser.unknown_alert = True
向解析器添加新结构非常简单。我很乐意 如果你提供一个真正的字节流作为例子,或者甚至 一个样本swf文件,其中仍然缺少对象。
检查覆盖范围
有一种简单的方法可以检查对象的数量(标记、操作, 结构等)被解析器正确地覆盖:只需使用 coverage参数:
$ python3 yaswfp/swfparser.py -c yaswfp/tests/samples/1252533834.swf Header(Signature='CWS', ...) Tags count: 55 Coverage is 97.3% of 74 total items Most common parsed objects: 22 PlaceObject2 21 ShowFrame 10 LineStyleArray Most common Unknown objects 2 DefineMorphShape2
开发
运行测试:
./test
你需要python3-flake8和python3-nose。当然,这是 Python3。
为了完成一些方法或者能够解析新的结构,我们应该添加 显示新内容的示例,请参阅当前的“健全”测试。是的,单元测试 是可取的,也可以随意添加。
该项目托管在github中:
https://github.com/facundobatista/yaswfp
联系人
任何疑问、任何问题、任何建议或任何其他,请随时公开 github中的问题或者在irc中找到我,我是freenode中的facundobatista。
谢谢!