一种基于CPU信息的安卓模拟器识别方法及系统

文档序号:25543222发布日期:2021-06-18 20:40来源:国知局
一种基于CPU信息的安卓模拟器识别方法及系统

本发明涉及计算机网络安全领域,用于对抗黑灰产行业中利用安卓模拟器进行应用多开的行为,更具体地,是一种基于cpu信息的安卓模拟器识别方法及系统。



背景技术:

安卓系统是一个快速发展的生态系统,2020年12月份statcounter的数据显示,安卓系统的市场占用率已经达到72.48%,这在很大程度上得益于其开源性,应用商店的大量免费应用与灵活便捷的操作方式不断地为用户带来新鲜的体验。安卓系统使用linux内核促进与设备硬件的通信并管理系统进程,然而,安卓系统基于arm架构,而linux系统基于x86架构,两者使用的指令集并不相同,安卓系统不能直接在计算机上运行。由于linux内核的灵活性,安卓系统能够被很好地仿真,而安卓模拟器被开发用于在计算机上运行安卓系统。

近年来随着技术的发展,使用者借助安卓模拟器已经能够在计算机上运行移动端的各类主流应用程序。androidstudio中自带的模拟器是最早的安卓模拟器之一,为了方便安卓应用开发者方便地在各类安卓版本中测试应用,google公司在androidstudio中集成了安卓模拟器,并且为各类主流的计算机操作系统提供支持。除此之外,genymotion、bluestacks、noxplayer、网易mumu模拟器、逍遥模拟器、雷神模拟器等都是市场上流行的安卓模拟器,这些模拟器目前主要被用于在计算机上运行移动端的游戏。

然而,安卓模拟器在为使用者带来便利的同时,也为别有用心的使用者提供了非正规操作的途径。例如通过安卓模拟器修改设备的定位功能,使用者可以随意修改自己的实时位置,从而虚报上班打卡、校园上课打卡。应用多开也是安卓模拟器的一大功能之一,这为不法分子利用微信、qq、微博等社交平台传播诈骗信息或发送诈骗短信提供了便利,安卓模拟器不仅能实现应用程序多开,也能实现模拟器多开,这大大降低了不法分子的犯罪成本,扩大了被侵犯对象的范围并且提高了诈骗成功率。另外,许多app通过获取移动设备的imei编码标识用户,而通过安卓模拟器修改imei编码的方式在黑灰产中应用广泛,不法分子通过这种方式反复获取商家发放的福利,损害了商家与其它用户的利益。因此,针对安卓模拟器与真实安卓设备的区分性研究具有必要性。

针对安卓模拟器的识别方法大多基于以下几点:

1.通过能否拨打电话进行判定,首先需要定义一个新的intent类变量,调用intent类的setdata函数指定待测设备要拨打的电话号码,再调用intent类的setaction函数并设置参数为intent.action_call进行打电话的动作,若该动作成功则表明待测设备为真机。

2.通过cpu的架构类型进行判定,若cpu架构类型为x86则基本可以判定为模拟器,即build.model.contains("x86")或android.os.build.cpu_abi.contains("x86")返回true。

3.通过是否存在光传感器、方向传感器进行判定,定义新的sensormanager类变量并调用getdefaultsensor函数设置参数为sensor.type_light,通过判断返回值是否为空判定有无光传感器;定义新的sensormanager类变量并调用getdefaultsensor函数设置参数为sensor.type_orientation,通过判断返回值是否为空判定有无方向传感器,若两者均无,表明为模拟器。

然而,这些传统的检测方式需要获取用户的部分权限判定用户使用的设备为计算机上的模拟器还是真实移动设备,例如call_phone、body_sensors等权限,这为用户带来了不友好的交互体验并且明示安卓模拟器的使用者app正在收集相关信息,使得不法分子有篡改返回值的可能。因此,亟待提出一种“无痕”的检测方式,即在不获取用户权限的条件下通过设备信息判断用户正在使用的是安卓模拟器还是真实移动设备。

