stacklayout example c# android mono xamarin.android xamarin

c# - example - Xamarin.Android: ¿la compilación del código nativo dificulta la ingeniería inversa?



stacklayout xamarin forms (2)

Estamos considerando transferir nuestra aplicación C .NET a Android, y he comenzado a leer sobre Xamarin.Android y el framework Mono. Estoy comenzando con el desarrollo de Android.

Noto en la página principal de http://xamarin.com/android que dice:

Código nativo Código compilado de alto rendimiento con acceso completo a todas las API nativas.

¿Esto implica que el código generado será un código nativo que es más difícil de aplicar ingeniería inversa? Nos gustaría crear, entre otras cosas, una biblioteca de clases que contenga nuestros algoritmos clave, y si podemos compilarla en código nativo para dificultar la ingeniería inversa, eso nos haría menos temerosos de la migración.

He leído varias otras publicaciones sobre el código de Android que no es mucho más difícil de descompilar que los ensamblados .net ofuscados (después de usar ProGuard). ¿La compilación de código nativo es una característica reciente que vino después de esas publicaciones? Gracias por cualquier consejo!


Como Xamarin.Android está JIT, se puede descompilar directamente en C #. Simplemente descomprima el APK y use ILSpy con ensamblados / *. Dll. Esto no se puede hacer en Xamarin.iOS ya que es AOT compilado debido a restricciones de tiempo de ejecución impuestas por Apple.


Actualmente, Xamarin en Android no se compila con el código del procesador nativo. Crea .NET p-code, que se ejecuta en una máquina virtual Mono, que cada aplicación compilada con Xamarin instala con el resto de los archivos de la aplicación. Por lo que yo sé, la única manera razonable de crear código nativo para Android es usar Android NDK ( http://developer.android.com/tools/sdk/ndk/index.html ) y escribir código en C o C ++. .

Hice algunos puntos de referencia informales, comparando Java y el código análogo en C # compilado con Xamarin y Dot42, y el código nativo, para una aplicación de la vida real (procesamiento de texto). Básicamente C # de Xamarin era aproximadamente 10-20% más rápido que Java o Dot42 en esa aplicación en particular, mientras que el código nativo era aproximadamente 5-6 veces más rápido. Lee mas en:

¿Alguien tiene puntos de referencia (código y resultados) que comparen el rendimiento de las aplicaciones de Android escritas en Xamarin C # y Java?

Además, para proteger mi código de Android de hackear, utilizo DexGuard ofuscador ( http://www.saikoa.com/dexguard ). Sin embargo, realmente no sé cuánto más difícil es para los hackers descifrar y manipular ese código ofuscado. DexGuard no protegerá el código .NET Xamarin, por supuesto, solo el código Java u otro código compilado para JVM. Ni siquiera protegerá el código Dot42, que se compila directamente en el código p de Dalvik VM (la máquina virtual en la que se ejecutan todas las aplicaciones normales de Android, el código Java también se "descifra" y se convierte en código Dalvik antes de que pueda ejecutarse en Android).

Greg