1.一种基于cpu信息的安卓模拟器识别方法,其步骤包括:
1)服务端收集客户端的cpu信息,其中所述cpu信息通过在app中嵌入cpu信息收集与结果接收插件得到;
2)把cpu信息转换为数值形式的属性值;
3)将数值形式的属性值输入至安卓模拟器识别模型,获取识别结果;
其中,通过以下步骤得到所述安卓模拟器识别模型:
a)获取若干样本cpu信息;
b)把样本cpu信息分别转换为数值形式的属性值;
c)依据数值形式的属性值进行机器学习,得到所述安卓模拟器识别模型。
2.如权利要求1所述的方法,其特征在于,通过https协议,服务端收集客户端的cpu信息。
3.如权利要求1所述的方法,其特征在于,cpu信息包括:cpu名称、cpu指令集、cpu最大频率、cpu最小频率、是否包含cpu序列号、cpu核心数量和cpu各核心的当前频率。
4.如权利要求3所述的方法,其特征在于,通过以下策略获取cpu信息:
1)通过读取/proc/cpuinfo文件,获取设备的cpu名称;
2)通过调用android.os.build类的cpu_abi方法,获取cpu指令集;
3)通过以下步骤得到cpu最大频率:
3.1)通过processbuilder方法执行/system/bin/cat命令,得到文件/sys/devices/system/cpu/cpu[i]/cpufreq/cpuinfo_max_freq,其中i为cpu核心的编号;
3.2)提取文件/sys/devices/system/cpu/cpu[i]/cpufreq/cpuinfo_max_freq中的数值,得到cpu核心i的最大频率;
3.3)将cpu各核心i的最大频率相加,得到cpu最大频率;
4)通过以下步骤得到cpu最小频率:
4.1)通过processbuilder方法执行/system/bin/cat命令,得到文件/sys/devices/system/cpu/cpu[i]/cpufreq/cpuinfo_min_freq;
4.2)提取文件/sys/devices/system/cpu/cpu[i]/cpufreq/cpuinfo_min_freq中的数值,得到cpu核心i的最小频率;
4.3)提取cpu各核心i的最小频率的最小值,得到cpu最小频率;
5)通过/proc/cpuinfo文件中的serial字符串,判断是否包含cpu序列号;
6)通过调用runtime类getruntime()方法中的availableprocessors()方法,获取设备cpu的核心数量;
7)通过读取/sys/devices/system/cpu/cpu[i]/cpufreq/scaling_cur_freq文件中的数值,得到cpu各核心i的当前频率。
5.如权利要求1所述的方法,其特征在于,cpu信息的格式包括:包含cpu属性名与对应属性值的json格式数值对。
6.如权利要求1所述的方法,其特征在于,通过以下策略把cpu信息转换为数值形式的属性值:
1)对于由数值或数值与单位组合的字符串构成的cpu信息,把cpu信息转换为数值形式的属性值的方法包括:提取数值法;
2)对于由有限字符串构成的cpu信息,把cpu信息转换为数值形式的属性值的方法包括:枚举法;
3)对于由字符串与数值的组合构成的cpu信息,通过以下步骤把cpu信息转换为数值形式的属性值:
a)利用提取数值法,得到数值的数值化结果;
b)利用枚举法,得到字符串的数值化结果;
c)对数值的数值化结果与字符串的数值化结果进行加权求和,得到数值形式的属性值。
7.如权利要求1所述的方法,其特征在于,机器学习的方法包括:随机森林。
8.如权利要求1所述的方法,其特征在于,将依据识别结果生成的校验值发送至客户端;若客户端接收的校验值表示该客户端不是安卓模拟器,则执行对应的逻辑;若客户端接收的校验值表示该客户端是安卓模拟器,则执行app正常的逻辑代码。
9.一种基于cpu信息的安卓模拟器识别系统,包括:
客户端,用以通过在app中嵌入cpu信息收集与结果接收插件,得到该客户端的cpu信息;将cpu信息发送至服务端;
服务端,用以把cpu信息转换为数值形式的属性值;将数值形式的属性值输入至安卓模拟器识别模型,获取识别结果;
其中,通过以下步骤得到所述安卓模拟器识别模型:
a)获取若干样本cpu信息;
b)把样本cpu信息分别转换为数值形式的属性值;
c)依据数值形式的属性值进行机器学习,得到所述安卓模拟器识别模型。
10.如权利要求9所述的系统,其特征在于,cpu信息包括:cpu名称、cpu指令集、cpu最大频率、cpu最小频率、是否包含cpu序列号、cpu核心数量和cpu各核心的当前频率。