中国专利申请cn106815058a公开了一种模拟器的识别方法和系统,其根据cpu架构信息进行模拟器识别,但该方法具有一定的局限性。经过实验,我们发现利用模拟器能够修改cpu的架构信息,具体的方式是通过修改system目录下的cpuinfo文件达到修改cpu型号、核心数等信息。采用单一的cpu属性无法满足识别被篡改的模拟器的需求,因此我们提出了基于多属性的模拟器识别方法。



技术实现要素:

为解决上述问题,本发明提出了一种基于cpu信息的安卓模拟器识别方法及系统。通过客户端收集设备的cpu信息,与服务器端进行数据交互,并且基于随机森林模型匹配模拟器特征进行实现。可以在不影响用户体验的情况下,有效鉴别出当前用户使用的设备是基于计算机的安卓模拟器还是真实移动设备。

为达到上诉目的,本发明采用具体技术方案是:

一种基于cpu信息的安卓模拟器识别方法,其步骤包括:

1)服务端收集客户端的cpu信息,其中所述cpu信息通过在app中嵌入cpu信息收集与结果接收插件得到;

2)把cpu信息转换为数值形式的属性值;

3)将数值形式的属性值输入至安卓模拟器识别模型,获取识别结果;

其中,通过以下步骤得到所述安卓模拟器识别模型:

a)获取若干样本cpu信息;

b)把样本cpu信息分别转换为数值形式的属性值;

c)依据数值形式的属性值进行机器学习,得到所述安卓模拟器识别模型。

进一步地,通过https协议,服务端收集客户端的cpu信息。

进一步地,cpu信息包括:cpu名称、cpu指令集、cpu最大频率、cpu最小频率、是否包含cpu序列号、cpu核心数量和cpu各核心的当前频率。

进一步地,通过以下策略获取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的当前频率。

进一步地,cpu信息的格式包括:包含cpu属性名与对应属性值的json格式数值对。

进一步地,通过以下策略把cpu信息转换为数值形式的属性值:

1)对于由数值或数值与单位组合的字符串构成的cpu信息,把cpu信息转换为数值形式的属性值的方法包括:提取数值法;

2)对于由有限字符串构成的cpu信息,把cpu信息转换为数值形式的属性值的方法包括:枚举法;

3)对于由字符串与数值的组合构成的cpu信息,通过以下步骤把cpu信息转换为数值形式的属性值:

a)利用提取数值法,得到数值的数值化结果;

b)利用枚举法,得到字符串的数值化结果;

c)对数值的数值化结果与字符串的数值化结果进行加权求和,得到数值形式的属性值。

进一步地,机器学习的方法包括:随机森林。

进一步地,将依据识别结果生成的校验值发送至客户端;若客户端接收的校验值表示该客户端不是安卓模拟器,则执行对应的逻辑;若客户端接收的校验值表示该客户端是安卓模拟器,则执行app正常的逻辑代码。

一种基于cpu信息的安卓模拟器识别系统,包括:

客户端,用以通过在app中嵌入cpu信息收集与结果接收插件,得到该客户端的cpu信息;将cpu信息发送至服务端;

服务端,用以把cpu信息转换为数值形式的属性值;将数值形式的属性值输入至安卓模拟器识别模型,获取识别结果;

其中,通过以下步骤得到所述安卓模拟器识别模型:

a)获取若干样本cpu信息;

b)把样本cpu信息分别转换为数值形式的属性值;

c)依据数值形式的属性值进行机器学习,得到所述安卓模拟器识别模型。

进一步地,cpu信息包括:cpu名称、cpu指令集、cpu最大频率、cpu最小频率、是否包含cpu序列号、cpu核心数量和cpu各核心的当前频率。

与现有的安卓模拟器识别方法相比,本发明具有以下几点优势:

1、不用获取安卓设备的权限,例如call_phone、body_sensors等权限,即可判断用户使用的设备是否为安卓模拟器;

2、保障用户使用app的体验,本发明使用的方法无需获取安卓设备的权限,仅访问系统文件中的cpu信息,并提取出关键信息进行识别;

3、对于使用安卓模拟器进行违规操作的不法分子,无痕操作不会引起他们的警觉从而使得数据的返回值遭到篡改;

