有没有办法检查SWF以查看它使用的RSL?

时间:2013-04-12 16:19:29

标签: flex flash

我正在调查Flex应用程序的问题,该应用程序试图从意外的URL下载(至少)一个Flex框架RSL。我无法重现这个问题,但我对mxmlc构建配置中RSL规范的某些方面也有些不确定。

考虑到所有这些,能够检查列出RSL依赖关系的SWF文件以确切了解存在哪些依赖关系以及与之关联的URL将是有帮助的。

有没有这样做的方法?我已经尝试了Adobe的SWF调查员,但我没有看到任何明显的地方出现这种依赖关系。 (我猜它们是由mxmlc生成的代码处理的,而不是Flash Player本身生成的代码,因此它们不会作为SWF的属性列出?)

该应用程序是针对Flex 4.6,FWIW构建的。

1 个答案:

答案 0 :(得分:1)

我没有找到一个以自动方式执行此操作的工具,但我发现通过研究SWF的反汇编版本(使用Adobe SWF Investigator tool提供)来查找信息非常容易。< / p>

为此,将指定RSL依赖关系的SWF加载到SWF调查器中,然后在“SWF反汇编程序”选项卡上查看反汇编代码(最简单的方法是使用“打开文本视图...”按钮弹出外部编辑器)。

RSL依赖项在SWF的info()函数的定义中指定,该块以这样的结尾开头:

 function info():Object /* disp_id=0 method_id=57 nameIndex = 75 */

跨域RSL依赖项列在cdRsls属性中,其他属性列在rsls属性中。这些列表中填充了许多RSLData个对象,很容易看到RSLData构造函数的参数被压入堆栈。例如,以下部分添加了两个可能的URL来检索Flex 4.6“框架”库:

   13   findpropstrict  mx.core::RSLData //nameIndex = 6
   15   pushstring      "http://fpdownload.adobe.com/pub/swz/flex/4.6.0.23201/framework_4.6.0.23201.swz"
   18   pushstring      "http://fpdownload.adobe.com/pub/swz/crossdomain.xml"
   21   pushstring      "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437"
   24   pushstring      "SHA-256"
   27   pushtrue        
   28   pushtrue        
   29   pushstring      "default"
   31   constructprop   mx.core::RSLData (7) //nameIndex = 6
   34   findpropstrict  mx.core::RSLData //nameIndex = 6
   36   pushstring      "framework_4.6.0.23201.swz"
   39   pushstring      ""
   41   pushstring      "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437"
   44   pushstring      "SHA-256"
   47   pushtrue        
   48   pushtrue        
   49   pushstring      "default"
   51   constructprop   mx.core::RSLData (7) //nameIndex = 6
   54   newarray        [2]

底部的newarray [2]行似乎表示这些代表同一文件的两个可能位置(即后备网址)。如果提供了单个URL,则会创建一个RSLData对象和一个newarray [1]行。

此代码对应于Flex SDK捆绑的标准flex-config.xml文件中的以下定义:

  <!-- Framework SWC -->
<runtime-shared-library-path>
    <path-element>libs/framework.swc</path-element>
    <rsl-url>http://fpdownload.adobe.com/pub/swz/flex/4.6.0.23201/framework_4.6.0.23201.swz</rsl-url>
    <policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
    <rsl-url>framework_4.6.0.23201.swz</rsl-url>
    <policy-file-url></policy-file-url>
</runtime-shared-library-path>

最后,作为参考,这里是RSLData类的构造函数的签名,以查看值对应的参数:

public function RSLData(rslURL:String = null, 
                        policyFileURL:String = null, 
                        digest:String = null, 
                        hashType:String = null, 
                        isSigned:Boolean = false, 
                        verifyDigest:Boolean = false,
                        applicationDomainTarget:String = "default")