如何在 VS 2019 上混淆 xamarin 应用程序

Posted

技术标签:

【中文标题】如何在 VS 2019 上混淆 xamarin 应用程序【英文标题】:How to obfuscate a xamarin App on VS 2019 【发布时间】:2020-05-13 20:25:03 【问题描述】:

我需要保护应用程序上的业务逻辑,这是使用 xamarin 表单创建的。我在论坛和此处搜索了有关 Babel 和 ConfuserEx 的信息,但我不明白它是否有效。

Case Babel

我已经安装了演示 SDK,并且我已经更新了环境变量的路径。 在 android 项目中,我添加了以下几行,正如我在示例和书籍“Xamarin Mobile Development for Android Cookbook”中看到的那样

<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=9.3.3.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
    <Babel InputFile="$(TargetPath)" OutputFile="$(TargetPath)" 
           VerboseLevel="5" 
           ObfuscateTypes="true" 
           ObfuscateEvents="true" 
           ObfuscateMethods="true" 
           ObfuscateProperties="true" 
           ObfuscateFields="true" 
           VirtualFunctions="true" 
           FlattenNamespaces="false" 
           UnicodeNormalization="false" 
           SuppressIldasm="true" 
           StringEncryption="xor" 
           ResourceEncryption="false" 
           ValueEncryption="false" 
           DynamicProxy="false" 
           ControlFlowObfuscation="goto=on" 
           ILIterations="5" />
    </Target>

编译很好,但是我用ILSpy工具看到dll,可以看到流程、方法、变量等……

Case ConfuserEx

我已经安装了 ConfuserEx 的 VS 扩展,并尝试在 common 项目上激活它,它被混淆了,但是当我存档以生成 apk 时,它没有被混淆。 我尝试在 Android Project 上做而不是 common Project,但它不起作用。 你能给我一些建议以混淆应用程序吗?我想用 Android、ios 和 UWP 应用程序来做。 因为默认情况下,uwp、droid和ios很容易做逆向工程,不是吗?

【问题讨论】:

您尝试过使用DotFuscator 吗?此外,ios AFAIK 不需要混淆。 preemptive.com/dotfuscator/ce/docs/help/… 我读过它,但我没有尝试过,因为我读到它很昂贵,而且应用程序是为其他业务构建的。 emmm 看来我已经搜索好了,为什么xamarin iOS 不需要呢? 因为 iOS 是 AOT 的,而 IPA 无论如何都很难逆向工程 谢谢,Android 是链条中的薄弱环节 【参考方案1】:

因为默认情况下,uwp、droid和ios很容易做倒车 工程,不是吗?

假设这是问题,答案是你大多是错的。

AOT 编译的程序集不容易逆向工程,UWP 和 iOS 强制 AOT,而 Android 现在默认启用部分 AOT,VS Enterprise 也可以启用完整 AOT。

说到没有什么是不能逆向工程的,你仍然可以在 AOT 编译的顶部添加混淆以使其更加困难,只是没有内置的解决方案(而且据我也不知道没有免费的解决方案)所以你可以选择你喜欢的,这里不允许这样的建议。

【讨论】:

谢谢你的解释。 UWP,我读了其他东西,但根据你的解释,我试图反编译 appxbundle 并且它受到保护。 Apple 我知道它,但我读到它有一些问题,我试图从 ipa 打开 dll,我可以读取类、全局变量和方法,但流受到保护。关于工具,一些用户在论坛上说 ConfuserEx 有效,而另一些则无效,所以我尝试使用 Babel,它不是免费的,我无法使用它,理论上它支持 xamarin【参考方案2】:

在过去的 3 年中,我一直在将 Babel 与我的 Xamarin.Android 应用程序一起使用。它工作得非常好。如果您遇到问题,请联系 Babel 的 Alberto。他提供了非常好的支持。大多数问题是因为 Xamarin 的构建过程可能因版本而异,因此您的 Babel 任务可能需要修改以适应这些变化

【讨论】:

谢谢,我要写了。如果我找到解决方案,我会在这里分享。

以上是关于如何在 VS 2019 上混淆 xamarin 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 可以通过 Wi-FI 在 iPhone(真实设备)上工作,而无需连接到来自 VS 2019 CE Windows 10 的真实 Mac Os?

如何在 Xamarin.Forms 的主页上禁用主页点击手势而不是其他页面?

vs2019 - Xamarin:丢失“Java 开发工具包位置”的路径设置

带有 Xamarin 的 VS 2019,由于警告而无法调试:调试符号文件无效并被忽略

Xamarin 项目中的混淆

如何使用 Dotfuscator 混淆 Xamarin.Android 应用程序的公共成员?