隐私泄露检测方法及系统与流程

文档序号:12467739阅读:3567来源:国知局
隐私泄露检测方法及系统与流程

本发明涉及移动终端安全技术领域,具体而言,涉及一种隐私泄露检测方法及系统。



背景技术:

随着移动设备普及范围越来越广泛、功能越来越强大。在实际生活中,移动设备中存储的数据更加的复杂、敏感,其中不仅包括用户的个人隐私数据(通讯录、短信、电子邮件、地理位置、相册、浏览记录等),还包括手机系统记录的日志,这些有价值的数据都是攻击者的攻击目标。这些有价值的数据可能是以恶意软件窃取的方式泄露,还可能是因对第三方应用程序的数据的访问权限设置不合理而导致这些有价值的数据的泄露,给用户带来很大的困扰以及损失。

对应用程序的隐私泄露行为进行检测已经成为最为流行的安全技术之一。目前的应用程序安全分析工具可分为静态分析工具和动态分析工具。静态分析工具存在着分析结果不精确、对字段及对象不敏感分析等不足之处,而动态分析工具存在代码覆盖率不全面以及路径爆炸的问题。总而言之,目前应用程序安全分析工具不能有效发现应用程序组件内的隐私泄露行为。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种能有效发现程序组件内的隐私泄露行为的方法及系统,以改变现有技术中不能有效发现应用程序组件内的隐私泄露行为的缺陷。

本发明较佳实施例提供了一种隐私泄露检测方法,所述方法包括:

构建敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表;

根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数,由所述安装包中的敏感数据源、泄露点和回调函数建立组件生命周期模型;

通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数;

将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径;

输出隐私泄露的可疑路径。

本发明另一较佳实施例提供了一种隐私泄露检测系统,所述系统包括:

构建模块,用于构建敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表;

预处理模块,用于根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数,由所述安装包中的敏感数据源、泄露点和回调函数建立组件生命周期模型;

处理模块,用于通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数;

控制流与数据流分析模块,用于将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径;

分析结果输出模块,用于输出隐私泄露的可疑路径。

相对于现有技术而言,本发明具有以下有益效果:

根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数,由所述安装包中的敏感数据源、泄露点和回调函数建立组件生命周期模型。通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数。将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径,输出隐私泄露的可疑路径。可以有效发现应用程序组件内的隐私泄露的可疑路径,可以通过对上述可疑路径的修护,防止隐私泄露。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例提供的移动终端的方框示意图。

图2为本发明实施例提供的隐私泄露检测方法的流程示意图。

图3为图2中步骤S110的子步骤的流程示意图。

图4为图2中步骤S140的部分子步骤的流程示意图。

图5为含有污点函数的示例代码的信息流分析分解图。

图6为图2中步骤S140的另一部分子步骤的流程示意图。

图7为对象别名的污点分析示意图。

图8为进行控制流分解的示例代码。

图9为含有污点函数的示例代码的控制流分解图。

图10为本发明实施例提供的隐私泄露检测方法的另一种流程示意图。

图11为本发明实施例提供的DroidBench检测结果图。

图12为本发明实施例提供的隐私泄露检测系统的方框示意图。

图13为本发明实施例提供的隐私泄露检测系统的另一种方框示意图。

图标:100-移动终端;110-存储器;120-存储控制器;130-处理器;200-隐私泄露检测系统;210-构建模块;220-预处理模块;230-处理模块;240-控制流与数据流分析模块;250-分析结果输出模块;260-检测模块。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

请参照图1,图1是本发明较佳实施例提供的移动终端100的方框示意图。本发明实施例中所述移动终端100可以是,但不限于,智能手机、平板电脑等。本实施例中,所述移动终端100的操作系统可以是,但不限于,安卓(Android)系统、IOS(iPhone operating system)系统等。优选地,本实施例中,所述移动终端100的操作系统为Android系统。如图1所示,所述移动终端100包括:存储器110、存储控制器120、处理器130以及隐私泄露检测系统200。

所述存储器110、存储控制器120及处理器130各元件之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器110中存储有隐私泄露检测系统200,所述隐私泄露检测系统200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器110中的软件功能模块。所述处理器130通过运行存储在存储器110内的软件程序以及模块,如本发明实施例中的隐私泄露检测系统200,从而执行各种功能应用以及数据处理,即实现本发明实施例中的隐私泄露检测方法。

其中,所述存储器110可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器110用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。所述处理器130以及其他可能的组件对存储器110的访问可在所述存储控制器120的控制下进行。

所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等。还可以是数字信号处理器(DSP))、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

可以理解,图1所示的结构仅为示意,移动终端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

