【问题标题】:Xamarin Code SecurityXamarin 代码安全性
【发布时间】:2014-09-27 18:41:14
【问题描述】:

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

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

【问题讨论】:

  • 如果您根本不知道该怎么做,那么您最好从专家那里获得咨询,而不是在这里询问。您不想冒被黑客入侵的风险,因为这可能会让您破产。
  • 我确实知道几种方法。我只是想知道是否有什么东西阻止了 Xamarin 构建的 APK 被反编译等。我知道如何通过保护我的中间件和应用程序之间的通信通道、实施加密等来确保我的应用程序安全。

标签: android security xamarin


【解决方案1】:

直接回答您的问题:不,没有任何东西可以保护 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 所建议的那样,聘请安全专业人员在您组织的其他平台的上下文中审核您的应用程序可能是确定其他需要改进的领域、突出潜在关注领域或获得进一步改进组织选择的建议的重要一步。平台安全方法。

【讨论】:

    【解决方案2】:

    Xamarin 团队正在做出巨大努力,因此今天适用于 Android 的 Hybrid AOT 是从 NET 程序集中删除 IL 代码,转移到本机库,因此留下的所需 NET 程序集不容易反编译,看起来与 iOS 上的相同(那里有完整的 aot ):

            [MethodImpl(8)]
            protected void Recalculate(Content35mm.Conversion item = null)
            {
            }
    

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

        <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>
    

    您可以在此处阅读有关 xamarin android aot 的更多信息(感谢 Adam):

    https://xamarinhelp.com/xamarin-android-aot-works/

    【讨论】:

      【解决方案3】:

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

      看起来永远是原生的,不需要混淆器; 看起来像 net core RT 可行的解决方案;很快所有应用程序都将转到 .net 核心; https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5753507#xx5753507xxhttps://docs.microsoft.com/en-us/archive/msdn-magazine/2018/november/net-core-publishing-options-with-net-core

      未测试可能与旧的 win .net sdk 可能类似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 2012-10-07
        • 1970-01-01
        • 2010-11-23
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多