Java 防止android应用程序克隆到三星安全文件夹或其他类似应用程序?

Java 防止android应用程序克隆到三星安全文件夹或其他类似应用程序?,java,android,kotlin,clone,samsung-mobile,Java,Android,Kotlin,Clone,Samsung Mobile,我正在试图弄清楚安全文件夹是如何工作的。它正在安全文件夹中创建克隆应用程序。 我将如何阻止android手机创建克隆。? 屏幕截图附在您可以看到包名称相同但进程id不同的地方。这对于fin tech或基于促销活动的应用程序来说是一个高风险。 如何检查应用程序是否在虚拟机内运行 比如说 软件包:com.example.app(6151) 软件包:com.example.app(用户150)(6337) 由于我在评论中没有足够清楚地表达自己,我决定写一个具有挑战性的框架回答,试图向您展示为什么我认为

我正在试图弄清楚安全文件夹是如何工作的。它正在安全文件夹中创建克隆应用程序。 我将如何阻止android手机创建克隆。? 屏幕截图附在您可以看到包名称相同但进程id不同的地方。这对于fin tech或基于促销活动的应用程序来说是一个高风险。 如何检查应用程序是否在虚拟机内运行

比如说

  • 软件包:com.example.app(6151)
  • 软件包:com.example.app(用户150)(6337)

  • 由于我在评论中没有足够清楚地表达自己,我决定写一个具有挑战性的框架回答,试图向您展示为什么我认为您关注的问题是错误的

    总结:你(感知到的)“三星问题”(一部手机;两个账户)实际上只是更广泛的“两部手机问题”(两部手机;两个账户)的特例。攻击者可以(ab)相对轻松地使用两部手机,这意味着你应该首先集中精力进行防御。成功防御“两部手机问题”的一个副产品是,它(据我所见)也将防御您目前担心的特定“三星问题”


    你感知到的问题 在评论中,你说:

    [这是一款]fintech(钱包应用程序)基本上,我们试图阻止用户在同一台设备上安装两个应用程序和使用两个不同的帐户

    以及:

    [这是一款]fin tech应用程序,为了避免欺诈和风险,我们希望阻止用户在同一台设备上安装多个应用程序

    虽然您没有给出详细信息,但我很高兴从表面上看,一个用户拥有多个帐户会带来欺诈风险。许多应用程序都有针对多个帐户的规则:例如,在许多在线游戏中,多个帐户可用于“游戏系统”以获得不公平的优势

    我想问的是“在同一台设备上的相关性”


    (几乎可以肯定)你真正的问题 暂时忽略三星的安全区域,编写应用程序非常容易,因此用户每部手机只能使用一个帐户。但是,如果有人还没有第二部手机,他们可以用相对较少的成本获得第二部手机,在上面安装应用程序,并将其配置为使用第二个帐户

    从您的角度来看,它同样危险:应用程序的两个实例,使用两个帐户,由一个人控制。从攻击者的角度来看,由于他们必须随身携带两部手机,因此它(在使用三星的安全区域时)的便利性稍差一些


    你的优先权 因此,您的首要任务应该是防范“两个电话;两个帐户”的情况

    对于某些应用程序,在服务条款中写上“您不得使用多个帐户”就足够了。如果发现有人滥用该系统,您可以使用该规则的存在来禁止他们。对其他人来说,坚持要求用户提供电子邮件地址、电话号码或邮政地址——并防止重复——可能就足够了(尽管这些检查都不难绕过)

    对于银行和金融应用(如您的),必须做出更严格的努力。通常情况下,会使用诸如国家保险(NI)号码(英国)或社会保险号码(SSN)之类的美国号码(以及,据推测,世界其他地区也会使用类似的“ID号码”)。“了解您的客户”的法律要求通常使询问此类细节成为可以接受的

    无论您使用什么方法,因为“拥有两部手机”对攻击者来说都不是障碍,所以您需要您的系统能够有效地防御一个用户从两个不同的设备设置两个帐户


    奖金 如果你对一个用户使用两部手机创建两个账户有足够强大的防御能力,那么就我所见,你将不需要额外的成本,就可以对你所询问的更具体的“一部手机;两个账户”场景进行防御。是的,三星的安全区域允许用户在一部手机上再次安装您的应用程序,但当他们创建或注册帐户时,您现有的措施将以与使用两部手机相同的方式防止这种情况


    虽然我现在想不出什么办法,但我承认,只有在同一部手机上使用三星的安全区域安装两个应用程序实例时,才会出现一些非常特殊的威胁。然而,如果是这样的话,我想你需要更详细地解释这一威胁是什么,以及为什么(到那时)现有的防止使用两部手机的保护措施不足以应对这一威胁。

    我能够通过以下方法检测到正在运行的应用程序是否是克隆应用程序。您可以将此作为参考。只要在应用程序运行时检查应用程序的fileDir(),如果与原始应用程序不同,则停止应用程序

    public fun checkAppCloning(context: SplashActivity) {
            val path: String = context.filesDir.path
            if (path.contains(PROFILE)) {
                context.finish()
            } else {
                val count = getDotCount(path)
                if (count > APP_PACKAGE_COUNT) {
                    context.finish()
                }
            }
        }
    
        /**
         * Takes absolute file path [path] as param and counts the number
         * of dots present int the file path
         */
        private fun getDotCount(path: String): Int {
    
            var count = 0
            for (i in 0 until path.length) {
                if (count > APP_PACKAGE_COUNT) {
                    break
                }
                if (path[i].equals('.')) {
                    count++
                }
            }
            return count
        }
    

    希望这会有帮助

    问题不清楚。您有三星设备吗@我很抱歉。您能解释一下这个问题吗?如果您重新阅读,这个问题会得到很好的解释。这个问题与三星设备有关。它有一个安全的文件夹,您可以在其中轻松克隆现有的应用程序。您想解释一下吗。@Zeeshan。?