检测应用程序是否在虚拟Android环境应用程序(如克隆应用程序或多应用程序空间)上运行

dvtswwa3  于 5个月前  发布在  Android
关注(0)|答案(1)|浏览(48)

最近我遇到像克隆应用程序和多应用程序空间应用程序.他们声称,他们的应用程序创建一个独立的虚拟操作系统在用户的设备上,也使用安全VPN.我想检测和阻止我的应用程序在这些虚拟环境中运行.
我试着维护软件包名称,数字签名和所有基本的东西。

11dmarpk

11dmarpk1#

您可以检查/proc/self/maps来检测虚拟环境。
以下是如何做到这一点:

  • 逐行读取/proc/self/maps
  • 从每一行获取文件路径
  • 如果路径以/data/data/data/app开头,并且不包含我们的应用程序package_name,则我们的应用程序可能正在虚拟环境中运行。

下面是一个简单的Kotlin函数来检测虚拟环境:

fun isVirtualEnvironment(context: Context): Boolean {
    try {
        BufferedReader(
                InputStreamReader(FileInputStream("/proc/self/maps"), Charset.defaultCharset())
            )
            .use { reader ->
                var line: String?
                while (reader.readLine().also { line = it } != null) {
                    line = line!!.trim()
                    val spaceIndex = line!!.lastIndexOf(" ")
                    val path = if (spaceIndex == -1) null else line!!.substring(spaceIndex + 1)
                    if (
                        path != null &&
                            (path.startsWith("/data/app") || path.startsWith("/data/data")) &&
                            !path.contains(context.packageName)
                    )
                        return true
                }
            }
    } catch (ignored: IOException) {}
    return false
}

字符串

相关问题