Silverlight 程序中的源码安全【转】

关于Silverlight,我只是个小菜鸟,刚学没多久,而本文中所谓的安全是源码上的安全,并且以下观点纯属个人意见,有什么不妥之处请指正,谢谢。

     Silverlight的都知道,在部署时,我们需要将后缀.xap的文件一并上传到空间,.xap文件是什么呢,其实就是一个zip文件,只不过后缀不 同而已,不知道的朋友可以将.xap替换为.zip然后解压即可以得到Silverlight程序的dll文件。这样带来的源码安全隐患非常大,为什么 呢?因为部署在空间上的.xap文件是可以以文件的方式进行下载下来,下面的步骤应该可想而知,解压-打开Reflector-拖入dll-Export Assembly Source Code…-保存Resources里的文件-简单修改代码,一个Silverlight程序就这么被破解了,很不值是吧,我们程序员累死累活的分析需 求,设计框架,编码,调试bug,辛苦了大半年终于上线了,上线没两天就被人把所有代码反编译了,只能说太悲催了。我开始学Silverlight的时候 也试着反编译过Silverlight站点,几乎都是手到擒来,包括国内几个很大的站点,在这里就不说是哪个站了。咱说重要的,从反编译这几个站点中吧, 我也弄了一套自己的源码保护地模式,可以说是借鉴,整合,还是说难听点,盗版吧,好了,听我啰嗦了这么多,估计有的朋友不耐烦了,接下来我们切入主题。

部署的目录结构:

Index.html

Silverlight.js

Loader.xap

Silverlight.Application.xap

接下来我们看大多数网站的正常流程:

image_thumb[6]

大 致应该是这样几个简单步骤,第一步通过客户端的浏览器去访问部署在服务器上的Index.html文件,然后加载Loader.xap文件显示一个加载的 界面,通过Loader.xap去下载Silverlight.Application.xap并通过反射将 Silverlight.Application.xap所包含的dll文件加载到应用程序中,像我们所熟知的PPTV 剧场版:http://cool.pplive.com/,锡恩英才·以然胜甲 —— SE:http://zion.earan.net/都是用这种模式,我来简单介绍一下这种模式的好处吧:

对于访问速度:Loader 文件一般很小(我写的一个Loader才12k),它所作的工作就是通过诸如配置文件等去加载下一个.xap文件,所以用户等待的时间非常小。这个还不 止,我们知道Loader文件很小,而下一个要加载的.xap就不一定很小了,所以在Loader中我们可以通过诸如配置文件选择是否保存.xap,当然 不是保存Loader.xap,而是Silverlight.Application.xap,我们可以将 Silverlight.Application.xap保存在独立存储区中,下次通过Loader直接从独立存储区中拿出来用即可,这样就省掉了下载这 个环节,应用程序加载将更快。

对于用户体验:在Loader中界面我们可以更好的处理用户等待时的一些处理,当然自由发挥吧。

对于应用程序选择:Loader所加载的下一个.xap可以通过诸如配置文件等方式进行有选择的加载。

对于版本升级:在前面我说过,为了用户体验,为了节省流量,我们将Silverlight.Application.xap保存在独立存储区中,但是也应该知道服务器何时更新了新版本,当有新版本的时候Loader通过下载服务器上的最新版本覆盖本地独立存储区的中的旧版本。

是不是好处大大的有啊,哈哈,朋友们可能觉得我说的这些和安全有什么关系?之所以我啰嗦了这么多,就是因为我所提出的安全也是基于这种模式,我个人觉得这种模式挺不错的,并且有利于我们保护源码,接下来看看我如何保护源码的。

     保护源码的关键步骤就是

image_thumb[7]
我们将这个步骤进行详细化,请看下图:
image_thumb[25]
从 这个图中,我们可以看到,部署在服务器中的配置文件和Silverlight.Application.xap是经过加密的文件,Loader在读取已加 密的配置文件需要进行一个解密的过程,然后读取配置文件加载下一个已加密的.xap,下载完成也要通过解密.xap文件,然后加载.dll,最后经再将已 经加密的.xap文件保存到独立存储区以便下次快速加载。然后根据配置文件加载Silverlight.Application.xap中的 UserControl,这样一个流程就跑下来了。在这里朋友们可能就要问了,这样我下载Loader.xap文件然后看一下解密的算法,一样破解啊,一 样不安全,这里我要说一个最重要的步骤就是,我们需要对所有的.xap中的.dll文件进行代码混淆等之类的处理,例如用像SmartAssembly之 类的软件将Loader.xap中的dll文件进行代码混淆。这时有的朋友又要问了,既然混淆代码,那么我只需对Loader进行代码混淆,加密 Silverlight.Application.xap不是多此一举么,朋友啊,还记得一个步骤么,就是将.xap文件保存到本地独立存储中,这个步骤 会将Silverlight.Appliction.xap文件保存在本地目录中,那如果不加密,岂不是代码白送人了?是这个理吧?哈哈。


posted @ 2011-05-10 11:24  IT圈儿  阅读(385)  评论(0)    收藏  举报