4、以极低的误判率保证了模拟器识别过程的有效实现;

5、使用cpu的诸多信息作为特征,输入随机森林模型进行分类具有高度的准确性与可靠性。经前期的调研发现,cpu信息能够作为区分真机和模拟器的有效特征。另外,经过实验发现,使用随机森林模型对cpu信息进行识别,在测试集上能够达到99.68%的准确率;

6、通过枚举提值赋权法,将cpu信息更准确地转换为数值形式的属性值。

附图说明

图1是本发明一实施例中针对安卓模拟器识别系统的总括流程示意图。

图2是本发明一实施例中插件构成与系统总括流程图。

图3是本发明一实施例中cpu信息收集模块示意图。

图4是本发明一实施例中属性值预处理模块示意图。

图5是本发明一实施例中属性值预处理模块的枚举法示意图。

图6是本发明一实施例中属性值预处理模块的枚举提值赋权法示意图。

图7是本发明一实施例中模拟器识别模块示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的目的、特征和优点能够更加明显易懂,下面结合附图和事例对本发明中技术核心作进一步详细的说明。

本发明的安卓模拟器识别方法,包括以下步骤:

1)在客户端app上嵌入cpu信息收集与结果接收插件,收集设备的cpu信息并且接收服务器端识别模拟器并返回的结果。在客户端app中置入cpu信息收集模块,收集设备的cpu相关信息。经过实验研究表明,设备的cpu信息能够很好的区分安卓模拟器与真实移动设备,并且能够做到无感、无痕检测,保障用户的使用体验。

2)将收集到的cpu相关信息回传到服务器端。客户端app中置入数据传输模块,该模块将收集到的设备cpu属性名称与对应的属性值一一写入json文件,这个json数据包通过https协议传输到服务器端。服务器端包含已训练完成的模拟器识别模型,在该模型中可以根据设备的cpu信息精准地判断用户使用的设备是否为安卓模拟器。

3)在服务器端嵌入模拟器识别插件,在服务器端预处理客户端传回的json数据。在服务器端置入属性值预处理模块与模拟器识别模块,所收集的cpu信息多以数值形式呈现,少部分以字符串形式呈现,因此需要对cpu的属性值进行预处理,将所有的属性值处理成数值形式,作为模拟器识别模型的输入。

4)预处理后的数据传入模拟器识别模型识别用户使用的设备是否为模拟器。模拟器识别模型是经大量数据训练的随机森林分类模型,随机森林分类模型将输入的cpu数值信息进行投票分类,最后输出结果为0或1,0表示用户使用的设备是真实安卓设备,1表示用户正在使用安卓模拟器。

5)根据模拟器识别模型输出的结果返回json数据到客户端。服务器端置入结果返回模块,若模型判定用户使用的设备为真实设备,则向客户端返回{“isemulator”:“false”};若模型判定用户使用的设备为安卓模拟器,则向客户端返回{“isemulator”:“true”}。此时客户端的cpu信息收集与结果接收插件中的数据传输模块会接收到传回的json数据并进行相应的操作,例如对于安卓模拟器用户屏蔽敏感功能等。

本发明的安卓模拟器识别系统,包括:

——cpu信息收集模块;

——数据传输模块;

——属性值预处理模块;

——模拟器识别模块;

——结果返回模块;

1、cpu信息收集模块。部署在客户端的app中,用于收集用户使用设备的cpu信息。收集的信息包括读取系统文件中各个cpu的频率、cpu序列号是否存在、cpu名称、可用核心数量、最大及最小频率、设备指令集名称。这些信息是固定值,具有很好的稳定性,并且对于区分基于计算机的安卓模拟器与真实安卓设备的效果较好,因此采用这些属性作为识别模拟器的特征。除此之外,当访问系统文件中的cpu信息时,无需获取系统权限,因此能做到无痕无感获取信息,为用户提供良好的交互体验。