请参照图2,图2是本实施例提供的隐私泄露检测方法的流程图。所述方法应用于所述移动终端100的操作系统(如,Android)中的应用程序(application software)。下面以Android操作系统的实现过程为例。图2中的流程可以由所述处理器130实现。下面对隐私泄露检测方法的具体流程进行详细阐述。

步骤S110,构建敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表。

请参照图3,所述步骤S110包括子步骤S111以及子步骤S112。

所述子步骤S111,构建回调函数的应用程序接口表。

所述子步骤S112,由权限与敏感数据源的应用程序接口表、权限与泄露点的应用程序接口表构建敏感数据源、泄露点的应用程序接口表。

在本实施例中,通过对隐私泄露成因的分析,结合Android开发文档,构建回调函数的应用程序接口表。同时构建Android权限与敏感数据源的应用程序接口表,以及Android权限与泄露点的应用程序接口表。通过已经构建的Android权限与敏感数据源的应用程序接口表、Android权限与泄露点的应用程序接口表,构建敏感数据源、泄露点的应用程序接口表。

步骤S120,根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数,由所述安装包中的敏感数据源、泄露点和回调函数建立组件生命周期模型。

对Android应用程序的字节码文件和配置文件进行解析,得到应用程序相关的组件信息以及相应的结构。解析步骤为,解析manifest文件、解析.dex文件、解析layout布局文件。通过对AndroidManifest.xml文件解析可以获取到应用程序名称、版本信息、申请的权限信息、程序注册的组件信息等等,从而得到应用程序的基本结构。再对.dex文件及layout布局文件进行解析,从而找到组件入口与事件函数入口。

根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表在解析后得到的信息中,查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数。其中,组件的生命周期是指组件从被构造运行开始,直至被销毁的整个时段。不同于传统的Java程序,Android程序入口并不是以传统的主函数为其函数入口,而是以其相应的组件的入口为函数入口。所述组件生命周期模型包含了入口点、异步执行组件以及回调函数。

步骤130,通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数。

其中,所述回调函数用于处理系统事件和用户界面互动事件。所述虚拟主函数作为控制流分析的单入口单出口程序段。

步骤140,将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径。

请参照图4,所述步骤S140包括子步骤S141以及子步骤S142。

所述子步骤141,将虚拟主函数通过Soot静态分析框架转换为由中间件语言表示的字节码文件。

所述子步骤142,通过所述字节码文件及Soot静态分析框架得到函数间控制流图。

Soot静态分析框架是一个Java编译优化框架,可以利用它实现Java字节码程序的数据流分析和控制流分析。Soot静态分析框架的工作流程具体为:首先Soot静态分析框架将Java源码(.java)或者字节码文件(.class)作为输入,然后对输入的程序进行分析,最后经过中间件语言转化分析得到优化后的字节码文件,得到的这些字节码文件可以在Java虚拟机上运行。

Soot静态分析框架提供了四种中间件语言表示,分别为Baf、Jimple、Shimple、Grimp,代表了对Java源码或字节码四种不同程度的抽象。本发明实施例中将所述虚拟主函数通过Soot静态分析框架转换为由Jimple表示的字节码文件。

Soot静态分析框架的执行流程分为函数内执行数据流和函数间执行流程两种:两者的区别是函数内执行数据流将输入生成Jimple代码,而函数间执行流程需要全程序模式(Whole-program mode)。在此模式下Soot静态分析框架包含3个额外的数据包,分别是cg(调用图生成),全局Jimple变换包(whole Jimple transformation pack,wjtp)和全局Jimple注释包(whole Jimple annotation pack,wjap)。

Soot静态分析框架还在包soot.toolkits.graph中提供了几种不同的控制流图,在此基础上构建有向图。Soot静态分析框架定义了特定函数用于获取控制流图的入口点和出口点、已知节点的前驱节点和后继节点和节点的数目等。构建制流图有三种不同的实现方式:BriefUnitGraph,ExceptionalUnitGraph和TrapUnitGraph。控制流图适用于函数内分析。

Soot静态分析框架中还在包soot.jimple.toolkits.callgraph中提供了创建调用图的功能,它用不同的边界代表所有已知的调用,包括显示函数调用、隐式函数调用。调用图的每条边都包含四个元素:原始函数、原始语句、目标函数、边的类型(如静态调用、虚拟调用或接口调用等不同类型)。

通过Jimple表示的字节码文件及Soot静态分析框架中的构建控制流图的包、创建调用图的包以及内置的指向分析功能接口,得到函数调用图和所述函数间控制流图(Inter-proceduralcontrol-flow graph,ICFG)。

所述隐私泄露检测方法基于IFDS分析框架在每个控制流交汇处保留分析结果。假设所有的所述回调函数可以通过任何可能的顺序调用,但只能在当前组件运行时才能被调用,从而为每个组件从声明周期函数开始计算调用图,进而所述函数调用图会根据新发现的回调函数不断扩充。同时,为了尽可能提高分析的精确性,本发明为每个分析的应用程序生成一个新的虚拟主函数。

