我可以使用 mono 的 AOT(提前编译)功能来本地“预编译”我自己的一些 .NET DLL(和/或 EXE)的全部或部分,以使它们更难进行逆向工程吗?我正在使用 Windows(7 / x64,但我也有 x86 XP 机器)和 .NET 3.5(VS 2008),我很好奇 mono/AOT 是否可以/已经用于此目的?(此时将它们绑定到 x86 是可以接受的。)
另请参阅这个问题,我尝试过这个但没有运气。
一旦代码被预编译,程序集中的 IL 代码就可以被删除(这就是我们为 monotouch 所做的,例如,以减少应用程序的下载大小)。有一些限制,但它有效。不过,您是否应该竭尽全力让您的客户感到困惑是另一回事。
简短的回答,不。
AOT 程序集只会生成一个共享库,因此下次您使用该程序集时,Mono 将不必对您使用的方法进行 JIT 编译,而是从 .so 加载它们。您的程序集需要在那里,因为仍然需要其中的元数据。
AFAIK,mono 的 AOT 不会删除元数据,这意味着黑客有很多信息可以尝试理解代码中的逻辑。此外,它不适用于所有处理器和平台(特别是我认为它在 Windows 上不可用)。尝试一些可以做到这一点的商业混淆器会更容易,同时会删除大部分元数据。