在已编译的SWF文件中更改变量值的最佳方法

时间:2009-06-03 16:59:12

标签: flash actionscript-3 flex3

是否可以在将修改后的SWF返回给客户端之前,通过servlet(例如,基于每个会话)更改已编译SWF中的变量值(使用as3)。我注意到有一些命令行工具作为开源,但这些似乎专注于AS2。 AS3代码可以实现吗?从java可以使用哪些库? (即基本上在非捆绑的SWF中编辑生成的pcode,然后重新打包)。

理想情况下,希望在主swf中嵌入每个会话令牌(不使用闪存变量),然后可以使用它来验证请求。目标是使用这个说法作为XSS支持中的另一个步骤(当与跨域权限文件结合使用时)。 Flash vars仍然在DOM中,但是这只允许加载器知道密钥的值(对于java脚本来说非常困难),我们可以很好地锁定flash而不是将值暴露给任何加载的swfs,并且跨域文件只能通过原始swf(仅来自该域的一个)限制在原始服务器上读取xml文件的任何内容。

2 个答案:

答案 0 :(得分:2)

部分问题是编译的SWF在内部使用zlib流进行压缩,因此修改二进制文件而不重新编译命令行SDK是非常重要的。

使用命令行工具(mxmlc或Ant - 我们在项目中同时使用两者)设置和自动化Flex SDK并不困难,但如果您真的坚持要修改二进制文件如果没有重新编译,您可能会发现this blog post有帮助。它包括一个实用程序,用于将内部流解压缩为其原始数据,并使用不同的压缩算法重新压缩。在该脚本的中间(当数据被解压缩时),您可以在二进制文件中搜索您要查找的值(通过实验找到的已知偏移量,或从公共成员标签中搜索),更改数据,重新压缩流,瞧 - 你有一个自定义.swf。如果更改嵌入资源(例如文本XML文件)中的值,则可以更轻松地定位要在二进制文件中更改的数据。

swf_recompress.zip

答案 1 :(得分:0)

您可以使用Flex SDK在请求时从源代码编译swf。我建议使用一个非常小的swf,然后加载其他更复杂的swf。