所述数据流污点分析算法是IFDS算法,所述算法是一种精确的数据流污点分析算法。如果污点数据是分配在堆中的值(如对象属性、数组等),那么所述算法会反向分析,查找该值的别名。所述IFDS算法用于解决过程间(Interprocedure)、有限(Finite)、分配(Distributive)、子集(Subset)问题。

所述数据流污点分析算法的主要思想是:函数中的每个指令都对应一个单一节点n,n∈N*。其中,N*代表程序所有指令的整体集合。同样有一组与之对应的有向边E*的集合,它代表了指令间控制流的关系。

IFDS图G*=(N*,E*),代表程序中所有指令之间的过程内数据流与过程间数据流。对每个程序p,有:

1)一个单一开始节点sp

2)一个单一出口节点ep

3)一个调用节点集合Callp

4)一个返回节点集合Retp

5)一条从每个调用节点cp∈Callp到对应被调函数s’p的开始节点的有向边;

6)一条从每个e’p到返回节点rp∈Retp的有向边;

7)一条从每个调用节点cp到相应的返回节点rp的有向边。

Np是集合N*的子集,由程序p的节点组成。IFDS问题可以表示为G#IP=(N#,E#),集合N*中的每个节点n都可以分解为对应的集合N#中的节点n#,N#是有所有的<n,d>对组成的,其中d是集合D中的一个元素或者是特殊的0元素。通常,N#=N*×(D∪{0})。0元素代表空集。将0元素在流函数中传递是指流函数需要返回给定节点处为true的所有元素。IFDS算法将数据流分析问题转化为求解图内节点是否可达的问题,集合E#中的有向边代表了N#集合中节点的数据流关系。

如果FLOW(m,n)是N*中节点m到节点n的流函数,d1、d2是D∪{0}中的元素,则有:E#={<m,d1>→<n,d2>|m→n∈E*且d2∈FLOW(m,n)({d1})}。E#中以0元素开始的有向边代表一个常量函数。对于分配流函数f,有f(a)∪f(b)=f(a∪b)。调用参数为集合D的f函数与参数分别为D中的每个元素与空集的f函数,它们的结果是相同的,即:

请参照图5,图5是含有污点函数的示例代码的信息流分析分解图。图5中有四种不同种类的有向边,分别为调用边、返回边、调用到返回边、普通边。其中调用边是将调用者与被调函数联系起来,并将调用者的相关代码元素信息传递给被调函数。返回边与调用边相反。调用到返回边直接将函数调用前的信息传递给后继语句,一般传递的信息与调用者无关。普通边则是除上述三种之外的其他所有有向边。

请参照图6,所述步骤S140还包括子步骤S145、子步骤S146、子步骤S147、子步骤S148以及子步骤S149。

所述子步骤S145,将安装包中的敏感数据源作为起点进行正向分析,查找所述安装包中的敏感数据源的别名,并标记为污点,标记为污点的别名为未激活状态。

所述子步骤S146,再将上述别名作为分析的起点,同时进行反向分析和正向分析,所述反向分析中加入正向分析的上下文环境,查找所述别名的新的别名,并标记为污点,新的污点别名仍为未激活状态。

所述子步骤S147,在所述正向分析的上下文环境中进行反向分析,当产生了正向分析在执行到所述安装包中的敏感数据源或泄漏点的应用程序接口时,所述新的污点别名由未激活状态转变为激活状态。

所述子步骤S148,对找到的所有处于未激活状态的新的污点别名重复上述步骤进行分析得到其他处于激活状态的污点别名。

所述子步骤S149,记录处于激活状态的污点别名到所述安装包中的泄漏点的路径,所述路径为所述可疑路径。

请参照图7,图7是对象别名的污点分析示意图。①是将被标记为污点的数据变量w作为正向分析的起点,w正向传递,由x.f=w将堆对象x.f标记为污点。②将w和x.f作为分析起点,同时进行正向分析和反向分析。③当一个堆对象被标记,反向分析将分别搜索每个对象的别名,如本例中的x.f。⑦在所述反向分析中加入正向分析的上下文环境,如发现对象别名b.f,并将其作为一个污点别名进行正向分析。此时的污点别名均为未激活状态。

