Theres是否能够确定某个Android或iOS应用是否是使用Xamarin构建的?
答案 0 :(得分:9)
是肯定的。应用程序文件夹的结构。例如,你可以在Android
如果您正在查看“正常”单机版应用程序(使用类似Xamarin编译的程序),那么您将在APK / ZIP中看到其中一些结构
/assemblies/Sikur.Monodroid.dll
/assemblies/Sikur.dll
/assemblies/Xamarin.Android.Support.v13.dll
/assemblies/Xamarin.Android.Support.v4.dll
/assemblies/Xamarin.Android.Support.v7.AppCompat.dll
/assemblies/Xamarin.Android.Support.v7.CardView.dll
/assemblies/Xamarin.Android.Support.v7.RecyclerView.dll
/assemblies/Xamarin.Mobile.dll
/assemblies/mscorlib.dll
/classes.dex
/lib
/lib/armeabi-v7a
/lib/armeabi-v7a/libmonodroid.so
/lib/armeabi-v7a/libmonosgen-2.0.so
程序集目录中的文件将是Mono / .Net代码,可以使用这些常规工具进行反转。
classes.dex是一个普通的Android Dalvik可执行文件(dex),它可以使用常用工具(baksmali,IDA Pro等)进行反转 - 尽管它应该只是加载存根以启动Mono引擎。
文件包含在lib / ** / *中。原生共享库也是如此,它们被编译成ELF ARM文件。这些通常发送到monodroid引擎(libmonodroid.so)以及开发人员可能使用的其他插件。这些将需要支持ELF ARM的反汇编程序,如Hopper,IDA Pro,r2等。
在上面的具体示例中,唯一的非Xamarin代码将位于Sikur.dll和Sikur.Monodroid.dll中。
反编译apk https://ibotpeaches.github.io/Apktool/
如果在xamarin中有mono.dll。
你可以用c#反编译一些.dll来看代码。
并且在iOS中您无法进行分解。 Android应用程序被编译为与机器无关的Java字节码,将其转换回Java相对容易。 iOS应用程序直接编译为机器代码,具有积极的优化传递,往往会破坏原始代码的大量结构。
但这并不是说你不能从已编译的iOS应用程序中学到任何有用的东西。 class-dump工具可以从已编译的应用程序中提取Objective-C类,属性和方法的名称,这可以为您提供有关如何实现它的线索。 NibUnlocker可以将已编译的Interface Builder UI文件转换回可编辑格式。 Hopper不仅可以反汇编机器代码将其转换为汇编代码,还可以进一步将其转换为更易理解的伪代码。图像,声音和其他资源通常包含在iOS应用包中未加密。
你可以尝试使用这个应用程序并观察区别是任何阅读此答案的人都可以尝试。让我知道有什么区别。