2、数据传输模块。数据传输模块同样部署在客户端的app中,用于将设备的cpu信息传输至服务器端,设备cpu属性名称与对应的属性值一一写入json文件,例如{“cpuavailableprocessors”:“4”}表示设备的cpu核心数量。将封装好的数据使用https协议传输至服务器。之所以选用https协议是为了防止用户信息泄露,https协议在http协议的基础上加入ssl层,对明文数据进行加密并且进行了身份认证,能够建立安全的通道,保护用户的隐私安全。服务器端接受客户端传来的加密json数据,解密成明文并解析,将属性名称对应的属性值插入数据库中。另外,数据传输模块负责接收从服务器端返回的结果信息,该结果信息由json数据表示。

3、属性值预处理模块。由于从客户端获取到的设备cpu信息为字符串形式,因此需要先将其转化成数值形式,再传入模拟器识别模型中进行判断。cpu频率的表示形式为数值与单位组成的字符串,例如“806mhz”,因此仅提取字符串中的数值部分即可;设备的指令集名称为有限的字符串,例如“armeabi-v7a”,因此可以用枚举的方法表示;cpu的名称中包含版本号,例如“aarch64processorrev2(aarch64)”、“armv7processorrev1(v7l)”,其中“processorrev”部分是固定的,而架构版本与版本号会发生变化,因此采用枚举与提取数字组合的方式,在本发明中将这种方法命名为枚举提值赋权法,根据这种方法将枚举法与提取数值法得到组合值作为cpu架构信息的数值化结果。对于剩下的属性依旧使用提取数值或者枚举的方式进行数值化。这一系列数值化的过程被称为预处理。

4、模拟器识别模块。模拟器识别模块位于服务器端,在模拟器识别模块中用到随机森林模型,这是一个已经训练完成的二值分类器,而在前期训练过程中的训练集由志愿者提供的真实安卓设备cpu信息以及市场上流行的各种安卓模拟器的cpu信息构成。随机森林算法是一种集成的机器学习方法,以决策树为基本单元。它利用随机重采样技术和节点随机分裂技术构建多棵决策树,并通过投票得到最终分类结果。随机森林模型中包含多棵决策树,每棵决策树的构建方式如下:从所有的cpu属性中随机抽取n个属性作为分类属性集,然后采用id3算法构建决策树,并且使用信息增益作为度量方式进行属性选择。在构建决策树的每个节点的分裂属性时,选择具有最高信息增益的属性作为当前节点的分裂属性,然后排除该分裂属性对样本信息增益的影响,计算剩下的属性中信息增益最高的属性,并将其作为叶子节点的分裂属性,从而依次构建叶子节点,最终形成决策树。然而决策树的泛化能力不高,因此采用多棵决策树构成随机森林模型,而每棵决策树对输入模型的cpu样本信息有二分类的输出,即0或1,0表示该cpu样本来自真实安卓设备,1表示该cpu样本来自安卓模拟器。多棵决策树的分类结果进行汇总,最后采用“少数服从多数”的结果作为cpu样本的分类结果。

5、结果返回模块。结果返回模块位于服务器端,将模拟器识别模块输出的结果由服务器端发送到客户端app,在此模块中,返回的结果依旧以json数据格式返回,将封装好的数据使用https协议返回至客户端。若模型判定用户使用的设备为真实设备,则向客户端返回{“isemulator”:“false”};若模型判定用户使用的设备为安卓模拟器,则向客户端返回{“isemulator”:“true”}。

具体来说,如图1所示,基于cpu信息的安卓模拟器的识别系统分为两个部分,一是位于安卓设备客户端的app,app中嵌入cpu信息收集与结果接收插件,用于收集安卓设备或基于计算机的安卓模拟器的cpu信息,并且接收从服务器端返回的模拟器识别结果。二是位于服务器端提供的模拟器识别服务,服务器端安装模拟器识别插件,使用随机森林模型根据输入样本的cpu信息判断该样本是否来自模拟器,并将识别结果返回客户端app中。

如图2所示,整个系统的插件构成与总括流程中包括客户端与服务器端分别安装的插件与两者之间的数据交互过程,其中客户端app中安装cpu信息收集与结果接收插件,该插件中包括cpu信息模块与数据传输模块;服务器端中安装模拟器识别插件,该插件中包括属性值预处理模块、模拟器识别模块与结果返回模块。而总括流程图中的步骤具体如下:

