Xamarin.Android - does native code compilation make reverse engineering harder?
我们正在考虑将C.NET应用程序移植到Android,我已经开始阅读xamarin.android和mono框架。我刚开始安卓开发。
我在http://xamarin.com/android主页上注意到它指出:
Native Code
High-performance compiled code with full access to all the native APIs.
这是否意味着生成的代码将是更难进行反向工程的本机代码?我们希望创建一个包含我们的关键算法的类库,如果我们可以将其编译为本地代码以阻止逆向工程,这将使我们不那么担心移植。
我读过其他几篇关于Android代码的文章,与模糊的.NET程序集(在使用Proguard之后)相比,它不难反编译。本地代码编译是不是最近发布的一个特性?谢谢你的建议!
目前,Android下的Xamarin不编译为本机处理器代码。它创建.NET P代码,该代码在一台单虚拟机中运行,每个Xamarin编译的应用程序都安装有其余的应用程序文件。据我所知,为Android创建本机代码的唯一方法是使用Android NDK(HTTP://ExcRe.ANDROID.COM/TooS/SDK/NDK/NETX.HTML),并在C或C++中编写代码。
我做了一些非正式的基准测试,比较了用XAMARIN和DOT42编译的Cype中的Java和类似代码,以及用于真实应用程序(文本处理)的本机代码。基本上,来自XAMARIN的C**比Java或DOT42在该特定应用程序快约10-20%,而本机代码则快约5-6倍。更多阅读:
在XAMARIN C和Java编写的Android应用程序的性能是否有基准(代码和结果)比较?
此外,为了保护我的Android Java代码不受黑客攻击,我使用了DeXGuff-OfCulcActer(http://wwwsaika.com /dExc防范)。然而,我真的不知道好的黑客要想反编译和篡改这种模糊的代码有多困难。DEXGART当然不会保护.NET XAMARIN代码,只为Java代码或JVM编译的其他代码。它甚至不保护DOT42代码,它直接编译成Dalvik VM P-代码(虚拟机所有正常的Android应用程序都运行,Java代码也被"删除",并转换到Dalvik代码之前,它可以运行在Android上)。
格雷戈
因为xamarin.android是jit'ed,所以可以直接反编译回c。只需解压apk并将ilspy与assembly/*.dll一起使用。这不能在xamarin.ios上完成,因为它是AOT编译的,因为Apple施加了运行时限制。