使用Dotfuscator保护你的Xamarin应用程序

简介: 老实说,发布一个库、桌面应用程序或移动应用程序可能有点吓人。一旦你的软件可以免费提供给世界,你就失去了如何使用它的某种程度的控制权。特别是,开发人员经常担心逆向工程的威胁。 在许多平台和语言中,代码混淆工具是防止逆向工程的常见方法。

老实说,发布一个库、桌面应用程序或移动应用程序可能有点吓人。一旦你的软件可以免费提供给世界,你就失去了如何使用它的某种程度的控制权。特别是,开发人员经常担心逆向工程的威胁。

在许多平台和语言中,代码混淆工具是防止逆向工程的常见方法。例如,如果你是一个Android开发者,你可能已经使用到收缩和混淆的java代码。

现在,Xamarin的开发商获得同样的保护,在所有主要的移动设备的家庭,将Android和iOS移植到通用的Windows(UWP)。完成这个工作 的工具叫做 Dotfuscator社区版本 在 Visual Studio中已经可以使用了。

今天,我将解释如何混淆可以保护Xamarin。Android应用程序从逆向工程,以及如何你可以把同样的保护自己的Xamarin程序简单的几个步骤。

混淆如何保护应用程序

混淆是一个应用程序编译的代码转换成功能相同但难于逆向工程的代码的过程。通常,这是由一个自动混淆工具完成的,比如 obfuscator。下面是一个简单的例子,演示如何防止反工程混淆应用程序。

考虑下面的一个Xamarin.Android 游戏源代码中的一个C#方法:

img_17204c2c6314a08c78d7a9fd55f977d8.png

当这个游戏的开发人员准备将它部署到设备上,或者上传到应用程序商店时,他们将源代码编译成库,然后将这些库打包到一个应用程序包中。在这个例子中,开发商包库到Android设备上分配一个apk文件。

然而,一旦应用程序发布到App Store,一个糟糕的演员可以很容易地获取和逆向APK,生产反编译的代码,和原始的源代码几乎相同:

img_3b07acfa5ccfe430f0329a03306dd24d.png

注意,类型、方法和成员标识符在这里与源代码中的标识符相同,即使这些代码元素通常不能从项目外部访问(也就是说,它们被标记为internal)。internal要注意,该方法的一般控制流,如if语句的顺序,是显而易见的。 

如果,在分发的apk,开发商也通过Dotfuscator社区版混淆这个库,逆向工程的结果会不同:

img_41707014c748216c94249872bba9d2a2.png

代码已被重命名混淆保护,代码混淆的一种基本形式。名称简单的属性, 比如ArrowsOnHand,取而代之的是方法调用与直观的名字, 诸如b 和 g。其他代码元素也同样被重命名。这使得对反编译后的代码更难阅读和推理,作为重要的上下文线索提供的名称不可用。

重命名混淆是这个博客文章的主要焦点,但是我们将讨论更高级的混淆形式,以及如何在以后应用它们。

如何保护你的应用程序

现在,让我们来看看如何整合Dotfuscator 社区版重合名混淆到你的Xamarin构建管道中。作为一个例子,我将使用Xamarin.Android应用程序在上一节中提到的。你可以按照你自己的Xamarin APP,包括iOS和UWP。

我们将使用 优先保护 – Dotfuscator, 一个 .NET 混淆器和保护工具,现在也支持Xamarin。

注:这些步骤假设您正在为Windows开发VisualStudio 2017的应用程序。

安装和设置Dotfuscator

首先,你需要在你的开发机上安装Dotfuscator。之后我们将使用Dotfuscator的命令行接口,您还需要注册您的副本并记录到接口的路径。

安装和设置Dotfuscator:

  1. 访问 Dotfuscator 下载 面,它在优先解决网站。
  2. 下载Visual Studio 2017最新的Dotfuscator 社区版 (CE)
    • Visual Studio包含了 Dotfuscator,P优先解决偶尔发布重要更新将Visual Studio版本之间。 安装Dotfuscator方法是确认你已经更新到最新版本。
  3. 遵照指示运行你下载的VSIX 文件。
  4. 打开Visual Studio 2017并选择 Tools -> PreEmptive Protection – Dotfuscator 来加载Dotfuscator社区版用户接口。
  5. 在你使用命令行接口之前首先要注册Dotfuscator的一个拷贝。在你第一次运行时也被要求注册Dotfuscator;按照指示。
  •  注册以后 或者检查你的注册状态,查找 注册状态 文本,在Dotfuscator社区版的开始页的右上角。
