×
Namespaces

Variants
Actions

提高Windows Phone应用的源代码的安全性

From Nokia Developer Wiki
Jump to: navigation, search
SignpostIcon WP7 70px.png
Article Metadata

兼容于
文章
WS_YiLunLuo 在 31 Dec 2011 创建
最后由 hamishwillee 在 16 Jul 2013 编辑

近期我们看到有些开发人员对Windows Phone只支持.NET有一些顾虑,其中最大的一个问题是,.NET代码被编译成IL代码,而不是ARM汇编,IL代码是可以通过诸如Reflector之类的工具进行反编译的。对此我们承认存在风险,但是也请大家意识到该问题并不像想象中的那么严重,而且它不仅存在于Windows Phone这一个平台上,并且我们也有办法能保护自己的代码。

Contents

Windows Phone提供的保护

首先,Windows Phone本身对你的应用程 序提供了一定的保护。通过合法的手段,用户只能够通过Market Place下载并安装程序。在这个过程中用户无法显式得到xap包,因此也无法进行任何反编译工作。只要你不将xap包直接发给用户,你的代码就是安全的。当然,我们不排除有人通过非法手段破解手机,并获取xap包。此外,你可能是一个类库开发人员,并且打算将类库编译出的dll直接分享给其他给发人员。但是这个风险对于其它平台也是一样的。因此,接下来我们看看在其它平台上,假设用户得到了编译后的包,能做些什么。

和其它平台比较

Android

Android平台使用Java进行开发。Java和.NET一样,并不会将代码直接编译成机器码,而是编译成一种叫Java字节码的中间语言。一般的Java程序编译出来的是一个jar包,Android则使用DEX。你可以通过诸如dex2jar这样的工具将DEX文件转换成jar文件,然后使用诸如JD-GUI这样的工具反编译成Java代码。其风险和Windows Phone平台是类似的。

iPhone/iPad

iPhone/iPad使用Objective-C,并且将代码直接编译成机器码。因此反编译会有较大的困难。然而,市场上依然存在一些专业反向工程工具,例如IDA

可行的方案

现在我们了解了反向工程的问题并不仅限于Windows Phone。接下来我们来看看我们能做些什么,来保护我们的知识产权。

代码混淆

首先我们可以考虑将源代码进行混淆。这会使得反向工程后的源代码很难被读懂。在.NET平台上,可以使用诸如Dotfuscator这样的工具。Dotfuscator有多个版本。Visual Studio自带了一个免费的版本,很多情况下已经够用了。推荐你查看http://msdn.microsoft.com/en-us/vstudio/bb466226.aspx#dotfuscator上列出的各个教学视频,它们提供了如何使用Dotfuscator的详细步骤。专业版提供了更多的功能,你可以自http://www.preemptive.com/products/dotfuscator/overview找到更多的信息,包括如何购买专业版。

使用高级语言功能

C#这样的语言有一些高级语言功能,例如lambda expression和yield return。使用这样的功能不仅使得写代码变得方便,同时也会增加反向工程的难度。因为很多使用高级语言功能撰写的代码会在编译时由编译器自动转化成一些比较繁琐,读起来比较累的代码。大多数反向工程工具只能产生这些由编译器生成的代码,而看不到你的原始代码。

将逻辑放到云端

此外,你也可以考虑将部分重要的逻辑放到云端,例如Windows Azure之上,尤其是那些需要很多计算资源的逻辑,例如电影编码。手机是一个客户端,性能和存储空间都有限,有部分功能不适用于在手机上进行。事实上,Windows Phone自带的一部分功能,例如朗读文本,就需要通过微软的云服务才能完成。将逻辑放在云端还有一个好处就是,各种各样的客户端都能够通过访问服务的方式使用该功能,而不需要针对每个客户端写专门的代码。像部署在Windows Azure这样的云平台上的服务,客户端无法直接取得程序,只能通过服务暴露出的接口间接地访问云端的程序逻辑,因此也不存在反编译问题。当然,这样做也有坏处,例如可能需要用户支付网络流量相关费用,而且有时候网络传输可能有点慢。

法律手段

最根本的解决方案是通过法律手段。我们可以申请专利,保护我们的知识产权。我们可以在license中明确规定不允许反向工程。有关更多信息,请咨询法律顾问。

开源

如果你通过法律手段保护了知识产权,甚至可以考虑开源。开源并不等于不能盈利。开源能让更多的第三方开发人员使用你的产品,使你的产品不再是一个简单的应用程序,而是一个完整的可扩展的平台。只要在license中明确规定用户得到源代码后能做什么和不能做什么就可以了。若是用户违反了license,我们可以控诉他们,由法院裁决。

关于以上两点我们举几个例子,微软的.NET的很大一部分代码可以自官方网站下载到。而Android本身就是开源的。很多微软的产品,例如Visual Studio和Expression Blend,全都使用.NET编写,并且未进行代码混淆处理。知名的国际公司如今都通过法律手段来保护知识产权,而不是试图阻止反向工程。

This page was last modified on 16 July 2013, at 10:57.
92 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×