教你轻松猎取Silverlight资源代码(Siliverlight5出版之前)

Silverlight自从MS给世界多媒体各路神鬼惊喜以来,一直存在一个似有似无的问题.许多SL爱好者因为在某网站看到自己喜欢的示例就想方设法把它的原代码或不管三七二十一把有关的资源全拿下(.xap就那么 两个文件dll和app.xaml).为此我也是其中之一,下面总结一下个人学习的有争议的合法途径(有版权归属问题与我无关,有SL开发者持意见者可以原谅)!

1.打开http://www.pin5i.com/showtopic-26213.html 这有个silverlight局部图片放大效果的示例;

2.查看网页"源文件",找到src="http://www.pin5i.com/demo/26213/demo.html" (这个网站的SL资源很隐蔽呀,一般很难发现哦!) ;

3.之所以有2步骤,是因为某些资源发布者故意把源来的资源隐藏得比较深,这样就不会被轻易获取了.总之只要找到真正的示例源URL即可;

4.打开http://www.pin5i.com/demo/26213/demo.html 这里面就有这个示例,查看网页"源文件",发现

<param name="source" value="PartMagnifier.xap"//> (其实许多网站的资源文件通常放置在示例网页的同一层,比如http://www.after8creative.com/ClientBin/WorkExamples.xap 这个页面可以下载其.xap,而http://www.after8creative.com/正好是它的示例页面.它的页面源码如下:
<param name="source" id="applicationName" value="ClientBin/WorkExamples.xap" />
只需要把value复制到http://www.after8creative.com/后面即可解决!)
好了我们要的就是这个http://www.pin5i.com/demo/26213/PartMagnifier.xap 将其下载下来,重命名为.rar文件,解压,发现AppManifest.xaml与PartMagnifier.dll文件;
5.从reflector(Silverlight反编译工具).zip下载一个迷你的silverlight专用dll反编译器,将PartMagnifier.dll文件open,找到如图所示的四个文件:
其实所有的.xap包里都包含这个资源的信息(About),比如有一个资源的包里的AppManifest.xaml的源为:
代码
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="ScatterViewSample" EntryPointType="ScatterViewSample.App" RuntimeVersion="3.0.40624.0">
  
<Deployment.Parts>
    
<AssemblyPart x:Name="ScatterViewSample" Source="ScatterViewSample.dll" />
    
<AssemblyPart x:Name="Firebrick.SilverlightTouch" Source="Firebrick.SilverlightTouch.dll" />
  
</Deployment.Parts>
</Deployment>

 

说明有两个dll中有一个反编译后发现是被另外一个调用的如图:
明显References引用了第二个dll(Firebrick.SilverlightTouch.dll);其实用reflector反编译出来的每个.xap包里面的每个dll(无加密无特殊状况)无非两种东西:前台(Resources)与后台(以项目名称为标题的部分)
6.有些特殊状况不得不说明:reflector反编译出的用户自定义控件(UserControl)后台代码部分,reflector会将其中的页面属性当成方法来使用(如:this.img.Set_Stretch(1); img是Image,它有个属性Stretch有四个可选值分别为Fill/None/Uniform/UniformtoFill,分别代表序号0/1/2/3,所以this.img.Set_Stretch(1)这名其实是 表达this.img.Stretch=Stretch.None的意思).
  另外:有些实例化创建对象时反编译器会把语句给简略掉如:
代码
                   private static void OnBehaviorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
                                {
                                      Particles particles 
= d;
                      ........       
                  }

原来的格式是:

 

代码
                   private static void OnBehaviorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
                                {
                                      Particles particles 
= d as Particles;
                      ........       
                   }

 

 

后者顾名思义才是正确的!
7.将上面的xaml文件与cs文件都保存到需要的文件夹下即可,最后有VS打开文件(严格要求做法:1.创建新(silverlight)项目;2.参照反编译dll出现的各种类或方法的代码一一新建到或复制粘贴到新建项目中(而不是单纯的复制粘贴文件那么简单!)).
8.若涉侵权行为,请forgive;切勿模仿,本人只为了给silverlight的发展给以更好的反面问题.
posted @ 2010-03-01 18:17  molin  阅读(1422)  评论(0编辑  收藏  举报