你要知道命令行接口的路径,以方便以后配置集成构建。找到路径:
  • 浏览你安装Visual Studio 2017的路径。比如Visual Studio 2017 专业版的默认安装路径是 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional。
  • 在这个路径中,定位 Dotfuscator 社区版扩展文件,它在 *\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE。
  • dotfuscatorCLI.exe是Dotfuscator 社区版命令行接口,记下可执行文件 的绝对路径,以后会用到。

下载构建集成文件

简化集成过程,Dotfuscator组创建了MSBuild目标文件,你可以参考Xamarin项目。 你也可以从这里下载。

保存PreEmptive.Dotfuscator.Xamarin.targets 文件到你的解决方案路径,并受控。

修改项目使用集成构建

下一步,修改想要混淆的Visual Studio项目的项目文件。步骤如下:

  1. 注意你想要保护的项目的 构建配置。 通常这些都是除了Debug配置之外的所有配置。查看更多指导,请参阅从完全文档中选择如何保护一节。
  2. 在文本编辑器中打开项目文件。一个 C#的样例项目将是`YourProjectName.csproj`。
  3. 请注意从该文件到您下载的构建集成文件的相对路径。
  4. 通过在文件中添加以下行导入构建集成文件, 在 标签之后:
    • ,使用步骤3中提到的绝对路径。
  5. 要 标签之下,没有条件属性,并添加下面的标签:
    • C:\pathto\dotfuscatorCLI.exe, 用绝对路径替代你之前记录的Dotfuscator社区版命令行接口。
    • DotfuscatorConfig.xml
    • true
  6. 在步骤1中提到的每个构建配置,定位到 并添加下面的标签:
    • true
  7. 在最后的 标签之后,加入下面的内容:
  8. 保存并关闭这个文件。

构建应用程序

现在你可以使用Dotfuscator的混淆保护来构建你的应用程序。这样做:

  1. 在Visual Studio中打开并重新加载你的项目。
  2. 选择一个解决方案生成配置,以执行您决定保护的项目构建配置。
  3. 构建这个项目。
  4. 在第一次构建之后,注意建立输出包含以下几行关于Dotfuscator:
img_04fb266b3adba713d3e7e843739bb3fb.png
  1. 注意添加一个DotfuscatorConfig.xml文件到你的工程中。它是Dotfuscator配置文件,告诉Dotfuscator如何混淆代码。建议查看源代码控制。
  2. 在文件系统中,注意新的DotfuscatorReports路径会出面在你的项目路径中。这个路径包含了项目如何被混淆的信息,包括了如何逆向和重命名处理。您应该像构建输出那样对待该目录,并拥有源代码管理器忽略它。
  3. 测试应用程序,如果看到错误,需要配置Dotfuscator further进一步确定正确的保护行为。请参见下一节以供参考。
  4. 继续开发应用,像平常一样构建。当Dotfuscator 用于构建,构建输出会包含如下几行:
img_00d3d1b97c1abbcdc10247944ad34f26.png

有关使用混淆继续开发的更多信息, 请查看Dotfuscator 用户指南的 持续发展 一节。

配置重命名

在某些情况下,应用程序假定编译时代码元素的名称在运行时是相同的。这是特别真实的Xamarin程序,依靠XAML和反射。重命名混淆可以打破这个假设,造成混淆的应用程序有不同的表现。

而新的版本将能够更好的自动处理这些场景,某些情况下,可能需要手动配置。用于说明和示例,请查看Dotfuscator用户指南的 确定重命名排除 页。

高级的混淆

而不是免费的Dotfuscator大众版,你也可以使用 Dotfuscator专业片混淆你的Xamarin应用。 专业版是许可用于商业产品,并且自由试用也是允许更新请求的。

查看社区版和专业版的差别,考虑早期的游戏示例。如果开发者通过Dotfuscator专业版代表社区版来保护库,逆向工程的结果看起来更像:

img_4bf5c881f3c69700883c6422bb1c77c5.png

除了重命名混淆,此代码现在也通过控制流混淆保护。原始代码的语句分散在钝角的“开关”块中 以看似随机的顺序, 使它很难跟随。这些和其它混淆的高级形式都是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页。 这里有所有平台的集成Dotfuscator到一个Xamarin工程的git仓库。

你也可以通过访问 优先解决方案博客来获取混淆空间的最新开发草席, 也可以在 twitter.com/preemptive跟随优先解决。

