分析分享:Hacking Team Flash 0Day - 图文(5)

2020-02-21 15:54

反编译工具:AS Sorcerer

对于已经发布的swf文件,都不会带有源码,对我们调试swf文件就带来了不小的麻烦,类似分析Android的DEX文件,都是执行在虚拟机中,由虚拟机来解释执行字节码。DEX文件由反编译工具可以反编译出java源码,那么swf文件也有类似的工具,根据SWF文件格式和ABC字节码反编译出类源码的文件。

Swf反编译工具也比较多,这里举个例子利用AS Sorcerer工具来将编译好的swf文件重新解析,下图是HackingTeam爆出了Flash0Day源码

21 | 31

从图中知道,根据exp1.swf文件大小可知,HackingTeam自己编译的是zlib压缩后的文件,当然也可以通过二进制直接看看有没有被压缩,根据前面介绍的知识,只要二进制文件前三个字节是“CWF”那就是压缩后的文件。

接下来我们用AS Sorcerer工具来反编译exp1.swf文件看反编译后的结果:

从反编译结果来看,该工具确实还原了原有的几个AS文件,同时也说明该工具能自动解压由zlib压缩的swf文件,并对swf文件进行反编译解析。

反编译工具:Sothink SWF Editer

接下来再介绍一款反编译工具---硕思闪客精灵,该工具比上一个款工具有更直观的界面,同时重要了一点就是提供了一款swf文件编辑工具Sothink SWF Editer,不但能识别swf文件结构,而且可以直接编译swf的二进制文件。

先来看反编译工具硕思闪客精灵反编译exp1.swf文件的界面情况:

22 | 31

从图中可以看出该工具将压缩格式的swf文件,直接反编译,同时看到了ABC字节码在反编译后的源码情况。

前面我们提到过对于压缩后的swf文件,010 Editer即使使用了swf模板,也不能解析出压缩后的文件格式。这里就介绍一款能够查看SWF压缩后文件格式的工具,Sothink SWF Editer工具可以直接将压缩的swf文件,解压同时解析出文件结构,如下图所示:

从图中看出压缩的swf文件,在导入该工具后自动解压并识别为FWS文件。而非CWS文件,为我们分析没有源码的并压缩的SWF文件,提供便利。

23 | 31

反编译工具:其他

还有其他的一些反编译工具比如yogda,asv,swf decmpiler, decompile Flash free,swf deompiler magic等就不一一列举介绍。

AS脚本

AS(Action Script)是Flash动作脚本语言,类似于JS(JavaScript)脚本语言,所以在很多存储结构和对象使用上都可以参考JS脚本语言的使用方式。下面结合本漏洞中会用到的一些结构对象做简要介绍。

AS中数组的使用

对于AS中的数组我们需要知道AS数组不像C/C++中的数组,在C/C++中数组要求存储同种类型的数据,而在AS中可以存储不同类型的数据,可以是基本数据类型也可以是对象类型也可以是自己定义的类型。在本例将要提到的AS中,数据Array就同时存储了ByteArray和MyClass2两种数据类型。

AS中Vector存储形式

在AS中,Vector只能存储同一类型的元素,其一般使用的格式如下:

1 var v:Vector .= new Vector.(100) //声明一个含有100个整型数的Vector变量v。

Vector类构造函数有两个可选参数,它允许你明确你的Vector实例的数量。第一个参数是length参数。默认情况下,当一个Vector被创建时,它是空的(它有0个元素)。然而,如果你传递一个值给length参数,明确元素数量的Vector实例就被创建了:

1 var myVector:Vector. = new Vector.(7); // myVector is created with 7 elements

24 | 31

Vector对象的另一个特征就是他们可以调整长度,这意味着你可以改变值,但是不能通过添加或删除元素来改变总数。默认地,一个Vector实例是不允许动态修改长度的。要创建一个可修改长度的Vector,将Vector类构造函数的第二个参数(fixed参数)设置为true:

1 var myVector:Vector. = new Vector.(7, true); // m yVector's length is fixed to 7 elements

注意: 可以在任何时候修改Vector对象的fixed属性来设置Vector的长度是否可变。

1 myVector.fixed = false; // myVector's length is no longer fixed

uint Vector在内存中的布局如下图,Uint vector包含了8字节的头部信息,其中4字节是长度字段。

AS中对象类型转换

在AS通用对象属性中有两个特殊的方法ToString()方法和ValueOf()方法。

ToString方法没有参数,它返回一个某种程度上代表着对象值的一个字符串,而它正是在这个对象上调用的。当AS需要将一个对象转换为一个字符串对象时,就需要调用该函数。比如当使用+运算将一个字符串和一个对象链接起来,或是当期待一个字符串的函数Alert传递一个对象的时候就会默认调用该函数。

ValueOf方法和ToString方法类似,它是当AS需要把一个对象转换为某种基本数据类型时就会调用该方法。比如一个对象用在需要一个基本数值的环境中,AS会自动调用该函数,而在本文提到的漏洞中正式利用了这一点,在将一个对象Myclass转为字节类型时默认调用Myclass的ValueOf方法。

25 | 31


分析分享:Hacking Team Flash 0Day - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:南曹范小学校风校训解说词

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: