首页 / 专利库 / 软件 / 软件 / 用于终端的软件漏洞修复方法和装置

用于终端的软件漏洞修复方法和装置

阅读:545发布:2021-06-10

专利汇可以提供用于终端的软件漏洞修复方法和装置专利检索,专利查询,专利分析的服务。并且本 申请 公开了用于终端的 软件 漏洞修复方法和装置。所述方法的一具体实施方式包括:接收 服务器 发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、 定位 信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定 位置 的信息;确定所述定位信息指示的所述软件漏洞对应的待修复位置;在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;将查找到的信息添加到所述修复代码的预定位置得到兼容代码;通过所述兼容代码修复所述软件漏洞。该实施方式实现了兼容不同设备的软件漏洞的热修复,保护了终端设备的安全。,下面是用于终端的软件漏洞修复方法和装置专利的具体信息内容。

1.一种用于终端的软件漏洞修复方法,其特征在于,所述方法包括:
接收服务器发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、定位信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定位置的信息;
确定所述定位信息指示的所述软件漏洞对应的待修复位置;
在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;
将查找到的信息添加到所述修复代码的预定位置得到兼容代码;
通过所述兼容代码修复所述软件漏洞。
2.根据权利要求1所述的方法,其特征在于,当所述软件漏洞为Java层漏洞时,所述修复代码包括由Java语言编写的用于修复所述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,或由所述字节码编译出的机器指令;当所述软件漏洞为本地方法Native层漏洞时,所述修复代码包括由C/C++语言编写的用于修复所述软件漏洞的程序编译出的机器指令。
3.根据权利要求2所述的方法,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述软件漏洞为Java层漏洞时,所述定位信息还包括:预先确定的与所述软件漏洞关联的类的名称和方法的名称,及预先确定的与所述软件漏洞关联的方法参数个数和参数类型名称;以及
所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:
根据所述软件漏洞所在文件的路径信息、所述类的名称、所述方法的名称、所述方法参数个数和所述参数类型名称,通过调用Java虚拟机接口获取所述方法在所述Java虚拟机内部的方法描述结构体。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括以下二进制特征中的至少一项:预先确定的与所述软件漏洞关联的组件的名称、预先确定的与所述软件漏洞关联的函数的名称、预先确定的与所述软件漏洞关联的参数个数和参数类型、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与所述软件漏洞关联的语句或语句编译而成的指令序列的二进制特征;以及所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:
根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;
将所述地址范围内查找到的所述二进制特征所在的位置确定为所述定位信息指示的所述软件漏洞对应的待修复位置,其中,所述二进制特征所在的位置包括以下至少一项:所述二进制特征所在的代码块的位置、所述二进制特征所在的函数的位置、所述二进制特征所在的组件的位置、所述二进制特征所在的组件的预定部分的位置。
5.根据权利要求1-3中任一项所述的方法,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与所述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:
根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;
将所述地址范围内的机器指令转换为汇编序列;
在所转换的汇编序列中查找所述汇编序列特征,以确定所述汇编序列特征对应的位置,其中,所述汇编序列特征对应的位置包括以下至少一项:所述汇编序列特征对应的代码块的位置、所述汇编序列特征对应的函数的位置、所述汇编序列特征对应的组件的位置、所述汇编序列特征对应的组件的预定部分的位置。
6.根据权利要求1-3中任一项所述的方法,其特征在于,所述通过所述兼容代码修复所述软件漏洞,包括:
将所述待修复位置的代码修改为所述兼容代码;或者
将所述兼容代码存储在所述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者
通过所述兼容代码静态替换所述软件漏洞所在的组件或所述软件漏洞所在的组件的预定部分;或者
通过所述兼容代码修改所述软件漏洞所在的方法的方法描述结构体信息以替换所述软件漏洞所在的方法。
7.根据权利要求1-3中任一项所述的方法,其特征在于,所述通过所述兼容代码修复所述软件漏洞,包括:
响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,其中,所述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。
8.根据权利要求7所述的方法,其特征在于,所述响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,包括:
当所述预定程序为内核程序时,将通过所述兼容代码修复所述软件漏洞的内容插入内核模块;
当所述预定程序为非内核程序时,修改或替换所述预定程序,以在所述预定程序中加入通过所述兼容代码修复所述软件漏洞的内容;或者对所述预定程序的依赖项,使得所述预定程序启动时,通过所述兼容代码修复所述软件漏洞;或者将通过所述兼容代码修复所述软件漏洞的内容动态注入到所述预定程序执行时创建的进程中。
9.根据权利要求1-3中任一项所述的方法,其特征在于,所述接收服务器发送的软件漏洞的修复文件,包括:
检验所述终端是否存在预定的软件漏洞;
如果是,则向所述服务器发送所述软件漏洞的修复文件的获取请求,其中,所述请求还包括所述终端的系统信息;
接收服务器发送的与所述系统信息相匹配的所述软件漏洞的修复文件。
10.一种用于终端的软件漏洞修复装置,其特征在于,所述装置包括:
接收单元,配置用于接收服务器发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、定位信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定位置的信息;
确定单元,配置用于确定所述定位信息指示的所述软件漏洞对应的待修复位置;
查找单元,配置用于在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;
添加单元,配置用于将查找到的信息添加到所述修复代码的预定位置得到兼容代码;
修复单元,配置用于通过所述兼容代码修复所述软件漏洞。
11.根据权利要求10所述的装置,其特征在于,当所述软件漏洞为Java层漏洞时,所述修复代码包括由Java语言编写的用于修复所述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,或由所述字节码编译出的机器指令;当所述软件漏洞为本地方法Native层漏洞时,所述修复代码包括由C/C++语言编写的用于修复所述软件漏洞的程序编译出的机器指令。
12.根据权利要求11所述的装置,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述软件漏洞为Java层漏洞时,所述定位信息还包括:预先确定的与所述软件漏洞关联的类的名称和方法的名称,及预先确定的与所述软件漏洞关联的方法参数个数和参数类型名称;以及
所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息、所述类的名称、所述方法的名称、所述方法参数个数和所述参数类型名称,通过调用Java虚拟机接口获取所述方法在所述Java虚拟机内部的方法描述结构体。
13.根据权利要求10-12中任一项所述的装置,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括以下二进制特征中的至少一项:预先确定的与所述软件漏洞关联的组件的名称、预先确定的与所述软件漏洞关联的函数的名称、预先确定的与所述软件漏洞关联的参数个数和参数类型、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列的二进制特征;以及所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内查找到的所述二进制特征所在的位置确定为所述定位信息指示的所述软件漏洞对应的待修复位置,其中,所述二进制特征所在的位置包括以下至少一项:所述二进制特征所在的代码块的位置、所述二进制特征所在的函数的位置、所述二进制特征所在的组件的位置、所述二进制特征所在的组件的预定部分的位置。
14.根据权利要求10-12中任一项所述的装置,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与所述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内的机器指令转换为汇编序列;在所转换的汇编序列中查找所述汇编序列特征,以确定所述汇编序列特征对应的位置,其中,所述汇编序列特征对应的位置包括以下至少一项:所述汇编序列特征对应的代码块的位置、所述汇编序列特征对应的函数的位置、所述汇编序列特征对应的组件的位置、所述汇编序列特征对应的组件的预定部分的位置。
15.根据权利要求10-12中任一项所述的装置,其特征在于,修复单元进一步配置用于:
将所述待修复位置的代码修改为所述兼容代码;或者
将所述兼容代码存储在所述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者
通过所述兼容代码静态替换所述软件漏洞所在的组件或所述软件漏洞所在的组件的预定部分;或者
通过所述兼容代码修改所述软件漏洞所在的方法的方法描述结构体信息以替换所述软件漏洞所在的方法。
16.根据权利要求10-12中任一项所述的装置,其特征在于,所述修复单元进一步配置用于:
响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,其中,所述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。
17.根据权利要求16所述的装置,其特征在于,所述修复单元进一步配置用于:
当所述预定程序为内核程序时,将通过所述兼容代码修复所述软件漏洞的内容插入内核模块;
当所述预定程序为非内核程序时,修改或替换所述预定程序,以在所述预定程序中加入通过所述兼容代码修复所述软件漏洞的内容;或者对所述预定程序的依赖项,使得所述预定程序启动时,通过所述兼容代码修复所述软件漏洞;或者将通过所述兼容代码修复所述软件漏洞的内容动态注入到所述预定程序执行时创建的进程中。
18.根据权利要求10-12中任一项所述的装置,其特征在于,所述接收单元进一步配置用于:
检验所述终端是否存在预定的软件漏洞;
如果是,则向所述服务器发送所述软件漏洞的修复文件的获取请求,其中,所述请求还包括所述终端的系统信息;
接收服务器发送的与所述系统信息相匹配的所述软件漏洞的修复文件。

说明书全文

用于终端的软件漏洞修复方法和装置

技术领域

[0001] 本申请涉及计算机技术领域,具体涉及安全技术领域,尤其涉及用于终端的软件漏洞修复方法和装置。

背景技术

[0002] 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。软件通常是由于开发者开发软件时的疏忽,或者是编程语言的局限性造成的。
[0003] 以安卓(Android)系统为例,在原生Android漏洞中,内核(kernel)层漏洞约占1/4,本地方法层(Native)层、应用框架层和原生应用约占剩余的3/4。现有的漏洞修复方法主要是不同设备厂商根据谷歌发布漏洞修复源代码,针对不同设备二次开发漏洞修复补丁
热修复的主要优势是不会使设备当前正在运行的业务中断,即在不重启设备的情况下,可以对设备当前软件版本的缺陷进行修复
[0004] 然而,由于Android系统的碎片化,Android设备种类、系统版本越来越多,现有的漏洞修复方法不能兼容各个Android设备,导致开发成本越来越高,严重阻碍了对漏洞的修复工作,使用户面临着潜在的安全威胁,并且这种修复方法只专注于修复kernel层漏洞,无法动态修复Native层、应用框架层和应用层漏洞,修复过程需要重启设备未能实现热修复。发明内容
[0005] 本申请的目的在于提出一种改进的用于终端的软件漏洞修复方法和装置,来解决以上背景技术部分提到的技术问题。
[0006] 第一方面,本申请提供了一种用于终端的软件漏洞修复方法,所述方法包括:接收服务器发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、定位信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定位置的信息;确定所述定位信息指示的所述软件漏洞对应的待修复位置;在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;将查找到的信息添加到所述修复代码的预定位置得到兼容代码;通过所述兼容代码修复所述软件漏洞。
[0007] 在一些实施例中,当所述软件漏洞为Java层漏洞时,所述修复代码包括由Java语言编写的用于修复所述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,或由所述字节码编译出的机器指令;当所述软件漏洞为本地方法Native层漏洞时,所述修复代码包括由C/C++语言编写的用于修复所述软件漏洞的程序编译出的机器指令。
[0008] 在一些实施例中,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述软件漏洞为Java层漏洞时,所述定位信息还包括:预先确定的与所述软件漏洞关联的类的名称和方法的名称,及预先确定的与所述软件漏洞关联的方法参数个数和参数类型名称;以及所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:根据所述软件漏洞所在文件的路径信息、所述类的名称、所述方法的名称、所述方法参数个数和所述参数类型名称,通过调用Java虚拟机接口获取所述方法在所述Java虚拟机内部的方法描述结构体。
[0009] 在一些实施例中,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括以下二进制特征中的至少一项:预先确定的与所述软件漏洞关联的组件的名称、预先确定的与所述软件漏洞关联的函数的名称、预先确定的与所述软件漏洞关联的参数个数和参数类型、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与所述软件漏洞关联的语句或语句编译而成的指令序列的二进制特征;以及所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内查找到的所述二进制特征所在的位置确定为所述定位信息指示的所述软件漏洞对应的待修复位置,其中,所述二进制特征所在的位置包括以下至少一项:所述二进制特征所在的代码块的位置、所述二进制特征所在的函数的位置、所述二进制特征所在的组件的位置、所述二进制特征所在的组件的预定部分的位置。
[0010] 在一些实施例中,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与所述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及所述确定所述定位信息指示的所述软件漏洞对应的待修复位置,包括:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内的机器指令转换为汇编序列;在所转换的汇编序列中查找所述汇编序列特征,以确定所述汇编序列特征对应的位置,其中,所述汇编序列特征对应的位置包括以下至少一项:所述汇编序列特征对应的代码块的位置、所述汇编序列特征对应的函数的位置、所述汇编序列特征对应的组件的位置、所述汇编序列特征对应的组件的预定部分的位置。
[0011] 在一些实施例中,所述通过所述兼容代码修复所述软件漏洞,包括:将所述待修复位置的代码修改为所述兼容代码;或者将所述兼容代码存储在所述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者通过所述兼容代码静态替换所述软件漏洞所在的组件或所述软件漏洞所在的组件的预定部分;或者通过所述兼容代码修改所述软件漏洞所在的方法的方法描述结构体信息以替换所述软件漏洞所在的方法。
[0012] 在一些实施例中,所述通过所述兼容代码修复所述软件漏洞,包括:响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,其中,所述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。
[0013] 在一些实施例中,所述响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,包括:当所述预定程序为内核程序时,将通过所述兼容代码修复所述软件漏洞的内容插入内核模块;当所述预定程序为非内核程序时,修改或替换所述预定程序,以在所述预定程序中加入通过所述兼容代码修复所述软件漏洞的内容;或者对所述预定程序的依赖项,使得所述预定程序启动时,通过所述兼容代码修复所述软件漏洞;或者将通过所述兼容代码修复所述软件漏洞的内容动态注入到所述预定程序执行时创建的进程中。
[0014] 在一些实施例中,所述接收服务器发送的软件漏洞的修复文件,包括:检验所述终端是否存在预定的软件漏洞;如果是,则向所述服务器发送所述软件漏洞的修复文件的获取请求,其中,所述请求还包括所述终端的系统信息;接收服务器发送的与所述系统信息相匹配的所述软件漏洞的修复文件。
[0015] 第二方面,本申请提供了一种用于终端的软件漏洞修复装置,所述装置包括:接收单元,配置用于接收服务器发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、定位信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定位置的信息;确定单元,配置用于确定所述定位信息指示的所述软件漏洞对应的待修复位置;查找单元,配置用于在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;添加单元,配置用于将查找到的信息添加到所述修复代码的预定位置得到兼容代码;修复单元,配置用于通过所述兼容代码修复所述软件漏洞。
[0016] 在一些实施例中,当所述软件漏洞为Java层漏洞时,所述修复代码包括由Java语言编写的用于修复所述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,或由所述字节码编译出的机器指令;当所述软件漏洞为本地方法Native层漏洞时,所述修复代码包括由C/C++语言编写的用于修复所述软件漏洞的程序编译出的机器指令。
[0017] 在一些实施例中,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述软件漏洞为Java层漏洞时,所述定位信息还包括:预先确定的与所述软件漏洞关联的类的名称和方法的名称,及预先确定的与所述软件漏洞关联的方法参数个数和参数类型名称;以及所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息、所述类的名称、所述方法的名称、所述方法参数个数和所述参数类型名称,通过调用Java虚拟机接口获取所述方法在所述Java虚拟机内部的方法描述结构体。
[0018] 在一些实施例中,其特征在于,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括以下二进制特征中的至少一项:预先确定的与所述软件漏洞关联的组件的名称、预先确定的与所述软件漏洞关联的函数的名称、预先确定的与所述软件漏洞关联的参数个数和参数类型、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列的二进制特征;以及所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内查找到的所述二进制特征所在的位置确定为所述定位信息指示的所述软件漏洞对应的待修复位置,其中,所述二进制特征所在的位置包括以下至少一项:所述二进制特征所在的代码块的位置、所述二进制特征所在的函数的位置、所述二进制特征所在的组件的位置、所述二进制特征所在的组件的预定部分的位置。
[0019] 在一些实施例中,所述定位信息包括所述软件漏洞所在文件的路径信息,当所述修复代码为机器指令时,所述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与所述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与所述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与所述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与所述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及所述确定单元进一步配置用于:根据所述软件漏洞所在文件的路径信息确定所述软件漏洞所在文件被加载到所述终端的内存中的地址范围;将所述地址范围内的机器指令转换为汇编序列;在所转换的汇编序列中查找所述汇编序列特征,以确定所述汇编序列特征对应的位置,其中,所述汇编序列特征对应的位置包括以下至少一项:所述汇编序列特征对应的代码块的位置、所述汇编序列特征对应的函数的位置、所述汇编序列特征对应的组件的位置、所述汇编序列特征对应的组件的预定部分的位置。
[0020] 在一些实施例中,修复单元进一步配置用于:将所述待修复位置的代码修改为所述兼容代码;或者将所述兼容代码存储在所述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者通过所述兼容代码静态替换所述软件漏洞所在的组件或所述软件漏洞所在的组件的预定部分;或者通过所述兼容代码修改所述软件漏洞所在的方法的方法描述结构体信息以替换所述软件漏洞所在的方法。
[0021] 在一些实施例中,所述修复单元进一步配置用于:响应于预定程序的运行,通过所述兼容代码修复所述软件漏洞,其中,所述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。
[0022] 在一些实施例中,所述修复单元进一步配置用于:当所述预定程序为内核程序时,将通过所述兼容代码修复所述软件漏洞的内容插入内核模块;当所述预定程序为非内核程序时,修改或替换所述预定程序,以在所述预定程序中加入通过所述兼容代码修复所述软件漏洞的内容;或者对所述预定程序的依赖项,使得所述预定程序启动时,通过所述兼容代码修复所述软件漏洞;或者将通过所述兼容代码修复所述软件漏洞的内容动态注入到所述预定程序执行时创建的进程中。
[0023] 在一些实施例中,所述接收单元进一步配置用于:检验所述终端是否存在预定的软件漏洞;如果是,则向所述服务器发送所述软件漏洞的修复文件的获取请求,其中,所述请求还包括所述终端的系统信息;接收服务器发送的与所述系统信息相匹配的所述软件漏洞的修复文件。
[0024] 本申请提供的用于终端的软件漏洞修复方法和装置,通过接收到的服务器发送的软件漏洞的修复文件,确定漏洞对应的待修复位置并查找兼容信息指示的信息,而后将查找到的信息添加到修复代码的预定位置得到兼容代码,最后通过兼容代码修复漏洞,实现了兼容不同设备的软件漏洞的热修复,保护了终端设备的安全。附图说明
[0025] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0026] 图1是本申请可以应用于其中的示例性系统架构图;
[0027] 图2是根据本申请的用于终端的软件漏洞修复方法的一个实施例的流程图
[0028] 图3是根据本申请的用于终端的软件漏洞修复方法的一个应用场景的示意图;
[0029] 图4是根据本申请的用于终端的软件漏洞修复方法的又一个实施例的流程图;
[0030] 图5是根据本申请的用于终端的软件漏洞修复装置的一个实施例的结构示意图;
[0031] 图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。

具体实施方式

[0032] 下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
[0033] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0034] 图1示出了可以应用本申请的软件漏洞修复方法或装置的实施例的示例性系统架构100。
[0035] 如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供传输链路的介质。网络104可以包括各种连接类型,例如有线、无线传输链路或者光纤电缆等等。
[0036] 用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种应用,例如,系统工具类应用、即时通讯类应用、浏览器类应用、搜索类应用、文字处理类应用等。
[0037] 终端设备101、102、103可以是可能存在软件漏洞的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
[0038] 服务器105可以存储多个不同处理架构、不同版本的系统的软件漏洞的修复文件,可以给终端设备101、102、103发送软件漏洞的修复文件,使得终端设备101、102、103通过修复文件对漏洞进行修复处理。
[0039] 应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0040] 请参考图2,其示出了根据本申请的软件漏洞修复方法的一个实施例的流程200。需要说明的是,本申请实施例所提供的软件漏洞修复方法一般由图1中的终端设备101、
102、103执行。该方法包括以下步骤:
[0041] 步骤201,接收服务器发送的软件漏洞的修复文件。
[0042] 在本实施例中,用于终端的软件漏洞修复方法运行于其上的电子设备(例如图1所示的终端)可以通过有线连接方式或者无线连接方式从服务器接收软件漏洞的修复文件。其中,上述修复文件包括修复代码、定位信息以及兼容信息,上述兼容信息用于指示对上述修复代码进行兼容处理时,需要添加到上述修复代码的预定位置的信息,上述定位信息用于指示上述软件漏洞对应的待修复位置。上述终端的系统信息包括以下至少一项:上述终端的系统版本信息、上述终端的设备信息、上述终端的生产商信息、上述终端的内核信息、上述终端的处理器信息、终端的屏幕配置信息。上述兼容信息指示的信息包括以下至少一项:寄存器使用信息、堆栈使用信息、执行地址跳转信息、参数信息。
[0043] 在本实施例中,以Android系统为例,上述软件漏洞可以是Android漏洞信息库中发布的漏洞。上述服务器(例如图1所示的服务器)中预先存储有漏洞修复源代码,具体漏洞的不同,漏洞修复源代码编写使用的语言不同,服务器可以根据源代码的编写语言以及终端的系统信息对上述漏洞修复源代码进行编译,得到上述修复代码,例如,可以使用安卓构建(Android Build)系统类似的编译工具。由于Android设备间的差异性较大,编译得到的修复代码不能兼容各个设备,因此还需要对修复代码进行兼容处理,兼容处理主要是服务器端分析出修复代码中哪些位置上的信息会因设备的差异而不同,再确定这些位置上的信息的获取方式,使得服务器可以通过发送兼容信息指示终端获取这些位置上的信息,并将这些信息添加到修复代码中对应的位置上,这些信息可能是寄存器ID、堆栈平衡指令、跳转地址、数据等。
[0044] 在本实施例的一些可选的实现方式中,Android系统分为应用程序层、应用程序框架层、系统运行库层和Linux内核层,Java层包括应用程序框架层的一部分以及应用程序层,当上述软件漏洞为Java层漏洞时,在Dalvik机制下,上述修复代码可以是由Java语言编写的用于修复上述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,在ART(Android runtime,安卓运行环境)机制下,上述修复代码可以是由上述字节码编译出的机器指令,因为在ART环境中,应用在第一次安装的时候,字节码就会预先编译成机器码;当上述软件漏洞为本地方法Native层漏洞时,上述修复代码包括由C/C++语言编写的用于修复上述软件漏洞的程序编译出的机器指令,机器指令的表现形式是二进制编码。
[0045] 在本实施例的一些可选的实现方式中,上述接收服务器发送的软件漏洞的修复文件,包括:检验上述终端是否存在预定的软件漏洞;如果是,则向上述服务器发送上述软件漏洞的修复文件的获取请求,其中,上述请求还包括上述终端的系统信息;接收服务器发送的与上述系统信息相匹配的上述软件漏洞的修复文件。例如,不同终端的CPU对应的指令集不同,其可执行的机器指令不同,因此需要发送不同的修复代码。不同终端漏洞所在的文件的路径也可能不同,服务器可以预先获取各个厂商或各个设备型号的终端上述漏洞所在的文件的路径,以此可以根据厂商或设备型号查询与终端匹配的文件的路径。
[0046] 步骤202,确定定位信息指示的上述漏洞对应的待修复位置。
[0047] 在本实施例中,基于步骤201中得到的修复文件中包括的定位信息,上述电子设备(例如图1所示的终端)可以确定定位信息指示的上述漏洞对应的待修复位置。
[0048] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述软件漏洞为Java层漏洞时,上述定位信息还包括:预先确定的与上述软件漏洞关联的类的名称和方法的名称,及预先确定的与上述软件漏洞关联的方法参数个数和参数类型名称;以及上述确定上述定位信息指示的上述软件漏洞对应的待修复位置,包括:根据上述软件漏洞所在文件的路径信息、上述类的名称、上述方法的名称、上述方法参数个数和上述参数类型名称,通过调用Java虚拟机接口获取上述方法在上述Java虚拟机内部的方法描述结构体。
[0049] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述修复代码为机器指令时,上述定位信息还包括以下二进制特征中的至少一项:预先确定的与上述软件漏洞关联的组件的名称、预先确定的与上述软件漏洞关联的函数的名称、预先确定的与上述软件漏洞关联的参数个数和参数类型、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列的二进制特征;以及上述确定上述定位信息指示的上述软件漏洞对应的待修复位置,包括:根据上述软件漏洞所在文件的路径信息确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围;将上述地址范围内查找到的上述二进制特征所在的位置确定为上述定位信息指示的上述软件漏洞对应的待修复位置,其中,上述二进制特征所在的位置包括以下至少一项:上述二进制特征所在的代码块的位置、上述二进制特征所在的函数的位置、上述二进制特征所在的组件的位置、上述二进制特征所在的组件的预定部分的位置。
[0050] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述修复代码为机器指令时,上述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与上述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及上述确定上述定位信息指示的上述软件漏洞对应的待修复位置,包括:根据上述软件漏洞所在文件的路径信息确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围;将上述地址范围内的机器指令转换为汇编序列;在所转换的汇编序列中查找上述汇编序列特征,以确定上述汇编序列特征对应的位置,其中,上述汇编序列特征对应的位置包括以下至少一项:上述汇编序列特征对应的代码块的位置、上述汇编序列特征对应的函数的位置、上述汇编序列特征对应的组件的位置、上述汇编序列特征对应的组件的预定部分的位置。
[0051] 步骤203,在上述待修复位置的上下文中查找上述兼容信息指示的信息和/或利用预先获取的上述终端的系统信息以及预先设置的系统信息与上述兼容信息指示的信息的对应关系查找上述兼容信息指示的信息。
[0052] 在本实施例中,基于步骤202中确定的待修复位置,上述电子设备(例如图1所示的终端)可以在上述待修复位置的上下文中查找上述兼容信息指示的信息和/或利用预先获取的上述终端的系统信息以及预先设置的系统信息与上述兼容信息指示的信息的对应关系查找上述兼容信息指示的信息。服务器端可以通过测试直接解析测试机中漏洞相关联的代码的上下文以确定兼容处理所需信息的查找方式,或者通过反汇编引擎反汇编上下文,解析反汇编后的上下文以确定兼容处理所需信息的查找方式。或者依据测试机的系统信息寻找规律,建立系统信息与兼容处理所需信息对应关系。
[0053] 步骤204,将查找到的信息添加到上述修复代码的预定位置得到兼容代码。
[0054] 在本实施例中,基于步骤203中查找到的兼容信息指示的信息,上述电子设备(例如图1所示的终端)可以将查找到的信息添加到上述修复代码的预定位置得到兼容代码。由于综合考虑了终端的系统信息和上下文环境,终端或终端的虚拟机上可直接执行上述兼容代码。需要注意的是本申请中上述“添加”不应理解为狭义上从无到有的添加,添加也可以是预定位置上已存在信息,用待添加的信息替换已存在的信息,此时可理解为“修改”。
[0055] 步骤205,通过上述兼容代码修复上述漏洞。
[0056] 在本实施例中,基于步骤204中得到的兼容代码,上述电子设备(例如图1所示的终端)可以采用静态或动态的方式通过上述兼容代码修复上述漏洞。静态可以理解为通过在可执行文件中修改代码,这样文件运行时修改的代码就会被加载到进程空间,例如,Android系统的某个功能组件存在漏洞,可以静态地替换整个功能组件的代码或功能组件中与漏洞有关的部分的代码。动态可以理解为在程序将要执行某段逻辑时控制其去执行特定代码。在Android中通过兼容代码修复漏洞可以采用注入(inject)和挂钩(hook)等方式。
[0057] 在本实施例的一些可选的实现方式中,上述通过上述兼容代码修复上述软件漏洞,包括:将上述待修复位置的代码修改为上述兼容代码;或者将上述兼容代码存储在上述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者通过上述兼容代码静态替换上述软件漏洞所在的组件或上述软件漏洞所在的组件的预定部分;或者通过上述兼容代码修改上述软件漏洞所在的方法的方法描述结构体信息以替换上述软件漏洞所在的方法。
[0058] 在本实施例的一些可选的实现方式中,上述通过上述兼容代码修复上述软件漏洞,包括:响应于预定程序的运行,通过上述兼容代码修复上述软件漏洞,其中,上述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。响应预定程序的运行,相当于为修复模块的执行添加了入口。修复模块是指用于通过兼容代码修复软件漏洞的模块,不同漏洞对应有不同修复模块。作为控制执行修复模块的入口的模块可命名为修复启动模块,可以将所有的修复模块统一注册到修复启动模块,使得修复模块可以被调度执行。
[0059] 在本实施例的一些可选的实现方式中,上述响应于预定程序的运行,通过上述兼容代码修复上述软件漏洞,包括:当上述预定程序为内核程序时,将通过上述兼容代码修复上述软件漏洞的内容插入内核模块;当上述预定程序为非内核程序时,修改或替换上述预定程序,以在上述预定程序中加入通过上述兼容代码修复上述软件漏洞的内容;或者对上述预定程序的依赖项,使得上述预定程序启动时,通过上述兼容代码修复上述软件漏洞;或者将通过上述兼容代码修复上述软件漏洞的内容动态注入到上述预定程序执行时创建的进程中。
[0060] 作为示例,在Android中,假如一个ELF(Executable and Linkable Format,可执行与可链接格式)文件参与动态链接,它的程序头表将存在一个包含了Dynamic Section(动态部分)的元素。依赖项的设置方式可以是将修复模块编译为动态链接库文件,修改待添加依赖项的组件的动态(dynamic)段,在dynamic段中添加一项依赖修复模块的DT_NEEDED项,或根据Android的连接器(linker)程序不使用DT_SONAME项的特性,修改dynamic段,将其DT_SONAME项改为DT_NEEDED项并修改字符串表为修复模块的文件路径。依赖项的设置还可以是对待添加依赖项的组件的某个依赖组件添加依赖,间接使待添加依赖项的组件依赖修复模块编译成的动态链接库文件。
[0061] 作为示例,在Android中,用于创建应用程序进程的可以是孵化器(Zygote)进程,Zygote是一个虚拟机进程,每当系统要求执行一个Android应用程序,Zygote就会建立(fork)出一个子进程来执行该应用程序。可以通过修改或替换Zygote的执行程序(app_process程序),以加载修复模块进行修复。加载/链接器程序可以是linker程序,Android系统的Native层的可执行文件和动态链接库文件是由linker程序加载的。修改linker程序后可以在漏洞所在程序加载且未执行前执行修复模块进行修复。在Android中,也可以修改漏洞所在系统组件,将修复模块作为漏洞所在系统组件的依赖项。在该不安全组件被加载时,修复模块自动地被加载执行,确保了存在漏洞的组件在被执行之前已经被修复。同样,可以插入内核模块,通过内核模块执行修复,或是动态注入到包括zygote在内的每个漏洞所涉及的进程,使得这些进程运行时可以主动执行修复,同时监控这些进程的运行状态,一旦这些进程重启,修复模块将对这些进程重新执行动态注入以保证其安全性。
[0062] 继续参见图3,图3是根据本实施例的用于终端的软件漏洞修复方法的应用场景的一个示意图。在图3的应用场景中,漏洞修复框架300主要包括管理模块301和漏洞修复单元302。其中,管理模块301用于管理漏洞修复单元302。漏洞修复单元302负责具体的漏洞修复工作。具体的,管理模块301的作用包括:修复管理,负责启动漏洞修复单元的修复流程;更新管理,负责更新漏洞修复单元中的各个模块和修复代码;卸载管理,负责卸载漏洞修复补丁以恢复到未修复状态;状态跟踪,负责跟踪漏洞的修复状态;系统环境检测,负责检测系统版本、设备厂商、设备型号、内核信息和其它系统信息。漏洞修复单元302包括:检测模块,用于检验预定的漏洞存在与否;定位模块,用于确定修复目标,例如目标方法地址、目标代码块地址和Java层目标方法结构体等;上下文检测模块,用于分析修复目标的上下文信息,这些上下文信息包括但不限于寄存器使用信息、堆栈使用信息、二进制代码信息;兼容处理模块,用于根据管理模块得到的系统环境信息和目标上下文信息对修复代码做兼容处理。
[0063] 本申请的上述实施例提供的方法通过接收到的服务器发送的软件漏洞的修复文件,确定漏洞对应的待修复位置并查找兼容信息指示的信息,而后将查找到的信息添加到修复代码的预定位置得到兼容代码,最后通过兼容代码修复漏洞,实现了兼容不同设备的软件漏洞的热修复,保护了终端设备的安全。
[0064] 进一步参考图4,其示出了用于终端的软件漏洞修复方法的又一个实施例的流程400。该用于终端的软件漏洞修复方法的流程400,包括以下步骤:
[0065] 步骤401,接收服务器发送的软件漏洞的修复文件。
[0066] 在本实施例中,用于终端的软件漏洞修复方法运行于其上的电子设备(例如图1所示的终端)可以通过有线连接方式或者无线连接方式从服务器接收软件漏洞的修复文件。上述修复文件包括修复代码、定位信息以及兼容信息,上述定位信息用于指示上述软件漏洞对应的待修复位置,包括上述软件漏洞所在文件的路径信息。服务器可以预先获取各个厂商或各个设备型号的终端上述漏洞所在的文件的路径,以此可以根据厂商或设备型号查询与终端匹配的文件的路径。服务器也可以向终端发送漏洞所在的文件的名称,终端通过搜索文件的名称获取文件的路径。
[0067] 步骤402,根据软件漏洞所在文件的路径信息确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围。
[0068] 在本实施例中,基于步骤401中得到的修复文件中包括的软件漏洞所在文件的路径信息,上述电子设备(例如图1所示的终端)可以确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围。
[0069] 步骤403,根据软件漏洞所在文件的路径信息、类的名称、方法的名称、方法参数个数和参数类型名称,通过调用Java虚拟机接口获取上述方法在上述Java虚拟机内部的方法描述结构体。
[0070] 在本实施例中,基于步骤402中得到的地址范围,以及预先确定的与上述软件漏洞关联的类的名称和方法的名称,及预先确定的与上述软件漏洞关联的方法参数个数和参数类型名称,上述电子设备(例如图1所示的终端)可以在上述软件漏洞为Java层漏洞时,根据上述软件漏洞所在文件的路径信息、上述类的名称、上述方法的名称、上述方法参数个数和上述参数类型名称,通过调用Java虚拟机接口获取上述方法在上述Java虚拟机内部的方法描述结构体。所述方法描述结构体即为待修复目标,也可以理解为待修复位置。在Java中存在一个方法区是堆的一部分。在一个虚拟机实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中。类型信息是由类加载器在类加载时从类文件中提取出来的。类(静态)变量也存储在方法区中。
[0071] 步骤404,将上述地址范围内查找到的上述二进制特征所在的位置确定为上述定位信息指示的上述软件漏洞对应的待修复位置。
[0072] 在本实施例中,基于步骤402中得到的地址范围,上述电子设备(例如图1所示的终端)可以在上述修复代码为机器指令时,将上述地址范围内查找到的上述二进制特征所在的位置确定为上述定位信息指示的上述软件漏洞对应的待修复位置。二进制特征包括在上述定位信息中,二进制特征包括以下至少一项:预先确定的与上述软件漏洞关联的组件的名称、预先确定的与上述软件漏洞关联的函数的名称、预先确定的与上述软件漏洞关联的参数个数和参数类型、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列的二进制特征。其中,上述二进制特征所在的位置包括以下至少一项:上述二进制特征所在的代码块的位置、上述二进制特征所在的函数的位置、上述二进制特征所在的组件的位置、上述二进制特征所在的组件的预定部分的位置。上述二进制特征是指一些固定的二进制数据块或数据块组合
[0073] 步骤405,将上述地址范围内的机器指令转换为汇编序列。
[0074] 在本实施例中,基于步骤402中得到的地址范围,上述电子设备(例如图1所示的终端)可以在上述修复代码为机器指令时,将上述地址范围内的机器指令转换为汇编序列。
[0075] 步骤406,在所转换的汇编序列中查找上述汇编序列特征,以确定上述汇编序列特征对应的位置。
[0076] 在本实施例中,基于步骤405中转换得到的汇编序列,上述电子设备(例如图1所示的终端)可以在所转换的汇编序列中查找上述汇编序列特征,以确定上述汇编序列特征对应的位置,并将其作为待修复位置。其中,上述定位信息还包括以下汇编序列特征中的至少一项:预先确定的与上述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征。例如,多个条件分支(switch-case)语句编译生成的指令序列和跳转表。上述汇编序列特征对应的位置包括以下至少一项:上述汇编序列特征对应的代码块的位置、上述汇编序列特征对应的函数的位置、上述汇编序列特征对应的组件的位置、上述汇编序列特征对应的组件的预定部分的位置。汇编序列特征对应的位置可以是查找到汇编序列特征所在的位置对应的机器指令的位置。
[0077] 步骤407,在上述待修复位置的上下文中查找上述兼容信息指示的信息和/或利用预先获取的上述终端的系统信息以及预先设置的系统信息与上述兼容信息指示的信息的对应关系查找上述兼容信息指示的信息。
[0078] 在本实施例中,基于步骤403、步骤404或步骤406中确定的待修复位置,上述电子设备(例如图1所示的终端)可以在上述待修复位置的上下文中查找上述兼容信息指示的信息和/或利用预先获取的上述终端的系统信息以及预先设置的系统信息与上述兼容信息指示的信息的对应关系查找上述兼容信息指示的信息。
[0079] 步骤408,将查找到的信息添加到上述修复代码的预定位置得到兼容代码。
[0080] 在本实施例中,基于步骤407中查找到的兼容信息指示的信息,上述电子设备(例如图1所示的终端)可以将查找到的信息添加到上述修复代码的预定位置得到兼容代码。
[0081] 步骤409,通过上述兼容代码修复上述漏洞。
[0082] 在本实施例中,基于步骤408中得到的兼容代码,上述电子设备(例如图1所示的终端)可以通过上述兼容代码修复上述漏洞。
[0083] 从图4中可以看出,与图2对应的实施例相比,本实施例中的用于终端的软件漏洞修复方法的流程400突出了确定定位信息指示的漏洞对应的待修复位置的步骤。由此,本实施例描述的方案可以更加灵活确定待修复位置,实现了兼容不同设备不同层级的更加精准的漏洞修复,更好的保护了终端设备的安全。
[0084] 进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种用于终端的软件漏洞修复装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0085] 如图5所示,本实施例上述的用于终端的软件漏洞修复装置500包括:接收单元501、确定单元502、查找单元503、添加单元504和修复单元505。其中,接收单元501,配置用于接收服务器发送的软件漏洞的修复文件,其中,上述修复文件包括修复代码、定位信息以及兼容信息,上述兼容信息用于指示对上述修复代码进行兼容处理时,需要添加到上述修复代码的预定位置的信息;确定单元502,配置用于确定上述定位信息指示的上述软件漏洞对应的待修复位置;查找单元503,配置用于在上述待修复位置的上下文中查找上述兼容信息指示的信息和/或利用预先获取的上述终端的系统信息以及预先设置的系统信息与上述兼容信息指示的信息的对应关系查找上述兼容信息指示的信息;添加单元504,配置用于将查找到的信息添加到上述修复代码的预定位置得到兼容代码;修复单元505,配置用于通过上述兼容代码修复上述软件漏洞。
[0086] 在本实施例中,用于终端的软件漏洞修复装置500中接收单元501、确定单元502、查找单元503、添加单元504和修复单元505的具体处理可参看图2对应实施例中的步骤201、步骤202、步骤203步骤204和步骤205的实现方式的相关描述,在此不再赘述。
[0087] 在本实施例的一些可选的实现方式中,当上述软件漏洞为Java层漏洞时,上述修复代码包括由Java语言编写的用于修复上述软件漏洞的程序编译出的在Java虚拟机中运行的字节码,或由上述字节码编译出的机器指令;当上述软件漏洞为本地方法Native层漏洞时,上述修复代码包括由C/C++语言编写的用于修复上述软件漏洞的程序编译出的机器指令。
[0088] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述软件漏洞为Java层漏洞时,上述定位信息还包括:预先确定的与上述软件漏洞关联的类的名称和方法的名称,及预先确定的与上述软件漏洞关联的方法参数个数和参数类型名称;以及上述确定单元502进一步配置用于:根据上述软件漏洞所在文件的路径信息、上述类的名称、上述方法的名称、上述方法参数个数和上述参数类型名称,通过调用Java虚拟机接口获取上述方法在上述Java虚拟机内部的方法描述结构体。
[0089] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述软件漏洞为Native层漏洞时,上述定位信息还包括以下二进制特征中的至少一项:上述定位信息包括上述软件漏洞所在文件的路径信息,当上述修复代码为机器指令时,上述定位信息还包括以下二进制特征中的至少一项:预先确定的与上述软件漏洞关联的组件的名称、预先确定的与上述软件漏洞关联的函数的名称、预先确定的与上述软件漏洞关联的参数个数和参数类型、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列的二进制特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列的二进制特征;以及上述确定单元502进一步配置用于:根据上述软件漏洞所在文件的路径信息确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围;将上述地址范围内查找到的上述二进制特征所在的位置确定为上述定位信息指示的上述软件漏洞对应的待修复位置,其中,上述二进制特征所在的位置包括以下至少一项:上述二进制特征所在的代码块的位置、上述二进制特征所在的函数的位置、上述二进制特征所在的组件的位置、上述二进制特征所在的组件的预定部分的位置。
[0090] 在本实施例的一些可选的实现方式中,上述定位信息包括上述软件漏洞所在文件的路径信息,当上述修复代码为机器指令时,上述定位信息还包括由以下汇编序列特征中的至少一项:预先确定的与上述软件漏洞关联的固定常量或固定常量组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译而成的汇编序列、预先确定的与上述软件漏洞关联的语句或语句块编译生成的跳转表、预先确定的与上述软件漏洞关联的函数或函数组合编译而成的指令序列反汇编得到的汇编序列特征、预先确定的与上述软件漏洞关联的语句或语句块编译而成的指令序列反汇编得到的汇编序列特征;以及上述确定单元502进一步配置用于:根据上述软件漏洞所在文件的路径信息确定上述软件漏洞所在文件被加载到上述终端的内存中的地址范围;将上述地址范围内的机器指令转换为汇编序列;在所转换的汇编序列中查找上述汇编序列特征,以确定上述汇编序列特征对应的位置,其中,上述汇编序列特征对应的位置包括以下至少一项:上述汇编序列特征对应的代码块的位置、上述汇编序列特征对应的函数的位置、上述汇编序列特征对应的组件的位置、上述汇编序列特征对应的组件的预定部分的位置。
[0091] 在本实施例的一些可选的实现方式中,上述修复单元505进一步配置用于:将上述待修复位置的代码修改为上述兼容代码;或者将上述兼容代码存储在上述终端的空闲内存空间中,并将所存储的位置设置为待修复位置的跳转位置;或者通过上述兼容代码静态替换上述软件漏洞所在的组件或上述软件漏洞所在的组件的预定部分;或者通过上述兼容代码修改上述软件漏洞所在的方法的方法描述结构体信息以替换上述软件漏洞所在的方法。
[0092] 在本实施例的一些可选的实现方式中,上述修复单元505进一步配置用于:响应于预定程序的运行,通过上述兼容代码修复上述软件漏洞,其中,上述预定程序包括以下至少一项:内核程序、用于创建应用程序进程的程序、加载/链接器程序、软件漏洞所在程序。
[0093] 在本实施例的一些可选的实现方式中,上述修复单元505进一步配置用于:当上述预定程序为内核程序时,将通过上述兼容代码修复上述软件漏洞的内容插入内核模块;当上述预定程序为非内核程序时,修改或替换上述预定程序,以在上述预定程序中加入通过上述兼容代码修复上述软件漏洞的内容;或者对上述预定程序的依赖项,使得上述预定程序启动时,通过上述兼容代码修复上述软件漏洞;或者将通过上述兼容代码修复上述软件漏洞的内容动态注入到上述预定程序执行时创建的进程中。
[0094] 在本实施例的一些可选的实现方式中,上述接收单元501进一步配置用于:检验上述终端是否存在预定的软件漏洞;如果是,则向上述服务器发送上述软件漏洞的修复文件的获取请求,其中,上述请求还包括上述终端的系统信息;接收服务器发送的与上述系统信息相匹配的上述软件漏洞的修复文件。
[0095] 下面参考图6,其示出了适于用来实现本申请实施例的终端的计算机系统600的结构示意图。
[0096] 如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0097] 以下部件连接至I/O接口605:包括键盘鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0098] 特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。
[0099] 附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0100] 描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括接收单元、确定单元、查找单元、添加单元和修复单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,接收单元还可以被描述为“接收服务器发送的软件漏洞的修复文件的单元”。
[0101] 作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:从信息输入终端接收用户的输入信息;基于所述输入信息进行搜索操作,得到搜索结果信息;基于以下信息项中的一项或多项来确定信息输出终端:接收服务器发送的软件漏洞的修复文件,其中,所述修复文件包括修复代码、定位信息以及兼容信息,所述兼容信息用于指示对所述修复代码进行兼容处理时,需要添加到所述修复代码的预定位置的信息;确定所述定位信息指示的所述软件漏洞对应的待修复位置;在所述待修复位置的上下文中查找所述兼容信息指示的信息和/或利用预先获取的所述终端的系统信息以及预先设置的系统信息与所述兼容信息指示的信息的对应关系查找所述兼容信息指示的信息;将查找到的信息添加到所述修复代码的预定位置得到兼容代码;通过所述兼容代码修复所述软件漏洞。
[0102] 以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