C# Android——本机代码编译会使逆向工程变得更困难吗?

C# Android——本机代码编译会使逆向工程变得更困难吗?,c#,android,mono,xamarin.android,xamarin,C#,Android,Mono,Xamarin.android,Xamarin,我们正在考虑将C#NET应用程序移植到Android上,我已经开始阅读Xamarin.Android和Mono框架。我刚刚开始Android开发 我注意到主页上写着: 本机代码 可完全访问所有本机API的高性能编译代码 这是否意味着生成的代码将是更难进行反向工程的本机代码?我们希望创建一个包含关键算法的类库,如果我们能够将其编译为本机代码以阻止反向工程,那么我们就不必担心移植了 我还读过几篇关于Android代码反编译并不比模糊的.net程序集(在使用ProGuard之后)更难的文章。本机代码编

我们正在考虑将C#NET应用程序移植到Android上,我已经开始阅读Xamarin.Android和Mono框架。我刚刚开始Android开发

我注意到主页上写着:

本机代码 可完全访问所有本机API的高性能编译代码

这是否意味着生成的代码将是更难进行反向工程的本机代码?我们希望创建一个包含关键算法的类库,如果我们能够将其编译为本机代码以阻止反向工程,那么我们就不必担心移植了


我还读过几篇关于Android代码反编译并不比模糊的.net程序集(在使用ProGuard之后)更难的文章。本机代码编译是这些文章之后的最新功能吗?谢谢你的建议

目前,Android下的Xamarin不编译为本机处理器代码。它创建.NETP-code,该代码在Mono虚拟机中运行,每个Xamarin编译的应用程序将与其余的应用程序文件一起安装。据我所知,为Android创建本机代码的唯一方法是使用Android NDK()和在C或C++编写代码。 我做了一些非正式的基准测试,比较了用Xamarin和Dot42编译的C#中的Java和类似代码,以及真实应用程序(文本处理)的本机代码。基本上,Xamarin的C#在该特定应用程序上比Java或Dot42快10-20%,而本机代码大约快5-6倍。更多信息请访问:

另外,为了保护我的Android Java代码免受黑客攻击,我使用了DexGuard obfuscator()。然而,我真的不知道,对于优秀的黑客来说,反编译和篡改这些模糊的代码要困难多少。DexGuard当然不会保护.NETXamarin代码,只保护Java代码或为JVM编译的其他代码。它甚至不会保护直接编译成Dalvik VM p-code的Dot42代码(所有正常Android应用程序都在虚拟机中运行,Java代码也会被“索引”并转换成Dalvik代码,然后才能在Android上运行)


格雷格

因为Xamarin.Android是JIT的,所以它可以直接反编译回C#。只需解压缩APK并将ILSpy与assemblies/*.dll一起使用。这不能在Xamarin.iOS上完成,因为它是AOT编译的,因为Apple施加了运行时限制


声明
本机代码高性能编译代码,可完全访问所有本机API。
并不意味着代码反向工程有多困难。最近的Mono/Xamarin.Android支持AOT-不再是实际的。解压后,我在我的APK中找不到Assemblys文件夹。我只能看到lib、res和META-INF。为什么它会丢失?@c.z这是因为APK是用调试设置编译的。如果您使用Release进行编译,它将拥有程序集。@Luccas那么我可以在哪里找到它?@hienbt88如果您使用调试设置进行编译,您将无法在APK中找到程序集。使用发行版配置编译,您将在解压的apkt的Assemblies文件夹中找到它们。这里有一个新功能,名为“将程序集捆绑到本机代码中”。这里有人说这是相当节省。