又一个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@UnwrapValidatedValue和Spring LocalValidatoryFactoryBean   JavaSpring静态资源映射:控制器与addResourceHandler   java Android SurfaceView视频重叠   java Android字符串资源上标   docker Dockerfile在找不到Java类时失败,如何指定类路径或jar/mvnw?   java如何让扫描仪从用户输入中选择关键字?   java Sleuth不会在spring boot应用程序中打印spanId和traceId   java为什么客户端不能从订阅中获取信息?   jboss您如何继续学习企业Java应用服务器?   java Bukkit插件语法错误:语法错误,插入“}”以完成类体   在数据库中保存java GCM消息时出错   来自单个数组的java循环对象   java如何使用multple@Path参数进行改造   java layoutinflater不会膨胀整个布局   Java 8并行排序与Scala并行排序   java如何打印出数组中的最后一项   当试图创建HSSFWorkbook时,java代码“部分崩溃”   java索引多维数组