一个好老好老的老程序员了。
全部博文(915)
分类: Android平台
2017-09-25 22:52:43
老实说,发布一个库、桌面应用程序或移动应用程序可能有点吓人。一旦你的软件可以免费提供给世界,你就失去了如何使用它的某种程度的控制权。特别是,开发人员经常担心逆向工程的威胁。
在许多平台和语言中,代码混淆工具是防止逆向工程的常见方法。例如,如果你是一个Android开发者,你可能已经使用到收缩和混淆的java代码。
现在,Xamarin的开发商获得同样的保护,在所有主要的移动设备的家庭,将Android和iOS移植到通用的Windows(UWP)。完成这个工作 的工具叫做 , 在 Visual Studio中已经可以使用了。
今天,我将解释如何混淆可以保护Xamarin。Android应用程序从逆向工程,以及如何你可以把同样的保护自己的Xamarin程序简单的几个步骤。
混淆是一个应用程序编译的代码转换成功能相同但难于逆向工程的代码的过程。通常,这是由一个自动混淆工具完成的,比如 obfuscator。下面是一个简单的例子,演示如何防止反工程混淆应用程序。
考虑下面的一个Xamarin.Android 游戏源代码中的一个C#方法:
当这个游戏的开发人员准备将它部署到设备上,或者上传到应用程序商店时,他们将源代码编译成库,然后将这些库打包到一个应用程序包中。在这个例子中,开发商包库到Android设备上分配一个apk文件。
然而,一旦应用程序发布到App Store,一个糟糕的演员可以很容易地获取和逆向APK,生产反编译的代码,和原始的源代码几乎相同:
注意,类型、方法和成员标识符在这里与源代码中的标识符相同,即使这些代码元素通常不能从项目外部访问(也就是说,它们被标记为internal)。internal要注意,该方法的一般控制流,如if语句的顺序,是显而易见的。
如果,在分发的apk,开发商也通过Dotfuscator社区版混淆这个库,逆向工程的结果会不同:
代码已被重命名混淆保护,代码混淆的一种基本形式。名称简单的属性, 比如ArrowsOnHand,取而代之的是方法调用与直观的名字, 诸如b 和 g。其他代码元素也同样被重命名。这使得对反编译后的代码更难阅读和推理,作为重要的上下文线索提供的名称不可用。
重命名混淆是这个博客文章的主要焦点,但是我们将讨论更高级的混淆形式,以及如何在以后应用它们。
现在,让我们来看看如何整合Dotfuscator 社区版重合名混淆到你的Xamarin构建管道中。作为一个例子,我将使用Xamarin.Android应用程序在上一节中提到的。你可以按照你自己的Xamarin APP,包括iOS和UWP。
我们将使用 , 一个 .NET 混淆器和保护工具,现在也支持Xamarin。
注:这些步骤假设您正在为Windows开发VisualStudio 2017的应用程序。
首先,你需要在你的开发机上安装Dotfuscator。之后我们将使用Dotfuscator的命令行接口,您还需要注册您的副本并记录到接口的路径。
安装和设置Dotfuscator:
简化集成过程,Dotfuscator组创建了MSBuild目标文件,你可以参考Xamarin项目。
保存PreEmptive.Dotfuscator.Xamarin.targets 文件到你的解决方案路径,并受控。
下一步,修改想要混淆的Visual Studio项目的项目文件。步骤如下:
现在你可以使用Dotfuscator的混淆保护来构建你的应用程序。这样做:
有关使用混淆继续开发的更多信息, 请查看Dotfuscator 用户指南的 持续发展 一节。
在某些情况下,应用程序假定编译时代码元素的名称在运行时是相同的。这是特别真实的Xamarin程序,依靠XAML和反射。重命名混淆可以打破这个假设,造成混淆的应用程序有不同的表现。
而新的版本将能够更好的自动处理这些场景,某些情况下,可能需要手动配置。用于说明和示例,请查看Dotfuscator用户指南的 页。
而不是免费的Dotfuscator大众版,你也可以使用 混淆你的Xamarin应用。 专业版是许可用于商业产品,并且
查看社区版和专业版的差别,考虑早期的游戏示例。如果开发者通过Dotfuscator专业版代表社区版来保护库,逆向工程的结果看起来更像:
除了重命名混淆,此代码现在也通过控制流混淆保护。原始代码的语句分散在钝角的“开关”块中 以看似随机的顺序, 使它很难跟随。这些和都是Dotfuscator专业版特有的。
在这篇博客中,我们看到了如何使用Dotfuscator来保护Xamarin库和应用程序,使之不容易被逆向工程。我使用了一个Android应用程序来做例子,这些步骤同样适用于iOS和UWP项目,While I used an Android app as an example, these same steps can also be applied to iOS and UWP projects,所以你可以保护你的应用程序,不管它运行在什么平台上。
如何使用Dotfuscator保护Xamarin工程的更多信息,可以查阅 这里有所有平台的集成Dotfuscator到一个Xamarin工程的git仓库。
你也可以通过访问 优先解决方案博客来获取混淆空间的最新开发草席, 也可以在 跟随优先解决。