步骤100,当用户打开客户端app时,客户端app中运行cpu信息收集与结果接收插件,插件的cpu信息收集模块收集cpu名称、cpu指令集、cpu最大最小频率、cpu序列号、cpu核心数以及cpu各核心频率这7类属性对应的属性值。收集这些cpu信息通过直接访问系统文件中获得,无需获取用户的权限,例如call_phone、body_sensors等,因此不容易被用户感知,保障用户的使用体验。

步骤200,cpu信息收集与结果接收插件中将cpu信息收集模块收集的信息,即设备cpu属性名称与对应的属性值一一对应,以json格式写入文件,例如用{“cpuname”:“aarch64processorrev4(aarch64)”}表示cpu名称、{“cpuabi”:“armeabi-v7a”}表示cpu指令集、{“cpumaxfreq”:“16ghz”}表示cpu最大频率、{“cpuminfreq”:“307mhz”}表示cpu最小频率、{“cpuserial”:“0”}表示是否有cpu序列号、{“cpuavailableprocessors”:“4”}表示设备的cpu核心数量、{“cpu1curfreq”:“806mhz”}表示设备某一核心的频率。将json文件使用https协议传输至服务器。

步骤300,服务器端的java程序上运行模拟器识别插件,插件中的属性值预处理模块通过https协议解密收到的json文件,并对不同类型的属性采用不同的预处理方法。对于数值或者是数值与单位组合的字符串,采用提取数值法;对于有限字符串,采用枚举法;对于字符串与数值的组合形式,采用枚举提值赋权法。这些方法将在介绍图4时详述。json文件中的属性值表示形式均为字符串形式,经过属性值预处理模块的处理之后,所有字符串形式的属性值均被转换成数值形式,接下来将数值形式的属性值输入模拟器识别模块。

步骤400,模拟器识别模块接收样本经过预处理后的属性值,这些属性值输入到已经训练完成的随机森林模型中,随机森林模型由多棵决策树组成,每棵决策树由属性集中随机抽取的n个属性表示,每棵决策树都会输出分类结果。根据“少数服从多数”的原则,采取在所有分类结果中占大多数的类为随机森林模型输出的结果,最终的结果用0或1表示,0表示该cpu样本来自真实安卓设备,1表示该cpu样本来自安卓模拟器。

步骤500,结果返回模块接收到模拟器识别模块对样本的识别结果,同样以json文件格式记录结果,若模型判定用户使用的设备为真实设备,则向客户端返回{“isemulator”:“false”};若模型判定用户使用的设备为安卓模拟器,则向客户端返回{“isemulator”:“true”}。返回的json文件同样基于https协议传输到客户端app中的数据传输模块。

如图3所示,客户端app获取cpu信息的具体方式如下:

步骤110,通过读取系统文件“/proc/cpuinfo”获取设备的cpu名称,读取文件中“processor:”后的字符串作为cpu名称,获取到的属性值如“aarch64processorrev4(aarch64)”、“0”、“armv7processorrev1(v7l)”等。

步骤120,通过调用android.os.build类的cpu_abi方法获取设备的cpu指令集,获取到的属性值如“armeabi”、“armeabi-v7a”等。

步骤130,已知安卓设备的cpu有多个核心,获取cpu的最大频率时需要遍历每个核心的频率,并将所有核心中最大的频率之和作为属性值。该过程需要通过processbuilder方法执行系统命令“/system/bin/cat”,将连接的文件“/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq”中的数值取出作为cpu核心1的最大频率,依次获取cpu所有核心中的最大频率并求和,所得数值作为cpu最大频率,获取到的属性值如“16ghz”等。

步骤140,遍历cpu的每个核心频率,并将所有核心中最小的频率作为属性值,此处不求和。该过程同样需要通过processbuilder方法执行系统命令“/system/bin/cat”并读取文件“/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq”中的数值作为cpu核心1的最小频率,依次获取cpu所有核心中的最小频率,并在所有数值中取最小值作为cpu最小频率,获取到的属性值如“300mhz”等。

