一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

攻击代码检测方法、装置、电子设备、程序和存储介质与流程

2022-06-25 02:43:59 来源:中国专利 TAG:


1.本发明涉及信息安全防护技术领域,尤其涉及一种攻击代码检测方法、装置、电子设备、程序和存储介质。


背景技术:

2.网络设备不可避免的会存在漏洞,攻击者会利用这些漏洞构造一段攻击代码对网络设备进行攻击。例如,攻击者会通过攻击代码在网络设备中实现权限提升、执行程序、连接远程机器等操作,从而达到任意控制网络设备的目的。例如,用于攻击的linux服务器的攻击代码shellcode。
3.现有技术中需要事先学习系统调用的调用链序列,并建立正常行为特征库,然后将系统的系统调用的序列和正常序列特征库进行匹配来识别漏洞利用行为。然而这种方法具有如下缺点:需要事先学习建立特征库,必须保证学习过程中没有漏洞利用行为;匹配逻辑较复杂,必定比较消耗过多的系统资源。可见现有的攻击代码识别的方法需要基于大量数据建立特征库,识别过程比较复杂,识别效率较低。


技术实现要素:

4.本发明提供一种攻击代码检测方法、装置、电子设备、程序和存储介质,用以解决可见现有的攻击代码识别的方法需要基于大量数据建立特征库,识别过程比较复杂,识别效率较低的缺陷,实现通过简单的方式识别攻击代码,提高识别效率。
5.本发明提供一种攻击代码检测方法,包括:
6.获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
7.若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
8.根据本发明提供一种攻击代码检测方法,在上述基础上,在获取调用函数的返回地址之前,所述方法还包括:
9.获取监测函数是否被调用的监测信息;其中,所述监测函数根据攻击代码对函数的历史调用信息确定;
10.若所述监测信息为监测函数被调用,则将调用所述监测函数的进程作为所述目标进程。
11.根据本发明提供一种攻击代码检测方法,在上述基础上,所述获取调用函数的返回地址,包括:
12.从内核中获取所述调用函数的函数栈帧,和/或从应用层获取所述调用函数的函数栈帧;
13.根据调用函数的函数栈帧获取所述返回地址。
14.根据本发明提供一种攻击代码检测方法,在上述基础上,所述从内核中获取所述调用函数的函数栈帧,包括:
15.从内核栈中获取所述目标进程陷入内核时,保存在内核栈中的用户态上下文结构;
16.根据所述用户态上下文结构确定所述目标进程栈范围内首个函数栈帧的基地址,作为第一基地址;
17.自所述第一基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
18.根据本发明提供一种攻击代码检测方法,在上述基础上,所述从应用层获取所述调用函数的函数栈帧,包括:
19.从应用层的用户栈中获取所述目标进程栈范围内首个函数栈帧的基地址,作为第二基地址;
20.自所述第二基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
21.根据本发明提供一种攻击代码检测方法,在上述基础上,在所述返回地址不属于系统配置地址之前,还包括:
22.通过内存中的虚拟内存管理结构确定所述返回地址对应的虚拟内存区块结构体,根据所述虚拟内存区块结构体中描述被映射文件的成员所指向的地址,确定所述返回地址是否属于所述系统配置地址;
23.和/或,从应用层获取表示内存布局的内存布局文件,从所述内存布局文件中获取所述返回地址所在的行内容,根据所述行内容中的文件路径,确定所述返回地址是否属于所述系统配置地址。
24.本发明还提供一种攻击代码检测装置,包括:
25.获取模块,用于获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
26.确定模块,用于若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
27.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述攻击代码检测方法的步骤。
28.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述攻击代码检测方法的步骤。
29.本发明还提供一种计算机程序,该计算机程序被处理器执行时实现如上述任一种所述攻击代码检测方法的步骤。
30.本发明提供的一种攻击代码检测方法、装置、电子设备、程序和存储介质,获取系统中进程栈范围内的调用函数的返回地址,若存在返回地址不属于用于存储系统可执行文件的系统配置地址,则确定系统存在攻击代码。通过获取调用函数的返回地址直接实现对攻击代码的检测,无需建立特征库,识别过程简单,有利于提升对攻击代码的识别效率。
附图说明
31.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术
描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1是本发明提供的攻击代码检测方法的流程示意图之一;
33.图2是本发明提供的栈中栈帧的结构示意图;
34.图3是本发明提供的通过内核获取函数调用链的过程示意图;
35.图4是本发明提供的通过内核进行攻击代码检测的流程示意图;
36.图5是本发明提供的攻击代码检测装置的结构框图之一;
37.图6是本发明提供的电子设备的实体结构示意图;
具体实施方式
38.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.图1为本实施例提供的攻击代码检测方法的流程示意图,该攻击代码检测方法可以由待进行攻击代码检测的设备(服务器或终端)执行,例如,该攻击代码检测方法可以由linux服务器执行,具体由植入linux服务器的防护驱动模块执行,参见图1,该攻击代码检测方法包括:
40.步骤101:获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数。
41.系统的进程通常通过调用系统中函数的方式完成该进程对应的任务,被进程所调用的调用函数可以从对进程创建的栈中获取函数栈帧,在函数栈帧中有调用函数的信息,这些信息包括调用函数的局部变量、上一个栈帧的地址和返回地址等等。其中,返回地址表示了函数执行完成后需要执行的代码所在的地址。
42.其中,在目标进程的栈范围内依次获取各调用函数的返回地址,并依序将这些返回地址存储在链表中,即构成了目标进程的函数调用链。因此,函数调用链实际上表示进程中函数间的调用路径。在程序执行过程中每个栈帧对应着一个未运行完的调用函数,栈帧中保存了该调用函数的返回地址、栈基地址和局部变量等等。图2为本实施例提供的栈中栈帧的结构示意图,每一栈帧对应一个调用函数,从栈帧中能够直接获取到调用函数的返回地址。调用函数的返回地址指示了被调用函数处理完成后接下来需要执行的代码所在的地址。
43.需要说明的是,由于每一进程运行时在应用层和内核中均会对进程分配空间,因此通过应用层和内核均能够获取到每一调用函数的函数栈帧,进而获取到调用函数的返回地址。
44.步骤102:若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
45.由于在未受到攻击代码攻击的过程中,系统的进程执行的每一函数的返回地址均应属于为系统的可执行文件分配的系统配置地址,因此在本实施例中若检测到任一返回地
址不属于系统配置地址,则认定系统中存在攻击代码。其中,系统的可执行文件依据系统而定,例如,在linux服务器中,可执行文件为elf文件(elf文件实际上是linux系统上的可执行文件和动态链接库的文件)。例如,由植入linux服务器的防护驱动模块判断目标进程的每一调用函数的返回地址所指向的文件是否均属于elf文件(即返回地址是否属于系统配置地址),若是,则该linux服务器不存在攻击代码,否则,该linux服务器存在攻击代码。系统中存在攻击代码,更为具体地说是目标进程所属的应用程序受到了攻击代码的攻击。
46.本实施例一种攻击代码检测方法,获取系统中进程栈范围内的调用函数的返回地址,若存在返回地址不属于用于存储系统可执行文件的系统配置地址,则确定系统存在攻击代码。通过获取调用函数的返回地址直接实现对攻击代码的检测,无需建立特征库,识别过程简单,有利于提升对攻击代码的识别效率。
47.可见,相比于现有技术,本实施例提供的攻击代码检测方法具有如下优点:实现了linux上进程的监控,不需要学习过程,开箱即用,不需要特征库,检测调用链上的所有返回地址,如果发现检测不合规就告警,适用范围更广,通过内核驱动监控所有进程的调用链,非常高效。
48.进一步地,在上述实施例的基础上,在获取调用函数的返回地址之前,所述方法还包括:
49.获取监测函数是否被调用的监测信息;其中,所述监测函数根据攻击代码对函数的历史调用信息确定;
50.若所述监测信息为监测函数被调用,则将调用所述监测函数的进程作为所述目标进程。
51.需要说明的是,监测函数是根据攻击代码对函数的历史调用信息确定的,被攻击代码调用的可能性较高的函数。由于每一进程运行时,在内核和应用层均为进程分配了空间,因此通过内核和应用层均能实现对监测函数的调用监测,进而触发攻击代码的检测。
52.进一步地,所述获取监测函数是否被调用的监测信息,包括:
53.获取通过内核监测的监测函数是否被调用的监测信息,其中,通过内核监测的监测函数包括如下至少一种:execve、socketcall、bind、connect;
54.和/或,获取通过应用层监测的监测函数是否被调用的监测信息,其中,通过应用层监测的监测函数包括如下至少一种:execve、execl、execlp、execle、execv、execvp、execvpe、bind、connect、system。
55.其中,获取通过内核监测的监测函数是否被调用的监测信息,具体包括:(防护驱动模块)将通过内核监测的监测函数设置为hook点,通过hook检测hook点的监测函数是否被调用。
56.其中,获取通过应用层监测的监测函数是否被调用的监测信息,具体包括:(防护驱动模块)预先生成对监测函数是否被调用进行检查的调用检查代码,并通过ld_preload或/etc/ld.so.preload将该调用检查代码注入到进程(例如,web服务器进程)中,替换容易被攻击代码调用的监测函数。
57.由于监测函数为极有可能被攻击代码调用的函数,因此当监测到某一进程调用了设定的监测函数后,则该进程也有较高的概率受到了攻击代码的攻击,因此可以将该进程作为目标进程,进而通过目标进程的每一调用函数的返回地址确定其是否被攻击函数攻
击。
58.本实施例中,通过监测函数的监测信息缩小了需要进行攻击代码检测的函数范围,提高了攻击代码检测过程的有效性,避免对系统资源的无效占用。
59.进一步地,在上述各实施例的基础上,所述获取调用函数的返回地址,包括:
60.从内核中获取所述调用函数的函数栈帧,和/或从应用层获取所述调用函数的函数栈帧;
61.根据调用函数的函数栈帧获取所述返回地址。
62.由于进程运行时,在内核和应用层均为进程分配了空间,因此通过内核和应用层均能够获取进程的调用函数的函数栈帧。如图2所示,从每一栈帧中能够读取到调用函数的返回地址。
63.本实施例中,通过内核和/或应用层实现了调用函数的函数栈帧的获取,进而通过调用函数的函数栈帧获取每一调用函数的返回地址,从而实现对系统是否存在攻击代码的判断。
64.进一步地,在上述各实施例的基础上,所述从内核中获取所述调用函数的函数栈帧,包括:
65.从内核栈中获取所述目标进程陷入内核时,保存在内核栈中的用户态上下文结构;
66.根据所述用户态上下文结构确定所述目标进程栈范围内首个函数栈帧的基地址,作为第一基地址;
67.自所述第一基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
68.需要说明的是,函数栈帧的基地址表示了函数栈帧的起始位置,由于目标进程栈范围内是按照目标进程对函数的调用关系依次存储的函数栈帧,因此,自第一基地址开始依照栈本身的结构特征,即可遍历到目标进程栈范围内自栈起始地址到栈顶的每一函数栈帧。
69.进程在应用层运行时处于用户态,进程在内核态运行时处于内核态。进程运行过程中,通过系统调用陷入到内核态,当进程陷入到内核态时,会将在用户态执行时的上下文信息转入内核中,因此通过内核也能获取到进程的所有调用函数的信息。用户态执行时的上下文信息对应的用户态上下文结构中包含了进程栈范围每一函数栈帧的地址,因而通过用户态上下文结构能够获取到首个函数栈帧的基地址,进而自首个函数栈帧的基地址开始对进程栈范围内的每一函数栈帧进行遍历,即可获取到进程栈范围内的每一函数栈帧。
70.对于内核,(防护驱动模块)可以通过内核中的检查函数a获取目标进程栈范围内的每一函数栈帧中的返回函数,组成函数调用链,遍历所述函数调用链的每一返回地址,判断是否存在任一返回地址不属于所述系统配置地址。图3为本实施例提供的通过内核获取函数调用链的过程示意图,参见图3,该过程包括:
71.从目标进程的内核栈上获取用户态上下文结构pt_regs;
72.从pt_regs上获取当前的用户态栈帧基地址bp;
73.沿着bp向上遍历出所有的栈帧,并保存每个栈帧的返回地址到一个数组中,这个数组就是存储调用链的数据结构。
74.具体地,对于内核,(防护驱动模块)可以通过内核中的检查函数a获取函数调用链,进而通过函数调用链获取每一调用函数的返回地址,根据每一调用函数的返回地址判断系统是否存在攻击代码。图4为本实施例提供的通过内核进行攻击代码检测的流程示意图,该流程包括:当(防护驱动模块)hook到系统调用execve、socketcall、bind、connect时,进入检查函数a。检查函数a首先从hook到的目标进程的用户态上下文里获取调用链,调用链上包含所有栈帧的返回地址,循环判断每一个返回地址是否来自elf文件。经过判断如果发现返回地址不是来自elf文件,那么极有可能是正在执行的shellcode代码,产生告警日志。如果所有返回地址都来自elf文件,那么本次检查执行完毕。
75.本实施例中,通过内核栈实现了每一调用函数返回地址的获取,从而根据返回地址对是否存在攻击代码进行判断,在检测到存在攻击代码时,及时产生告警,以及时处理攻击代码,保证系统安全。
76.进一步地,在上述各实施例的基础上,所述从应用层获取所述调用函数的函数栈帧,包括:
77.从应用层的用户栈中获取所述目标进程栈范围内首个函数栈帧的基地址,作为第二基地址;
78.自所述第二基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
79.具体地,目标进程栈范围内是按照目标进程对函数的调用关系依次存储的函数栈帧,因此,自第二基地址开始依照栈本身的结构特征,即可遍历到目标进程栈范围内自栈起始地址到栈顶的每一函数栈帧。
80.对于应用层,(防护驱动模块)可以通过检查函数b获取目标进程栈范围内的每一函数栈帧中的返回函数,组成函数调用链,遍历所述函数调用链的每一返回地址,判断是否存在任一返回地址不属于所述系统配置地址。其中,检查函数b为预先注入到待进行攻击代码检测的目标程序中的函数,具体来说,(防护驱动模块)通过调用检查代码监测到监测函数被调用后,通过调用监测函数的目标进程中注入的检查函数b直接读取栈帧基地址bp,自栈帧基地址bp开始遍历,得到整个函数调用链。
81.本实施例中,通过应用层实现了每一调用函数返回地址的获取,从而根据返回地址对是否存在攻击代码进行判断,在检测到存在攻击代码时,及时产生告警,以及时处理攻击代码,保证系统安全。
82.进一步地,在上述各实施例的基础上,在所述返回地址不属于系统配置地址之前,还包括:
83.通过内存中的虚拟内存管理结构确定所述返回地址对应的虚拟内存区块结构体,根据所述虚拟内存区块结构体中描述被映射文件的成员所指向的地址,确定所述返回地址是否属于所述系统配置地址;
84.和/或,从应用层获取表示内存布局的内存布局文件,从所述内存布局文件中获取所述返回地址所在的行内容,根据所述行内容中的文件路径,确定所述返回地址是否属于所述系统配置地址。
85.当所述虚拟内存区块结构体中描述被映射文件的成员的变量指向的地址不属于系统配置地址,所述返回地址不属于系统配置地址,系统存在攻击代码。
86.当所述行内容中的文件路径不包括属于系统配置地址的文件路径,则所述返回地址不属于系统配置地址,系统存在攻击代码。
87.具体地,以linux服务器为例,对于内存可以具体通过如下方法判断返回地址是否指向系统的可执行文件:
88.获取目标进程的虚拟内存管理结构mm_struct;
89.遍历mm_struct上的红黑树节点,查找返回地址所在的vm_area_struct结构(即虚拟内存区块结构体);
90.检查该vm_area_struct结构的vm_file成员(即描述被映射文件的成员)变量是否指向一个elf文件,如果不是说明返回地址可能来自正在执行中的shellcode。
91.其中,红黑树节点是虚拟内存管理结构mm_struct中的二叉搜索树,通过红黑树节点能够快速查找到返回地址所在的vm_area_struct结构。
92.具体地,以linux服务器为例,对于应用层可以具体通过如下方法判断返回地址是否指向系统的可执行文件:
93.读取/proc/self/maps文件(即内存布局文件)。
94.解析该内存布局文件的每一行,其中,/proc/self/maps文件的每一行表示一个虚拟内存块,每一行的行内容中包括虚拟内存块的起始地址和结束地址,如果是elf文件的内存映射,还会显示elf文件的路径;
95.判断返回地址所在的那一行中是否有对应的elf文件路径,若没有,则说明返回地址可能来自正在执行中的shellcode。
96.本实施例中,从内存和应用层提供了根据返回地址判断系统是否存在攻击代码的过程,实现了攻击代码的检测,无需建模,检测过程简单,检测效率较高。
97.本技术采用内核驱动的方式监看进程调用链,相比其他方法性能更好;遍历调用链上的每一个返回地址并进行判断,能稳定的检测出正在执行中的shellcode代码。
98.图5为本实施例提供的一种攻击代码检测装置的结构框图,参见图5,包括获取模块501和确定模块502;
99.获取模块501,用于获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
100.确定模块502,用于若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
101.本实施例提供的攻击代码检测装置适用于上述各实施例提供的攻击代码检测方法,在此不再赘述。
102.本实施例提供一种攻击代码检测装置,获取系统中进程栈范围内的调用函数的返回地址,若存在返回地址不属于用于存储系统可执行文件的系统配置地址,则确定系统存在攻击代码。通过获取调用函数的返回地址直接实现对攻击代码的检测,无需建立特征库,识别过程简单,有利于提升对攻击代码的识别效率。
103.根据本发明提供一种攻击代码检测装置,在上述基础上,在获取调用函数的返回地址之前,所述方法还包括:
104.获取监测函数是否被调用的监测信息;其中,所述监测函数根据攻击代码对函数的历史调用信息确定;
105.若所述监测信息为监测函数被调用,则将调用所述监测函数的进程作为所述目标进程。
106.根据本发明提供一种攻击代码检测装置,在上述基础上,所述获取调用函数的返回地址,包括:
107.从内核中获取所述调用函数的函数栈帧,和/或从应用层获取所述调用函数的函数栈帧;
108.根据调用函数的函数栈帧获取所述返回地址。
109.根据本发明提供一种攻击代码检测装置,在上述基础上,所述从内核中获取所述调用函数的函数栈帧,包括:
110.从内核栈中获取所述目标进程陷入内核时,保存在内核栈中的用户态上下文结构;
111.根据所述用户态上下文结构确定所述目标进程栈范围内首个函数栈帧的基地址,作为第一基地址;
112.自所述第一基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
113.根据本发明提供一种攻击代码检测装置,在上述基础上,所述从应用层获取所述调用函数的函数栈帧,包括:
114.从应用层的用户栈中获取所述目标进程栈范围内首个函数栈帧的基地址,作为第二基地址;
115.自所述第二基地址开始获取所述目标进程栈范围内的每一函数栈帧,得到所述调用函数的函数栈帧。
116.根据本发明提供一种攻击代码检测装置,在上述基础上,在所述返回地址不属于系统配置地址之前,还包括:
117.通过内存中的虚拟内存管理结构确定所述返回地址对应的虚拟内存区块结构体,根据所述虚拟内存区块结构体中描述被映射文件的成员所指向的地址,确定所述返回地址是否属于所述系统配置地址;
118.和/或,从应用层获取表示内存布局的内存布局文件,从所述内存布局文件中获取所述返回地址所在的行内容,根据所述行内容中的文件路径,确定所述返回地址是否属于所述系统配置地址。
119.图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(communications interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行攻击代码检测方法,该方法包括:
120.获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
121.若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
122.此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以
软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
123.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的攻击代码检测方法,该方法包括:
124.获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
125.若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
126.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的攻击代码检测方法,该方法包括:
127.获取调用函数的返回地址;其中,所述调用函数为被系统的目标进程调用的函数;
128.若所述返回地址不属于系统配置地址,则所述系统中存在攻击代码;所述系统配置地址为目标进程加载的可执行文件的代码段地址。
129.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
130.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
131.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献