请参照图8及图9,黑色节点代表每条语句前后的数据流元素,细实线黑色和粗实线黑色箭头代表数据流向。当x.f被标记后,正向分析为x.f产生一个反向分析的实例。一般情况,传统的分析方法是从0到x.f,这种方法使得x.f无论什么情况下都会被标记为污点,这种分析方式由于不够准确会导致误报。同样,使得sink(p2.f)中p2.f也成为一个污点。本实施例中,在反向分析中加入正向分析的上下文环境(如,第9行代码x=out),反向分析只会在当前被调用函数内执行,不会执行到函数调用者的上下文环境中去。当反向分析产生一个out.f的正向分析时,会将参数in的上下文环境带入到正向分析中,减少不可达路径的误报。因此,对于调用函数taintIt(),本实施例发现的所有污点数据是根据初始参数in是否被标记为污点来决定的。

请参照图10,图10是本发明实施例提供的隐私泄露检测方法的另一种流程示意图。所述方法还包括:

步骤S160,通过预设的开源测试工具对所述可疑路径进行检测,评估所述方法的有效性和正确性。

所述预设的开源测试工具为DroidBench开源测试工具。DroidBench测试工具包含了120个测试用例,测试用例包含多个种类,可以用于静态污点分析中关键问题的测试,如字段敏感性、对象敏感性、Android生命周期、回调函数异步处理、UI交互等。

请参照图11,图11是本发明实施例提供的DroidBench检测结果图。测试结果标明,所述方法发现隐私数据泄露的精确度很高(如,大于等于82%),同时误报率比较低。

请参照图12,本发明实施例还提供一种隐私泄露检测系统200。所述隐私泄露检测系统200包括:构建模块210、预处理模块220、处理模块230、控制流与数据流分析模块240以及分析结果输出模块250。

所述构建模块210,用于构建敏感数据源、泄漏点的应用程序接口表和回调函数的应用程序接口表。

所述构建模块210构建敏感数据源、泄漏点的应用程序接口表和回调函数的应用程序接口表的方式包括:

构建回调函数的应用程序接口表;

由权限与敏感数据源的应用程序接口表、权限与泄漏点的应用程序接口表构建敏感数据源、泄漏点的应用程序接口表。

所述预处理模块220,用于根据构建的敏感数据源、泄漏点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄漏点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄漏点和回调函数,由所述安装包中的敏感数据源、泄漏点和回调函数建立组件生命周期模型。

所述处理模块230,用于通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数。

所述控制流与数据流分析模块240,用于将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径。

所述控制流与数据流分析模块240将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径的方式包括:

将所述虚拟主函数通过Soot静态分析框架转换为由中间件语言表示的字节码文件;

通过所述字节码文件及Soot静态分析框架得到所述函数间控制流图。

所述控制流与数据流分析模块240将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径的方式还包括:

将所述安装包中的敏感数据源作为起点进行正向分析,查找所述安装包中的敏感数据源的别名,并标记为污点,标记为污点的别名为未激活状态;

再将上述别名作为分析的起点,同时进行反向分析和正向分析,所述反向分析中加入正向分析的上下文环境,查找所述别名的新的别名,并标记为污点,新的污点别名为仍未激活状态;

在所述正向分析的上下文环境中进行反向分析,当产生了正向分析在执行到所述安装包中的敏感数据源或泄露点应用程序接口时,所述新的污点别名由未激活状态转变为激活状态;

对找到的所有处于未激活状态的新的污点别名重复上述方式进行分析得到其他处于激活状态的污点别名;

记录处于激活状态的污点别名到所述安装包中的泄露点的路径,所述路径为所述可疑路径。

分析结果输出模块250,用于输出隐私泄露的可疑路径。

请参照图13,图13是本发明实施例提供的隐私泄露检测系统200的另一种方框示意图。所述隐私泄露检测系统200还包括检测模块260。所述检测模块260用于通过预设的开源测试工具对所述可疑路径进行检测,评估所述隐私泄露检测系统200的有效性和正确性。

综上所述,本发明实施例提供了隐私泄露检测方法及系统。根据构建的敏感数据源、泄露点的应用程序接口表和回调函数的应用程序接口表查找安装包中的敏感数据源、泄露点和回调函数的应用程序接口,得到所述安装包中的敏感数据源、泄露点和回调函数,由所述安装包中的敏感数据源、泄露点和回调函数建立组件生命周期模型。通过所述安装包中的回调函数及所述组件生命周期模型生成虚拟主函数。将所述虚拟主函数经过变换生成函数间控制流图,以所述安装包中的敏感数据源为分析起点,根据数据流污点分析算法对所述函数间控制流图进行分析,得到隐私泄露的可疑路径,输出隐私泄露的可疑路径。可以用于恶意软件分析,有效发现应用程序组件内的隐私泄露的可疑路径,加快信息泄露分析工作的效率,通过对上述可疑路径的修护,防止隐私泄露。

在本发明所提供的实施例中,应该理解到,所揭露的系统和方法,也可以通过其它的方式实现。以上所描述的系统和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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