又一个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-flake8python3-nose。当然,这是 Python3。

为了完成一些方法或者能够解析新的结构,我们应该添加 显示新内容的示例,请参阅当前的“健全”测试。是的,单元测试 是可取的,也可以随意添加。

该项目托管在github中:

https://github.com/facundobatista/yaswfp

联系人

任何疑问、任何问题、任何建议或任何其他,请随时公开 github中的问题或者在irc中找到我,我是freenode中的facundobatista

谢谢!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java的目标是从我的项目中删除不起作用的文件   java对for循环的理解   java我完成了在作业要求的位置查找字符的部分,但是如何从我找到的字符串中删除字符呢?   基于帧时的java动画   java请求无效。缺少XGoogUploadCommand标头   java如何在viewsource模式下使用openStream?   grpc grpc_ARG_KEEPALIVE_PERMIT_而不调用java服务器?   java如何通过Junit测试Web服务调用   如何在java中获取鼠标中键?   使用junit在spring测试中加载属性文件   Java中用于类的类修饰符   java多色文本图像   sql无法调试Java中的“连接到数据库失败”异常   java如何指定hibernate连接映射?   java Android工具栏不显示   java仿射转换不同的图形对象   使用终端的java问题   Java在tomcat上查找127.0.0.1失败