首页
社区
课程
招聘
[转帖]反编译Silverlight应用
发表于: 2009-12-15 10:17 8581

[转帖]反编译Silverlight应用

2009-12-15 10:17
8581
注意是转帖自"博客堂"!!感谢作者ghj1976

其实反编译Silverlight 应用非常容易,下面就以反编译 http://www.joerassic.ch/  的街机对战的Silverlight应用为例来说明这个过程。http://www.joerassic.ch/ 有一个非常酷的,用Silverlight开发的恐龙街机对战的游戏,下面是一副截图。



下载Silverlight XAP文件:

由于 Silverlight 是在客户端浏览器中执行的,我们下载了 Silverlight 文件后,也就得到了完整的 Silverlight 执行文件。

当我们用 Internet Explorer 浏览器浏览了 Silverlight 应用后, 在Internet Explorer的临时文件夹中就有这个Silverlight的文件。我们可以直接来使用这个文件作为反编译的基础。Silverlight的文件是一个 xap 文件, 其实它就是一个 zip 文件。有关这部分的详细信息可以参看我之前写的博客: Silverlight项目中的文件 。

Internet Explorer  的临时文件夹可以通过下面菜单途径到达:

工具 --》 Internet 选项 打开 Internet 选项 设置Tab页。如下图:



在其中的 浏览历史记录中, 我们点击“设置” 按钮,进入了 Internet 临时文件和历史记录设置窗体,如下图:



在这个窗体中我们点击“查看文件”按钮,就可以进入临时文件目录。

临时文件目录下文件很多,由于silverlight 应用默认是 xap后缀的文件,我们通过过滤只看这类文件,如下图:



我们把上述 xap 文件另外复制一个目录,作为我们进一步反编译的基础。

注意,这个复制应该在 Internet Explorer 没有关闭 http://www.joerassic.ch/ 页面之前,同时Silverlight 加载之后进行,否则就会报错误:



我们把 xap 文件名的后缀修改为 zip , 然后解压缩到一个目录下。以这个街机对战的为例,解压缩后文件如下图,有关这些文件的用途,请参看我之前的博客:Silverlight项目中的文件 :



反编译:

由于Silverlight 2.0 以后, 大家几乎都是用 .net 来开发Siverlight 应用,我们也就可以使用 Reflector 打开其中的dll文件。

我们用 Reflector 打开 JurassicCombat.dll 文件后,查看Dll 反编译后的源代码很简单,如下图:



查看对应的XAML文件,则需要查看它的资源文件,如下图:



选中一个资源,然后右击,会出现“Save As” 菜单项,把这个资源另存在一个目录下,打开就可以看到 Xaml文件了, 当然上面资源文件中的图片文件,字体文件都可以看到。这个街机对战的恐龙动画特效文件并没有被编译到 Xap 文件中,而是另外有文件。我们在 Fiddler  辅助下就可以分析到这些图片文件的地址,这里使用的是 http://www.joerassic.ch/ClientBin/images.zip  http://www.joerassic.ch/ClientBin/images2.zip 的图片对应不同等级的对战特效。由于这些图片文件的巨大, 我们在访问 http://www.joerassic.ch/  的初始化时间才需要这么久。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了~初步了解了SL的神秘面纱~
2010-1-6 14:57
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习啊 这个新技术很牛X 期待楼主继续讲解下 编译和执行过程
2010-1-6 19:13
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,很好的教程
2010-1-6 22:41
0
雪    币: 109
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
应该叫“反编译 .NET 应用“更准确
2010-1-7 21:38
0
游客
登录 | 注册 方可回帖
返回
//