步骤150,通过读取系统文件“/proc/cpuinfo”中是否包含“serial”字符串,判断是否包含cpu序列号信息,返回结果用0、1表示。

步骤160,通过调用runtime类getruntime()方法中的availableprocessors()方法获取设备cpu的核心数量,获取到的数值如“2”、“4”等。

步骤170,遍历cpu的每个核心当前的频率,每个核心的频率均可作为一个属性,读取系统文件“/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq”中的数值作为cpu核心1的当前频率,依次获取cpu所有核心中的当前频率,返回的属性值如“1804mhz”等。

如图4所示,属性值预处理模块中对所有属性根据其属性值的类型进行分类,大致分为数值或数值与单位结合类、有限字符串类、字符串与数值结合类。其中,cpu最大最小频率、cpu序列号、cpu核心数、各核心频率属于数值或数值与单位结合类,采用提取数值法进行预处理;cpu指令集属于有限字符串类,采用枚举法进行预处理;cpu名称属于字符串与数值结合类,采用枚举提值赋权法进行预处理。接下来分别介绍着三种方法:

步骤310,提取数值法,将内容为纯数值的字符串,例如表示cpu核心数的“4”,直接转换成整型变量。将内容为数值与单位结合的字符串,例如表示最大cpu频率的“16ghz”,提取其中的“16”,并转换成整型变量。

步骤320,枚举法,如图5所示。枚举法的中间产物为枚举列表,该枚举列表通过前期采集的训练集生成。以cpu指令集属性为例,首先生成一个空的列表,若读取的样本中cpu指令集名称在列表中没有出现过,则在列表的尾部插入该cpu指令集名称,然后查找列表中对应名称的索引作为数值化的结果。

步骤330,枚举提值赋权法,如图6所示。枚举提值赋权法将枚举法数值化的结果与提取数值法数值化的结果分别作为102和10的权重,并进行求和,将所得数值作为数值化的结果。以cpu名称这个属性为例,由于属性值中的“processorrev”部分一致,因此忽略该部分,对“processorrev”前的“aarch64”、“armv7”部分应用枚举法提取数值,对“processorrev”后的数字“4”、“14”等应用提取数值法直接提取数值,对两者数值化的结果进行加权求和并将其作为数值化的结果。

如图7所示,模拟器识别模块的处理流程示意图,其中的随机森林模型由前期采集的数据,即志愿者提供的真实安卓设备cpu信息以及市场上流行的各种安卓模拟器的cpu信息构成。该随机森林模型由11棵决策树构成,最大深度不超过3层,在测试集上的准确率达到99.68%。模拟器识别模块的处理流程如下:

步骤410,获取预处理后的样本数据,从属性值预处理模块获取数值化处理后的样本属性值,每个样本分别由16个属性值组成。每一个样本的属性值分别输入每一棵决策树,经过决策树每一层中结点的分裂属性进行划分,若满足分裂条件便被划分到相应的叶子结点,而叶子结点也具备分裂属性,继续进行划分,直到不具备划分属性的叶子节点输出样本的类别。

步骤420,每一棵决策树都输出对输入样本的分类结果,0表示该样本来自真实安卓设备,1表示该样本来自安卓模拟器。用0和1表示二分类的结果便于“计票”。

步骤430,根据“少数服从多数”原则进行投票,已知每一棵决策树都会输出相应的分类结果,而这个分类结果有决策树的组成结构而定,泛化能力较差,因此认定一颗决策树的分类结果为“弱分类器”的分类结果,而多棵决策树共同的分类结果则组成了“强分类器”的分类结果,故而需要对所有决策树的分类结果进行统计投票。当0的统计次数多于1的统计次数时,认为最终的分类结果为0;当1的统计次数多于0的统计次数时,认为最终的分类结果为1。另外,由于决策树的个数为奇数,不可能出现0的统计次数等于1的情况。

步骤440,得到最终的类别为0或1,即表明样本是否来自安卓模拟器。

最后所应说明的是,以上实施案例仅用以说明本发明的技术方案而非限制,尽管使用事例对本发明进行了详细说明,本领域的普通技术人员应当理解,可对本发明的技术方案进行修改或者等价替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1