目录
相关文章
【Xamarin】使用WebSocket开发实时通信应用程序
WebSockets是一种双向通信协议,或TCP连接上的持久通信通道,由许多游戏,具有聊天功能的应用程序和实时应用程序(如股票行情)利用的非常强大的协议。 在这篇博文中,我们将讨论如何构建一个简单的Xamarin聊天室应用程序,该应用程序将利用并连接到ASP.NET Core WebSocket服务。
3238 0
|
数据库 Android开发 数据库管理
【Xamarin.Android】使用实体框架构建Android应用程序
数据是任何应用程序开发的一个重要组成部分,移动应用程序也不例外;作为开发人员,处理数据是我们的一个重要决策,对移动应用开发也是如此。从键值对存储到SQLite,有许多选项可用,但是,.NET开发者往往特别熟悉的是实体框架。
1499 0
|
存储 JSON Java
使用友盟+的APM服务实现基于Xamarin.Android的应用程序启动性能优化
随着开发平台的普及, 我们需要正确的⼯具和⽅法来满⾜不断增⻓的需求。Xamarin就是这样⼀种框架, 它⽀持在 Android、 iOS 和 Windows 平台上共享单个代码库。所以,我们将在 Xamarin.Android应⽤程序中测试性能, 就像在 AndroidStudio 中使⽤ Java 开发⼀样, 我们可以使⽤c#对性能进⾏测试, 从⽽优化启动时间。
使用友盟+的APM服务实现基于Xamarin.Android的应用程序启动性能优化
【Xamarin.Forms】XAML编译——使用XAML编译器来提高Xamarin.Forms应用程序的性能
XAML可以选择使用XAML编译器(XAMLC)直接编译为中间语言(IL)。XAMLC提供了许多好处: 它执行XAML的编译时检查,通知用户任何错误。
1123 0
|
Android开发 iOS开发 MacOS
让你的Xamarin.Forms应用程序更好(更快!)
随着我们继续追求稳定性和性能,我们很高兴获得您对Xamarin.Forms 2.3.5的第一个预发布的反馈。 本次发布包含超过130种修复和增强功能,我想强调一下我们最为您的探索:快速渲染器,ListView增强功能和macOS预览! Android的快速渲染器 快速渲染器背后的概念非常简单:通过平坦化控制嵌套来减少通货膨胀和降低成本。
1031 0
客人发帖:添加一个日历到您的Xamarin.Forms应用程序与Telerik日历
您是否已经使用Xamarin.Forms构建跨平台本机手机应用程序?如果是这样,挑选你的技术堆栈很棒!毕竟,您还能在C#/ XAML中重用您的技能,使每个平台上运行的应用程序具有真正统一的单一代码库?虽然Xamarin提供了大量的框架,IDE和集成,但应用程序可能需要在Xamarin.Forms中包含的控件之外的控件。
1541 0
|
API Android开发 iOS开发
使您的Xamarin.Forms应用程序可访问
iOS,Android和Windows都会为开发人员公开API,为每个人构建可访问的移动应用。 我们很高兴地宣布,我们在Xamarin.Forms中添加了可用性的新API,以便开发人员更轻松地构建可访问的跨平台移动应用程序。
1004 0
|
前端开发 容器
【Xamarin.Forms】使用Infragistics的Ultimate UI控件快速编写应用程序
Infragistics Xamarin的Ultimate UI控件是一系列生产力工具和美丽的UI控件,可以自定义并放置在Xamarin.Forms项目中,用于闪电般的本机UI。 您是否准备好加快使用Xamarin.Forms编写跨平台手机应用程序的过程?如果您刚开始使用Xamarin应用程序开发,或者即使您已经开发了几个移动应用程序,我们也知道大多数开发人员希望尽快开始使用项目。
2135 0
|
API Android开发 iOS开发
使用.NET标准构建(生成)Xamarin.Forms应用程序
.NET标准库将我们的代码带入更多平台,并为基础类库提供更多API,从而构建出惊人的应用程序。开发人员已经能够使用Xamarin的.NET标准库来跨平台共享代码,并且使用Xamarin.Forms长久地在iOS,Android,UWP,macOS之间创建一个共享的用户界面。
1107 0
|
存储 测试技术
【Xamarin】快速生成和发布五星级应用程序
移动应用程序的第一步是构建自动化,它构建应用程序并运行所需的测试,以确保应用程序遵循所需的规则。 构建自动化也是运送高品质,五星级移动应用程序的第一步。 在构建iOS和Android移动应用程序时,主要的挑战之一就是正确安装所需的工具和SDK,以便成功构建应用程序并运行测试。
1093 0

热门文章

最新文章

下一篇
无影云桌面