SWF文件反编译调试记录

写在前面:

06年左右网页swf文件的播放一般不需要加密,而是直接调用swf文件在播放器中进行播放;11年左右,swf文件的播放逐渐演变为将完整的文件拆开成若干部分,把二进制数据加密后通过js代码或as代码的调用在合成swf文件进行播放。总之,但凡是flash播放器中能够看到swf文件内容,那么这个主swf文件一定是完成了数据的加载和swf影像的合成,最终完成的播放。

一、查看主SWF文件

通过浏览器的开发者工具,获取主swf文件,下载保存到本地。

二、反编译主SWF文件

本次反编译使用的软件是:ActionScriptViewer

打开ActionScriptViewer,加载下载得到的SWF文件,程序会自动反编译SWF代码,通过查看脚本,能够观察清楚该SWF脚本程序的结构(包与包,以及包与类之间的关系)。

三、下载并安装Adobe Flash Builder 4.7

按照网上教程完成Adobe Flash Builder 4.7软件的下载及安装后

四、根据反编译得到的脚本结构,重新构建该SWF源代码结构

首先、新建文件夹(包),在文件夹下新建AS类文件,将反编译得到的代码,复制黏贴进去。

关键就是,阅读代码,找出原网站传给swf文件的参数类型FlashVars value值作为参数,在新构建的代码中,直接赋值进去进行调试,调试过程中,

利用trace()语句,打印参数值进行调试;

利用var f:FileReference = new FileReference;f.save(_local2, 'doc');可以将数值保存到文件中。


写在后面:

主swf文件中,一定会有一个类的方法中代码类似:

_local2 = new ByteArray();
_local2.endian = Endian.LITTLE_ENDIAN;
_local2.writeBytes(_xxx);
_local2.writeByte(64);	
_local2.writeByte(0);
_local2.writeByte(0);
_local2.writeByte(0);
_local4 = ((_00ll.length + _local3) + 4);//这句是计算SWF分割为两部分后,文件头中数据长度,更新第一部分swf数据大小
_local2.position = 4;
_local2.writeUnsignedInt(_local4);
_local2.position = 0;

这里
Endian.LITTLE_ENDIAN;

涉及到10进制数据转16进制后,在左侧补0到偶数位,两两一组倒置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值