Xamarin 项目中的混淆

Obfuscation in Xamarin Projects

如你所知,Xamarin 项目被编译成 dot net dll 程序集,它将被打包到 apk 文件中,并且可以很容易地被 DotPeek 等反射器反射。

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

我的第二个问题是: 像 SmartAssembly 这样的混淆器工具在 Xamarin 项目中可用还是 Xamarin 项目不支持它们?

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

对于你的第二个问题,SmartAssembly 混淆似乎是可能的。检查 Windows Phone 部分 here.

您无法完全 100% 保护您的代码不被反编译和调查。

你可能会花很多时间散列你所有的方法和变量,然后再花很多时间创建某种应用程序解释器来理解你的混淆代码,但即使这样也会被调查、调查并最终破解.

另见:How can I protect my .NET assemblies from decompilation?

Protect .NET code from reverse engineering?

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

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

AOT 编译仅适用于企业版和更高版本的许可证。

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

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

此外,AOT 编译会增加最终 APK 的大小。

Dotfuscator 支持 Xamarin,在线说明(针对 Dotfuscator Professional or the free Community Edition)如何集成它。本质上,流程是:

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

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