跳转到主要内容

另一个SWF解析器。

项目描述

另一个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文件格式规范版本19,但尚未(完全)涵盖,因此您可能发现一些未知对象

如何处理仍未知对象

并非所有规范都被涵盖(这是一个正在进行的工作!)。

当解析器遇到仍然无法处理的结构时(因为需要更多的编程),将仅返回包含未解析字节的UnknownObject对象,或者如果您设置了unknown_alert标志,将引发异常

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-flake8python3-nose。当然,这是Python 3。

为了完成某些方法或能够解析新的结构,我们应该添加展示新内容的示例,查看当前的“合理性”测试。是的,单元测试也是受欢迎的,请随意添加。

该项目托管在GitHub上

https://github.com/facundobatista/yaswfp

联系方式

如有疑问、问题、建议或任何其他事项,请随意在GitHub上打开一个问题或在IRC中找到我,我在Freenode上的用户名是facundobatista

谢谢!

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

yaswfp-0.9.3.tar.gz (29.8 kB 查看散列值)

上传时间

由以下组织支持