将Android APP锁定到特定设备

时间:2017-04-06 15:15:52

标签: android security

是否可以将Android APP锁定为仅与特定设备一起使用(如在具有特定ID / imei /令牌的手机中)并阻止任何人使用该应用并在任何其他设备中使用它?

是否可以在代码中对设备令牌进行硬编码(或将其加密存储)并检查它是否与当前正在运行的设备令牌匹配并关闭(或显示错误),如果它们不是相同?甚至可以使用Android设备令牌吗?它是否与硬件相关联(即使在刷新ROM之后,唯一的设备也始终具有相同的令牌)?

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,这会奏效。

您需要致电android.telephony.TelephonyManager.getDeviceId();

这将返回唯一标识设备的字符串(GSM上的IMEI,CDMA的MEID)。

您需要在AndroidManifest.xml中获得以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

为了做到这一点。

然后,您可以检查IMEI是否与MainActivity onCreate()中的目标设备匹配,如果不匹配,请致电finish();

例如,您可以使用Facebook的“隐藏”库加密目标的IMEI。

答案 1 :(得分:1)

是的,我们可以做到,但我们必须处理这个问题,如下面的过程: 1)我们可以通过以下代码获取设备的android id或imei:

def newList(n1,n2,n3,List):
    avg = (n1+n2+n3)/3
    i=0
    while i<len(List):
        List[i] -= avg
        i += 1
    print D

启动应用程序时检查此imei值是否匹配然后退出 应用代码:

String imei;
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        try {
            if(isSimSupport(mContext))
            {
                imei = telephonyManager.getDeviceId();
            }
            if(imei.equalsIgnoreCase(""))
            {
                imei= Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);
            }
            if (isNetworkAvailable()) {
                String userId=preference.getUserId("UserId");
                String devicetoken=preference.getToken("token");
                sendRegistrationToServer(imei,userId,devicetoken);
            } else {
                toastMsg(getResources().getString(R.string.internet_alert));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

对于普通用户而言,它似乎无法在该设备上运行。 这是一个技巧,但没有代码阻止应用程序运行或安装。