我使用 Dotfuscator 保护我的应用程序免受逆向工程我在 Windows 应用程序中加密了 dll 文件,但我如何在 OSX/MonoTouch 中做到这一点?
从ipa中提取dll,然后在windows中混淆dll,将加密后的dll重新打包成IPA,然后发布到appstore?
有没有简单的解决方案?
我使用 Dotfuscator 保护我的应用程序免受逆向工程我在 Windows 应用程序中加密了 dll 文件,但我如何在 OSX/MonoTouch 中做到这一点?
从ipa中提取dll,然后在windows中混淆dll,将加密后的dll重新打包成IPA,然后发布到appstore?
有没有简单的解决方案?
首先,您需要记住 iOS 不允许JIT(即时)编译。这意味着一切都需要通过AOT(提前)编译器。
这导致程序集中的所有 IL 代码都被转换为本机 ARM(v6、v7 和/或 thumb)指令,并且不再需要IL 。
这意味着,当您为 构建时Release|iPhone
,IL 代码将从您的程序集中删除。由于它已被剥离,因此它不会出现在您发布的应用程序中(被反编译)。
笔记
程序集仍将在应用程序内部,因为元数据仍然是必需的(例如System.Reflection
需要它)。因此符号名称和资源文件不会像混淆器通常那样被破坏/加密;
您可以反汇编 ARM 程序集(即使您在 AOT 编译之前混淆了程序集也是如此),但它比IL 更难理解(并回到 C#)。
从 IPA 中提取程序集并对其进行处理至少会破坏应用程序的签名(您可以重新签名)。它也可能会破坏许多其他事情(因为代码将引用可能已更改的名称/结构)。我认为这不会起作用(但这取决于您从混淆器中使用的选项)。