Xamarin项目中的混淆

Ali*_*ami 13 c# android xamarin.android xamarin

如你所知,Xamarin项目被编译成dot net dll程序集,它将被打包到apk文件中,并且可以很容易地被像DotPeek这样的反射器反映出来.

我的第一个问题是: 我们如何保护我们的代码?

我的第二个问题是: 像SmartAssembly这样的混淆工具是否可用于Xamarin项目,或者Xamarin项目是否不支持它们?

mat*_*dev 6

保护APK的.NET代码(.DLLS)的最佳方法是启用Ahead Of Time(AOT)编译:

在此输入图像描述

AOT编译会将您的应用程序IL代码(.dll)编译为本机指令.打包到APK中的最终代码是X86,arm等指令,而不是托管的IL代码.

AOT编译仅适用于Enterprise和更高版本的许可证.

虽然AOT增加了逆向工程的难度,但它仍然不是100%万无一失.最终的二进制文件仍然可以从root设备中提取,并使用IDA pro等软件进行逆向工程.这比使用DotPeek困难得多,但它仍然可能.

注意启用AOT编译的缺点也很重要.应用程序构建时间显着增加,因为应用程序引用的每个程序集都需要编译; 我的经验表明,当启用AOT时,您应该期望构建时间增加200%-300%.

此外,AOT编译将增加最终的APK大小.

  • 众所周知,AOT编译仅适用于企业许可证。现在Xamarin是免费的,因此可以在Visual Studio Community中使用吗? (2认同)
  • 感谢您强调这一点,AOT确实仅适用于企业许可证。更新答案。 (2认同)

小智 5

对于您的第一个问题,可以使用一些工具来混淆您的 Xamarin 代码。例如,Crypto ObfuscatorBabel ObfuscatorDotfuscator

对于你的第二个问题,SmartAssembly 混淆似乎是可能的。请在此处查看 Windows Phone 部分。


小智 5

Dotfuscator 支持 Xamarin,有关如何集成它的在线说明(适用于Dotfuscator Professional或免费社区版)。本质上,这个过程是:

  1. 配置构建以通过 AfterBuild 目标运行 Dotfuscator
  2. 配置 Dotfuscator:
    1. 指定输入
    2. 像往常一样/根据需要从重命名中排除事物
    3. 仅使用 Mono 兼容的转换(仅限专业版)
  3. 配置复制任务或构建后事件以将混淆的二进制文件复制回其原始位置
  4. 构建、验证混淆和测试

全面披露:我为 PreEmptive Solutions 工作。