Android Xamarin代码安全性

Android Xamarin代码安全性,android,security,xamarin,Android,Security,Xamarin,我正在开发一个涉及付款的应用程序。我将在应用程序中使用某种加密,在服务器后端使用某种加密和安全性 我想知道在部署到Android时如何特别保护我的Xamarin代码。我知道Xamarin.iOS会转换为本机代码,但Xamarin.Android会在DLL中部署.Net代码,可以使用DotPeek或任何其他工具轻松地进行反编译,代码将可见,包括我的加密密钥或服务器和我的应用程序之间安全所需的任何其他安全相关数据。模糊处理是一个选项,但我想知道其他选项。请在这个问题上指导我,因为这是我非常关心的问题

我正在开发一个涉及付款的应用程序。我将在应用程序中使用某种加密,在服务器后端使用某种加密和安全性


我想知道在部署到Android时如何特别保护我的Xamarin代码。我知道Xamarin.iOS会转换为本机代码,但Xamarin.Android会在DLL中部署.Net代码,可以使用DotPeek或任何其他工具轻松地进行反编译,代码将可见,包括我的加密密钥或服务器和我的应用程序之间安全所需的任何其他安全相关数据。模糊处理是一个选项,但我想知道其他选项。请在这个问题上指导我,因为这是我非常关心的问题。

直接回答你的问题:不,没有任何东西可以保护Xamarin编译的Android应用程序免受反向工程攻击

正如您必须采取行动用ProGuard等工具保护APK中的Android本机代码一样,包含应用程序业务逻辑的.NET程序集也将要求您采取特殊行动,对程序集进行模糊处理、加密,或以其他方式保护程序集免受窥探。有了一个相对较小的.NET工具链,再加上对探索中间语言代码的兴趣,你就可以了解到应用程序是如何组合在一起的。需要明确的是,ProGuard只会混淆应用程序的Java代码,并且不会对Xamarin编译的APK中的.NET程序集提供保护

正如您的问题以及问题的评论中所指出的,DotPeek、ildasm、ILSpy和Reflector等工具提供了难以置信的简单(在许多情况下是免费的!)检查.NET程序集的方法,其中许多工具提供了将大量IL代码转换回更高级别的.NET语言(如C#或VB.NET)的机制。只需稍加努力,这些高级类就可以插入Visual Studio或Xamarin Studio解决方案,并转换回运行代码——eep!由于Xamarin.Android使用即时编译,除了在Android本机代码上使用类似ProGuard的解决方案外,还可以实现类似Babel for.Net或Crypto obfuscator for.Net的模糊器,这些模糊器提供了大量开发人员可配置的模糊技术/规则,以及加密程序集部分的选项


虽然这些工具使反向工程的猫捉老鼠游戏变得更加困难,但我们最终讨论的是如何保护客户端代码;那些决心研究底层实现并有耐心这样做的人将能够通过二进制文件和程序集中留下的线索找到正在使用的混淆或加密技术。虽然没有100%安全的工具、机制或安全方法,但您可以通过对安全性应用分层方法来降低风险,同时着眼于花费时间实施多层方法的“风险与成本/影响”,以及通过采用这些额外的安全措施带来的额外复杂性。正如
SilverlightFox
所建议的,聘请一名安全专业人员在组织其他平台的环境中审核您的应用程序,这是确定其他需要改进的领域的重要一步,强调潜在的关注领域或获得进一步改进您的组织所选平台安全方法的建议。

Xamarin团队正在做出巨大努力,因此今天,Android混合AOT将从网络程序集中删除IL代码,转向本机LIB,因此,剩下的所需网络程序集将不容易反编译,看起来与iOS上的相同(完全aot):

以下工作项目设置,用于更快的启动时间(llvm关闭)和更小的大小(调试剥离、每个平台的apk,手动上载):

false

如果查找不只是Xamarin;基于相同的选项,可能:

看起来永远是本地的,不需要混淆器; 看起来像是净核心RT可行的解决方案;很快所有的应用程序都将进入.net核心


未经测试,可能使用旧的win.net sdk进行类似操作。

如果您根本不知道如何操作,那么最好向专家咨询,而不是在这里询问。你不想冒被黑客攻击的风险,因为这可能会让你破产。我知道几种方法。我只是想知道是否有什么东西阻止了Xamarin构建的APK被反编译。我知道如何通过保护中间件和应用程序之间的通信通道、实施加密等来确保应用程序的安全。
        [MethodImpl(8)]
        protected void Recalculate(Content35mm.Conversion item = null)
        {
        }
    <DebugSymbols>false</DebugSymbols>
    <AndroidSupportedAbis>armeabi-v7a;arm64-v8a</AndroidSupportedAbis>
    <AndroidCreatePackagePerAbi>true</AndroidCreatePackagePerAbi>
    <AndroidLinkMode>SdkOnly</AndroidLinkMode>
    <AotAssemblies>true</AotAssemblies>
    <AndroidAotMode>Hybrid</AndroidAotMode>
    <AndroidAotAdditionalArguments>no-write-symbols,nodebug</AndroidAotAdditionalArguments>
    <EnableLLVM>false</EnableLLVM>
    <BundleAssemblies>false</BundleAssemblies>
    <EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
    <EnableProguard>true</EnableProguard>