检测是否从Play商店安装了应用程序

时间:2016-05-31 07:53:03

标签: android

我想检查并允许使用我的应用程序,只要它已从Play商店下载,并且尚未被其他用户或任何其他来源共享。如果用户尚未从Google Play商店下载,该如何阻止用户使用该应用?

3 个答案:

答案 0 :(得分:20)

此方法将检查您的应用是否已从Play商店安装。

boolean verifyInstallerId(Context context) {
    // A list with valid installers package name
    List<String> validInstallers = new ArrayList<>(Arrays.asList("com.android.vending", "com.google.android.feedback"));

    // The package name of the app that has installed your app
    final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());

    // true if your app has been downloaded from Play Store 
    return installer != null && validInstallers.contains(installer);
}

前几天我发布了一个Android库PiracyChecker,它使用某些技术保护您的应用,例如Google Play许可(LVL),APK签名保护和安装程序ID(这个)。

答案 1 :(得分:0)

com.android.vending是Play商店包装名称

context.packageManager.getInstallerPackageName(context.packageName)为您提供源软件包名称。

其他来源(例如 Huawei App Gallery )可下载该应用。但是我不确定它的包装名称是什么

答案 2 :(得分:0)

绕过检查

<块引用>

我想检查并允许使用我的应用,前提是它是从 Play 商店下载的,并且没有被其他用户或任何其他来源共享。

虽然可以通过编程方式实现此检查,但也可以通过在没有检查的情况下重新打包应用程序或在运行时使用检测框架绕过检查来绕过。此类框架的一个示例是 Frida:

<块引用>

将您自己的脚本注入黑盒进程。挂钩任何函数,监视加密 API 或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。无需编译步骤或程序重新启动。

我写了一个 article 来展示如何使用 Frida 绕过 Android 应用程序中的证书锁定,并且可以使用相同的方法绕过此检查。唯一的区别是您需要找到正确的 Frida 脚本或自己编写一个并使用它代替 on 来绕过固定。 Frida 代码共享 website 是一组庞大的脚本,其中一个可能存在于此建议中,也可以用作了解如何编写自己的脚本的起点。

保护支票

<块引用>

如果应用程序不是从 Google Play 商店下载的,我如何阻止用户使用该应用程序?

因此,如果您使用内置的 context.getPackageManager().getInstallerPackageName(context.getPackageName()); 或任何其他方法,您将免受未从 Google Play 商店安装您的移动应用程序的普通用户的侵害,但任何想要攻击您的移动应用程序的人都会有几种方法可以绕过我上面提到的这种保护。

保护您的移动应用免受绕过检查的攻击者的一种可能解决方案是使用运行时自我防御保护或移动应用证明解决方案,我建议您阅读this answer,尤其是强化部分和屏蔽移动应用保护 API 服务器一种可能的更好的解决方案,看看如何防止移动应用在非正版时正常运行移动应用。

你想走得更远吗?

在回答安全问题时,我总是喜欢引用 OWASP 基金会的优秀作品。

对于移动应用

OWASP Mobile Security Project - Top 10 risks

<块引用>

OWASP 移动安全项目是一个集中式资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。

OWASP - Mobile Security Testing Guide

<块引用>

移动安全测试指南 (MSTG) 是一本关于移动应用安全开发、测试和逆向工程的综合手册。