2009-06-03 29 views
4

是否可以在将修改后的SWF返回到之前,通过servlet(例如基于每个会话)更改已编译的SWF中的变量值(使用as3)客户端。我注意到有几个命令行实用程序是开源的,但这些似乎集中在AS2上。这可能与AS3代码?什么库可用从java做到这一点? (即基本上编辑非捆绑SWF中的结果pcode,然后重新打包它)。在已编译的SWF文件中更改变量值的最佳方法

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

回答

0

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

+0

想到这一点,但一)Flex编译器是不是最快B)的大量的工作实现自动化。阅读swf并更改var aka FLASM将会很好并且简单 - 我们也不必为prod服务器和运输代码烦扰源代码。 – nso1 2009-06-03 17:27:31

2

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

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

swf_recompress.zip

+0

如何编辑swfextract被调用后创建的swf_data? – 2013-05-26 20:12:27

相关问题