热补丁文件生成方法、装置、设备及存储介质转让专利

申请号 : CN202010616037.2

文献号 : CN111796832B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘耀

申请人 : 苏州三六零智能安全科技有限公司

摘要 :

本发明涉及计算机技术领域,公开了一种热补丁文件生成方法、装置、设备及存储介质,所述方法包括:将源文件与目标文件进行比较,以确定待替换对象;对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。通过对目标文件进行语法分析,确定待替换对象对应的目标数据,再根据目标数据生成热补丁文件,从而达到了方便快捷地生成热补丁文件的效果。

权利要求 :

1.一种热补丁文件生成方法,其特征在于,所述热补丁文件生成方法包括以下步骤:将源文件与目标文件进行比较,以确定待替换对象,源文件为需要替换的文件,是有漏洞的文件,目标文件为确定的待替换文件,是已经克服了该漏洞的文件;

对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;

根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件;

其中,所述将源文件与目标文件进行比较,以确定待替换对象,具体包括:获取源文件的源文件数据,并获取目标文件的目标文件数据;

将所述源文件数据与所述目标文件数据进行比较;

根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数;

将所述存在区别的代码或函数作为待替换对象;

所述对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据,具体包括:对所述目标文件进行词法分析,获得待处理数据;

基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;

根据所述待处理语法树确定与所述待替换对象对应的目标数据。

2.如权利要求1所述的热补丁文件生成方法,其特征在于,所述待处理数据包括:单词序列;

所述对所述目标文件进行词法分析,获得待处理数据,具体包括:获取所述目标文件的目标文件数据,并从所述目标文件数据中提取字符序列;

将所述字符序列转换为所述单词序列;

相应地,所述基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树,具体包括:基于预设语言特征对所述单词序列进行语法分析,生成待处理语法树。

3.如权利要求2所述的热补丁文件生成方法,其特征在于,所述将所述字符序列转换为单词序列,具体包括:从所述字符序列中提取待处理字符,并确定所述待处理字符对应的逻辑顺序;

基于预设构词规则将所述待处理字符转换为待处理单词;

根据所述待处理单词和所述逻辑顺序生成单词序列。

4.如权利要求2所述的热补丁文件生成方法,其特征在于,所述基于预设语言特征对所述单词序列进行语法分析,生成待处理语法树,具体包括:基于预设语言特征对所述单词序列进行组合,获得语法短语;

识别所述语法短语对应的语法范畴,并基于所述语法范畴对所述语法短语进行语法检查;

判断语法检查结果是否为预设结果;

在所述语法检查结果为所述预设结果时,根据所述语法短语生成待处理语法树。

5.如权利要求1所述的热补丁文件生成方法,其特征在于,所述根据所述待处理语法树确定与所述待替换对象对应的目标数据,具体包括:基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树;

从所述目标语法树中提取与所述待替换对象对应的目标数据。

6.如权利要求5所述的热补丁文件生成方法,其特征在于,所述从所述目标语法树中提取与所述待替换对象对应的目标数据,具体包括:获取所述目标语法树中与所述待替换对象对应的第一函数栈,并获取所述源文件中与所述待替换对象对应的第二函数栈;

根据所述第一函数栈和所述第二函数栈生成改动信息;

根据所述改动信息对所述目标语法树进行更新,获得更新后的目标语法树;

从所述更新后的目标语法树中提取与所述待替换对象对应的目标数据。

7.如权利要求1~6中任一项所述的热补丁文件生成方法,其特征在于,所述根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件,具体包括:从所述目标数据中提取JAVA源代码;

对所述JAVA源代码进行编译,获得CLASS字节码;

根据所述CLASS字节码生成DEX字节码;

根据所述DEX字节码生成热补丁文件。

8.如权利要求7所述的热补丁文件生成方法,其特征在于,所述根据所述DEX字节码生成热补丁文件,具体包括:根据所述DEX字节码生成APK文件;

将所述APK文件作为热补丁文件。

9.如权利要求1~6中任一项所述的热补丁文件生成方法,其特征在于,所述根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件之后,还包括:将所述热补丁文件存储至系统的备份存储区域;

在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;

基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。

10.如权利要求9所述的热补丁文件生成方法,其特征在于,所述基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复之后,还包括:检测所述漏洞修复是否完成;

在所述漏洞修复完成时,获取修复完成后的已替换文件;

将所述已替换文件与所述目标文件进行比较;

在所述已替换文件与所述目标文件相同时,删除所述热补丁文件。

11.一种热补丁文件生成装置,其特征在于,所述热补丁文件生成装置包括:文件比较模块,用于将源文件与目标文件进行比较,以确定待替换对象,源文件为需要替换的文件,是有漏洞的文件,目标文件为确定的待替换文件,是已经克服了该漏洞的文件;

目标确定模块,用于对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;

补丁生成模块,用于根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件;

其中,所述文件比较模块,具体包括:获取源文件的源文件数据,并获取目标文件的目标文件数据;将所述源文件数据与所述目标文件数据进行比较;根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数;将所述存在区别的代码或函数作为待替换对象;

所述目标确定模块,具体包括:对所述目标文件进行词法分析,获得待处理数据;基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;根据所述待处理语法树确定与所述待替换对象对应的目标数据。

12.如权利要求11所述的热补丁文件生成装置,其特征在于,所述目标确定模块,具体包括:基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树;从所述目标语法树中提取与所述待替换对象对应的目标数据。

13.如权利要求11所述的热补丁文件生成装置,其特征在于,所述补丁生成模块,具体包括:从所述目标数据中提取JAVA源代码;对所述JAVA源代码进行编译,获得CLASS字节码;

根据所述CLASS字节码生成DEX字节码;根据所述DEX字节码生成热补丁文件。

14.如权利要求11所述的热补丁文件生成装置,其特征在于,所述热补丁文件生成装置还包括漏洞修复模块,用于将所述热补丁文件存储至系统的备份存储区域;在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。

15.一种热补丁文件生成设备,其特征在于,所述热补丁文件生成设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的热补丁文件生成程序,所述热补丁文件生成程序配置有实现如权利要求1至10中任一项所述的热补丁文件生成方法的步骤。

16.一种存储介质,其特征在于,所述存储介质上存储有热补丁文件生成程序,所述热补丁文件生成程序被处理器执行时实现如权利要求1至10中任一项所述的热补丁文件生成方法的步骤。

说明书 :

热补丁文件生成方法、装置、设备及存储介质

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种热补丁文件生成方法、装置、设备及存储介质。

背景技术

[0002] 现有系统的漏洞非常多,现有技术中系统漏洞的修复,一般是通过系统更新的方式,但是这种方式的更新包的编写周期通常在几个月,甚至是几年的时间,更新周期非常长。
[0003] 目前,可通过补丁文件来对系统漏洞进行修复,传统的生成补丁的方式一般是通过人工的方式,根据漏洞信息做一些更新,将更新后的函数写入到对应的一个补丁文件,然后进行编译,但是,通过这种方式生成补丁文件的流程非常复杂,而且需要花费大量的时间。
[0004] 上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。

发明内容

[0005] 本发明的主要目的在于提出一种热补丁文件生成方法、装置、设备及存储介质,旨在解决如何方便快捷地生成热补丁文件的技术问题。
[0006] 为实现上述目的,本发明提供一种热补丁文件生成方法,所述热补丁文件生成方法包括以下步骤:
[0007] 将源文件与目标文件进行比较,以确定待替换对象;
[0008] 对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;
[0009] 根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。
[0010] 可选地,所述对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据,具体包括:
[0011] 对所述目标文件进行词法分析,获得待处理数据;
[0012] 基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;
[0013] 根据所述待处理语法树确定与所述待替换对象对应的目标数据。
[0014] 可选地,所述待处理数据包括:单词序列;
[0015] 所述对所述目标文件进行词法分析,获得待处理数据,具体包括:
[0016] 获取所述目标文件的目标文件数据,并从所述目标文件数据中提取字符序列;
[0017] 将所述字符序列转换为所述单词序列;
[0018] 相应地,所述基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树,具体包括:
[0019] 基于预设语言特征对所述单词序列进行语法分析,生成待处理语法树。
[0020] 可选地,所述将所述字符序列转换为单词序列,具体包括:
[0021] 从所述字符序列中提取待处理字符,并确定所述待处理字符对应的逻辑顺序;
[0022] 基于预设构词规则将所述待处理字符转换为待处理单词;
[0023] 根据所述待处理单词和所述逻辑顺序生成单词序列。
[0024] 可选地,所述基于预设语言特征对所述单词序列进行语法分析,生成待处理语法树,具体包括:
[0025] 基于预设语言特征对所述单词序列进行组合,获得语法短语;
[0026] 识别所述语法短语对应的语法范畴,并基于所述语法范畴对所述语法短语进行语法检查;
[0027] 判断语法检查结果是否为预设结果;
[0028] 在所述语法检查结果为所述预设结果时,根据所述语法短语生成待处理语法树。
[0029] 可选地,所述根据所述待处理语法树确定与所述待替换对象对应的目标数据,具体包括:
[0030] 基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树;
[0031] 从所述目标语法树中提取与所述待替换对象对应的目标数据。
[0032] 可选地,所述从所述目标语法树中提取与所述待替换对象对应的目标数据,具体包括:
[0033] 获取所述目标语法树中与所述待替换对象对应的第一函数栈,并获取所述源文件中与所述待替换对象对应的第二函数栈;
[0034] 根据所述第一函数栈和所述第二函数栈生成改动信息;
[0035] 根据所述改动信息对所述目标语法树进行更新,获得更新后的目标语法树;
[0036] 从所述更新后的目标语法树中提取与所述待替换对象对应的目标数据。
[0037] 可选地,所述根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件,具体包括:
[0038] 从所述目标数据中提取JAVA源代码;
[0039] 对所述JAVA源代码进行编译,获得CLASS字节码;
[0040] 根据所述CLASS字节码生成DEX字节码;
[0041] 根据所述DEX字节码生成热补丁文件。
[0042] 可选地,所述根据所述DEX字节码生成热补丁文件,具体包括:
[0043] 根据所述DEX字节码生成APK文件;
[0044] 将所述APK文件作为热补丁文件。
[0045] 可选地,所述将源文件与目标文件进行比较,以确定待替换对象,具体包括:
[0046] 获取源文件的源文件数据,并获取目标文件的目标文件数据;
[0047] 将所述源文件数据与所述目标文件数据进行比较;
[0048] 根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数;
[0049] 将所述存在区别的代码或函数作为待替换对象。
[0050] 可选地,所述根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件之后,还包括:
[0051] 将所述热补丁文件存储至系统的备份存储区域;
[0052] 在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;
[0053] 基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。
[0054] 可选地,所述基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复之后,还包括:
[0055] 检测所述漏洞修复是否完成;
[0056] 在所述漏洞修复完成时,获取修复完成后的已替换文件;
[0057] 将所述已替换文件与所述目标文件进行比较;
[0058] 在所述已替换文件与所述目标文件相同时,删除所述热补丁文件。
[0059] 此外,为实现上述目的,本发明还提出一种热补丁文件生成装置,所述热补丁文件生成装置包括:
[0060] 文件比较模块,用于将源文件与目标文件进行比较,以确定待替换对象;
[0061] 目标确定模块,用于对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;
[0062] 补丁生成模块,用于根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。
[0063] 可选地,所述目标确定模块,还用于对所述目标文件进行词法分析,获得待处理数据;
[0064] 所述目标确定模块,还用于基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;
[0065] 所述目标确定模块,还用于根据所述待处理语法树确定与所述待替换对象对应的目标数据。
[0066] 可选地,所述目标确定模块,还用于基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树;
[0067] 所述目标确定模块,还用于从所述目标语法树中提取与所述待替换对象对应的目标数据。
[0068] 可选地,所述补丁生成模块,还用于从所述目标数据中提取JAVA源代码;
[0069] 所述补丁生成模块,还用于对所述JAVA源代码进行编译,获得CLASS字节码;
[0070] 所述补丁生成模块,还用于根据所述CLASS字节码生成DEX字节码;
[0071] 所述补丁生成模块,还用于根据所述DEX字节码生成热补丁文件。
[0072] 可选地,所述热补丁文件生成装置还包括漏洞修复模块,用于将所述热补丁文件存储至系统的备份存储区域;
[0073] 所述漏洞修复模块,还用于在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;
[0074] 所述漏洞修复模块,还用于基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。
[0075] 此外,为实现上述目的,本发明还提出一种热补丁文件生成设备,所述热补丁文件生成设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的热补丁文件生成程序,所述热补丁文件生成程序配置有实现如上所述的热补丁文件生成方法的步骤。
[0076] 此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有热补丁文件生成程序,所述热补丁文件生成程序被处理器执行时实现如上文所述的热补丁文件生成方法的步骤。
[0077] 本发明提出的热补丁文件生成方法,通过将源文件与目标文件进行比较,以确定待替换对象;对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。通过对目标文件进行语法分析,确定待替换对象对应的目标数据,再根据目标数据生成热补丁文件,从而达到了方便快捷地生成热补丁文件的效果。

附图说明

[0078] 图1是本发明实施例方案涉及的硬件运行环境的热补丁文件生成设备结构示意图;
[0079] 图2为本发明热补丁文件生成方法第一实施例的流程示意图;
[0080] 图3为本发明热补丁文件生成方法第二实施例的流程示意图;
[0081] 图4为本发明热补丁文件生成方法第二实施例的语法树结构图;
[0082] 图5为本发明热补丁文件生成方法第三实施例的流程示意图;
[0083] 图6为本发明热补丁文件生成方法第四实施例的流程示意图;
[0084] 图7为本发明热补丁文件生成装置第一实施例的功能模块示意图。
[0085] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0086] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0087] 参照图1,图1为本发明实施例方案涉及的硬件运行环境的热补丁文件生成设备结构示意图。
[0088] 如图1所示,该热补丁文件生成设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如按键,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI‑FI接口)。存储器1005可以是高速随机存取存储器(Random Access Memory,RAM)存储器,也可以是稳定的存储器(non‑volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器
1001的存储装置。
[0089] 本领域技术人员可以理解,图1中示出的设备结构并不构成对热补丁文件生成设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0090] 如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及热补丁文件生成程序。
[0091] 在图1所示的热补丁文件生成设备中,网络接口1004主要用于连接外网,与其他网络设备进行数据通信;用户接口1003主要用于连接用户设备,与所述用户设备进行数据通信;本发明设备通过处理器1001调用存储器1005中存储的热补丁文件生成程序,并执行本发明实施例提供的热补丁文件生成方法。
[0092] 基于上述硬件结构,提出本发明热补丁文件生成方法实施例。
[0093] 参照图2,图2为本发明热补丁文件生成方法第一实施例的流程示意图。
[0094] 在第一实施例中,所述热补丁文件生成方法包括以下步骤:
[0095] 步骤S10,将源文件与目标文件进行比较,以确定待替换对象。
[0096] 需要说明的是,本实施例的执行主体可为热补丁文件生成设备,还可为其他可实现相同或相似功能的设备,本实施例对此不作限制,在本实施例中,以热补丁文件生成设备为例进行说明。
[0097] 需要说明的是,本实施例针对的对象可为Android系统,还可为其他系统,本实施例对此不作限制。源文件和目标文件可为Android系统的文件,也可为Android系统内的应用程序的文件,本实施例对此不作限制。
[0098] 应当理解的是,源文件为需要替换的文件,是有漏洞的文件,目标文件为确定的待替换文件,是已经克服了该漏洞的文件,目标文件可为用户选择确定的,也可为系统自动选择确定的,本实施例对此不作限制。
[0099] 可以理解的是,可获取源文件的源文件数据,并获取目标文件的目标文件数据,将源文件数据与目标文件数据进行比较,根据比较结果确定源文件数据与目标数据之间的存在区别的代码或函数,将所述存在区别的代码或函数作为待替换对象,还可通过其他比较方式确定待替换对象,本实施例对此不作限制。
[0100] 步骤S20,对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据。
[0101] 需要说明的是,可先获取目标文件的目标文件数据,从目标文件数据中提取字符序列,将字符序列转换为单词序列,基于JAVA语言的语言特征对单词序列进行语法分析,生成待处理语法树,再基于Android的特征和语义注释对待处理语法树进行语义分析,获得目标语法树,从目标语法树中提取待替换对象对应的目标数据。
[0102] 应当理解的是,由于待替换对象可为代码或函数,因此,待替换对象对应的目标数据可为代码数据或函数数据,本实施例对此不作限制。
[0103] 可以理解的是,语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次,也就是说,语法树就是按照某一规则进行推导时所形成的树。
[0104] 步骤S30,根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。
[0105] 需要说明的是,热补丁指的是能够修复软件漏洞的一些代码,是一种快速、低成本修复产品软件缺陷的方式,热补丁对应的文件便是热补丁文件。
[0106] 应当理解的是,在确定与待替换对象对应的目标数据后,可根据目标数据生成DEX字节码,再根据DEX字节码生成热补丁文件,具体步骤可为,从目标数据中提取JAVA源代码,对JAVA源代码进行编译,获得CLASS字节码,再根据CLASS字节码生成DEX字节码,根据DEX字节码生成APK文件,将所述APK文件作为热补丁文件,还可为其他方式,本实施例对此不作限制。
[0107] 可以理解的是,本实施例针对的是Android系统,生成的热补丁文件为可在Android系统下直接运行的补丁文件,可提高漏洞修复的效率。
[0108] 本实施例中通过将源文件与目标文件进行比较,以确定待替换对象;对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。通过对目标文件进行语法分析,确定待替换对象对应的目标数据,再根据目标数据生成热补丁文件,从而达到了方便快捷地生成热补丁文件的效果。
[0109] 在一实施例中,如图3所示,基于第一实施例提出本发明热补丁文件生成方法第二实施例,所述步骤S20,包括:
[0110] 步骤S201,对所述目标文件进行词法分析,获得待处理数据。
[0111] 需要说明的是,待处理数据可为单词序列,获取目标文件的目标文件数据,从目标文件数据中提取字符序列,将字符序列转换为单词序列,基于预设语言特征对单词序列进行语法分析,生成待处理语法树,其中,词法分析可通过词法分析器程序来进行,本实施例对此不作限制。
[0112] 应当理解的是,由于本实施例的方案针对的是Android系统,而Android系统中的文件数据基本上都是采用的JAVA语言,因此,所述预设语言特征可为JAVA语言的语言特征。
[0113] 可以理解的是,目标文件数据是由字符序列组成的,因此,可获取目标文件的目标文件数据,然后从目标文件数据中提取字符序列,再将字符序列转换为单词序列,在获得单词序列后就说明词法分析已经完成了,然后,基于JAVA语言特征对单词序列进行语法分析,根据语法分析结果生成待处理语法树,其中,语法分析可通过语法分析器程序来进行,本实施例对此不作限制。
[0114] 进一步地,所述将字符序列转换为单词序列的步骤,包括:
[0115] 从所述字符序列中提取待处理字符,并确定所述待处理字符对应的逻辑顺序;基于预设构词规则将所述待处理字符转换为待处理单词;根据所述待处理单词和所述逻辑顺序生成单词序列。
[0116] 需要理解的是,本实施例中的字符序列可为字符串,字符串是由数字、字母、下划线组成的一串字符,在程序设计中,字符串为符号或数值的一个连续序列。
[0117] 应当理解的是,在字符序列中除了包含有多个待处理字符外,还包含有这些待处理字符对应的逻辑顺序,所述逻辑顺序指的是这些待处理字符之间的排列关系,所述预设构词规则可为JAVA语言的构词规则。
[0118] 可以理解的是,在确定待处理字符和待处理字符对应的逻辑顺序后,可先基于JAVA语言的构词规则将待处理字符转换为待处理单词,由于在将待处理字符转换为待处理单词的过程中只是对其表现形式上进行了转换,并没有改变其逻辑顺序,因此,可根据转换得到的待处理单词和所述逻辑顺序生成单词序列。
[0119] 在本实施例中,通过从字符序列中提取待处理字符,并确定待处理字符对应的逻辑顺序,基于预设构词规则将待处理字符转换为待处理单词,根据待处理单词和逻辑顺序生成单词序列。从而通过词法分析的方式生成单词序列,用于后续的语法分析,提升了语法分析的准确性以及效率。
[0120] 步骤S202,基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树。
[0121] 在具体实现中,例如,在经过语法分析后获得的表达式为1+3*(4‑1)+2时,生成的待处理语法树如图4所示,图4为待处理语法树的一种表现形式的语法树结构图,经过语法分析还可获得其他表达式,或者代码、函数,相应会生成其他待处理语法树,本实施例对此不作限制。
[0122] 进一步地,所述步骤S202,包括:
[0123] 基于预设语言特征对所述单词序列进行组合,获得语法短语;识别所述语法短语对应的语法范畴,并基于所述语法范畴对所述语法短语进行语法检查;判断语法检查结果是否为预设结果;在所述语法检查结果为所述预设结果时,根据所述语法短语生成待处理语法树。
[0124] 需要说明的是,基于JAVA语言的语言特征对单词序列进行组合,获得语法短语,然后识别语法短语对应的语法范畴,其中,语法范畴是各种语法形式表示的语法意义的概括,从语法形式上看,包括所有显性语法形式和隐形语法形式,从语法意义上看,包括所有结构意义、功能意义和表述意义。
[0125] 应当理解的是,在识别语法短语对应的语法范畴后,可基于语法范畴对语法短语进行语法检查,并判断语法检查结果是否为预设结果,其中,预设结果可为检查通过,本实施例对此不作限制。
[0126] 可以理解的是,在语法检查结果为检查通过时,说明,语法分析没有问题,根据生成的语法短语生成待处理语法树。
[0127] 在本实施例中,通过基于预设语言特征对所述单词序列进行组合,获得语法短语,识别所述语法短语对应的语法范畴,并基于所述语法范畴对所述语法短语进行语法检查,判断语法检查结果是否为预设结果;在所述语法检查结果为所述预设结果时,根据所述语法短语生成待处理语法树。先对单词序列进行组合,获得语法短语,再对语法短语进行语法检查,在检查通过时根据语法短语生成待处理语法树,从而根据词法分析结果准确地生成待处理语法树,并提高了语法树的生成效率。
[0128] 步骤S203,根据所述待处理语法树确定与所述待替换对象对应的目标数据。
[0129] 进一步地,所述步骤S203,包括:
[0130] 基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树,从所述目标语法树中提取与所述待替换对象对应的目标数据。
[0131] 需要说明的是,所述预设语义注释可为Android的语义注释,可基于Android的特征和语义注释对待处理语法树进行语义分析,获得具有语义逻辑的目标语法树,从目标语法树中提取与待替换对象对应的目标数据,目标数据可为代码或函数,本实施例对此不作限制。
[0132] 应当理解的是,基于Android的特征和语义注释对待处理语法树进行语义分析,可使得生成的目标语法树符合Android的特征和语法,使得目标语法树具备Android的逻辑。由于待替换对象是应用于Android的函数或代码,因此,可从目标语法树中提取与待替换对象对应的具有逻辑的目标数据。
[0133] 在本实施例中,通过基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树,从所述目标语法树中提取与所述待替换对象对应的目标数据。通过语义分析获得目标语法树,并提取与待替换对象对应的目标数据,从而可方便、准确地从目标语法树中提取与待替换对象对应的目标数据,也进一地提升了生成的热补丁文件的准确性。
[0134] 进一步地,所述从所述目标语法树中提取与所述待替换对象对应的目标数据的步骤,包括:
[0135] 获取所述目标语法树中与所述待替换对象对应的第一函数栈,并获取所述源文件中与所述待替换对象对应的第二函数栈;根据所述第一函数栈和所述第二函数栈生成改动信息;根据所述改动信息对所述目标语法树进行更新,获得更新后的目标语法树;从所述更新后的目标语法树中提取与所述待替换对象对应的目标数据。
[0136] 需要说明的是,目标语法树中待替换对象对应的函数或代码可能没有办法直接调用,因为上下文已经发生了变化,原来是在原生的一个函数栈里面调用,但是现在在带有补丁的函数栈,上下文变化之后,有些权限的东西没有办法直接调用,通过反向的方式,给这些函数赋予可以被调用或访问的权限,将改动的信息再更新到目标语法树中,获得更新后的目标语法树。
[0137] 应当理解的是,在已经知道了待替换对象,但是因为待替换对象对应的函数或代码跟其他的代码会存在逻辑关系,所以可以通过语法树的分析,能够将逻辑上存在问题的地方进行修正。
[0138] 可以理解的是,可从目标语法树中获取与待替换对象对应的第一函数栈,获取源文件中与待替换对象对应的第二函数栈,然后将第一函数栈和第二函数栈进行比较便可确定改动信息,其中,改动信息可为逻辑变动信息,还可为其他信息,本实施例对此不作限制。然后根据改动信息对目标语法树进行更新,获得更新后的目标语法树,从更新后的目标语法树中提取与待替换对象对应的目标数据。
[0139] 在本实施例中,通过获取所述目标语法树中与所述待替换对象对应的第一函数栈,并获取所述源文件中与所述待替换对象对应的第二函数栈;根据所述第一函数栈和所述第二函数栈生成改动信息;根据所述改动信息对所述目标语法树进行更新,获得更新后的目标语法树;从所述更新后的目标语法树中提取与所述待替换对象对应的目标数据。直接从目标语法树中提取待替换对象对应的目标数据,可能存在提取的目标数据的代码跟其他的代码存在逻辑上的逻辑问题,因此,可先根据目标语法树中的第一函数栈以及源文件中的第二函数栈生成改动信息,根据改动信息更新目标语法树,再从更新后的目标语法树中提取与待替换对象对应的目标数据,克服了目标数据可能与其他代码之间存在逻辑问题的问题。
[0140] 在具体实现中,假设在拿到一个需要替换的源文件A(有漏洞的文件),用来替换的目标文件为B,首先,可以找出来,哪些函数是需要进行替换的,比如说有一个函数需要进行替换,这个时候可以对目标文件B进行语法分析:先读整个文件,进行词法分析,基于JAVA语言的特征进行语法分析,生成一颗抽象的待处理语法树,然后根据Android的特征和语义注释做语义分析,分析完成后,就生成了具有语义逻辑的目标语法树,从目标语法树中就可以抽取出替换后的函数,这个函数就在目标语法树里面了。
[0141] 本实施例中通过对所述目标文件进行词法分析,获得待处理数据;基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;根据所述待处理语法树确定与所述待替换对象对应的目标数据。从而先对目标文件进行词法分析,再进行语法分析,生成待处理语法树,根据待处理语法树确定目标数据,提高了获取目标数据的准确性和效率。
[0142] 在一实施例中,如图5所示,基于第一实施例或第二实施例提出本发明热补丁文件生成方法第三实施例,在本实施例中,基于第一实施例进行说明,所述步骤S30,包括:
[0143] 步骤S301,从所述目标数据中提取JAVA源代码。
[0144] 需要说明的是,在编写JAVA代码时使用的都是.JAVA格式,但是根据.JAVA格式的代码直接生成DEX字节码是不太方便的,因此,可先从目标数据中提取.JAVA格式的JAVA源代码,对JAVA源代码进行转换之后再生成DEX字节码。
[0145] 可以理解的是,在确定待替换对象对应的目标数据后,可直接从目标数据中提取JAVA源代码。
[0146] 步骤S302,对所述JAVA源代码进行编译,获得CLASS字节码。
[0147] 需要说明的是,Android存在4种文件类型,分别为JAVA、CLASS、DEX和APK,其中,JAVA文件是应用程序源文件。Android本身相当一部分都是用JAVA编写而成,而Android的应用必须使用JAVA来开发。
[0148] 应当理解的是,CLASS文件是JAVA编译后的目标文件,不像J2SE,JAVA编译成CLASS就可以直接运行,但是Android平台上CLASS文件不能直接在Android上运行。由于Google使用了自己的Dalvik来运行应用,所以这里的CLASS也肯定不能在AndroidDalvik的JAVA环境中运行,Android的CLASS文件实际上只是编译过程中的中间目标文件,需要将其转换为DEX文件后才能在Dalvik上运行。
[0149] 步骤S303,根据所述CLASS字节码生成DEX字节码。
[0150] 应当理解的是,DEX文件是Android平台上的可执行文件,这是因为,Android虚拟机执行的并非JAVA字节码,而是另一种字节码:DEX格式的字节码,在对JAVA代码进行编译得到CLASS字节码后,可将CLASS字节码码转换成DEX字节码。
[0151] 步骤S304,根据所述DEX字节码生成热补丁文件。
[0152] 进一步地,所述步骤S304,包括:
[0153] 根据所述DEX字节码生成APK文件,将所述APK文件作为热补丁文件。
[0154] 需要说明的是,APK文件是Android安装包的扩展名,在生成DEX字节码后,可根据DEX字节码生成APK文件,将生成的APK文件作为热补丁文件。
[0155] 应当理解的是,之所以根据DEX字节码生成APK文件,将APK文件作为热补丁文件,而不是直接将DEX字节码作为热补丁文件,是因为APK文件是可以直接运行的文件,如果将APK文件作为热补丁文件的话,在进行漏洞修复时,可直接运行热补丁文件进行修复;而如果直接将DEX字节码作为热补丁文件的话,在进行漏洞修复时,还需要先对DEX字节码进行处理后,才能进行修复,流程比较复杂,也影响了修复的效率。
[0156] 在本实施例中,通过根据所述DEX字节码生成APK文件,将所述APK文件作为热补丁文件,从而将由DEX字节码生成的APK文件作为热补丁文件,在进行漏洞修复时可直接运行热补丁文件,提高了漏洞修复的效率。
[0157] 本实施例中通过从所述目标数据中提取JAVA源代码;对所述JAVA源代码进行编译,获得CLASS字节码;根据所述CLASS字节码生成DEX字节码;根据所述DEX字节码生成热补丁文件。从而先生成目标数据对应的DEX字节码,再根据DEX字节码生成可直接运行的热补丁文件,用于后续的漏洞修复,提高了漏洞修复的效率。
[0158] 在一实施例中,如图6所示,基于第一实施例或第二实施例提出本发明热补丁文件生成方法第四实施例,在本实施例中,基于第一实施例进行说明,所述步骤S10,包括:
[0159] 步骤S101,获取源文件的源文件数据,并获取目标文件的目标文件数据。
[0160] 需要说明的是,源文件是系统中需要替换的文件,是有漏洞的文件,可将其命名为文件A,目标文件是确定的待替换文件,是已经克服了该漏洞的文件,可将其命名为文件B,目标文件可为用户选择确定的,也可为系统自动选择确定的,本实施例对此不作限制。
[0161] 应当理解的是,可从源文件中提取源文件数据,还可从目标文件中提取目标文件数据,其中,源文件数据和目标文件数据可为代码数据,也可为函数数据,还可为代码数据和函数数据的结合,还可为其他数据,本实施例对此不作限制。
[0162] 步骤S102,将所述源文件数据与所述目标文件数据进行比较。
[0163] 可以理解的是,在获取源文件的源文件数据和目标文件的目标文件数据后,可将源文件数据与目标文件数据进行比较,通过比较的方式便可确定源文件数据与目标文件数据之间的差异。
[0164] 步骤S103,根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数。
[0165] 应当理解的是,根据比较结果可确定源文件数据与目标文件数据之间的差异,可确定源文件数据与目标文件数据之间存在区别的数据,然后进一步从存在区别的数据中确定存在区别的代码或函数。
[0166] 在具体实现中,例如,将文件A的源文件数据和文件B的目标文件数据进行比较,根据比较结果可确定源文件数据与目标文件数据之间存在区别的数据,然后查找存在区别的数据对应的代码或函数,通过以上方式便可确定源文件数据与目标文件数据之间存在区别的代码或函数。
[0167] 可以理解的是,本实施例中所说的代码或函数,可为单个的代码或函数,也可为由多个代码或函数组成的组合,本实施例对此不作限制。
[0168] 步骤S104,将所述存在区别的代码或函数作为待替换对象。
[0169] 应当理解的是,若源文件数据和目标文件数据之间有存在区别的代码或函数,那么就说明存在区别的代码或函数是可能存在漏洞的,需要对这些存在区别的代码或函数进行替换,因此,可将存在区别的代码或函数作为待替换对象。
[0170] 进一步地,所述步骤S30之后,还包括:
[0171] 将所述热补丁文件存储至系统的备份存储区域;在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。
[0172] 需要说明的是,由于根据热补丁文件来对系统进行漏洞修复需要一定的时间,而有些用户可能不希望在使用软件的过程中进行漏洞修复,因此,可在生成热补丁文件后,将热补丁文件存储至系统的备份存储区域。如果没有接收到用户的操作指令,则先不采取操作;在接收到用户输入的操作指令时,说明此时需要进行漏洞修复了,从备份存储区域提取之前存储的热补丁文件,然后基于操作指令和热补丁文件对系统进行漏洞修复。
[0173] 应当理解的是,如果不采取上述步骤的话,会导致生成热补丁文件后直接根据热补丁文件进行漏洞修复,但是,此时用户可能正在进行操作,或者用户当前并不希望进行漏洞修复,因此,可能会存在影响用户操作的问题。
[0174] 在本实施例中,通过将所述热补丁文件存储至系统的备份存储区域;在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。通过以上步骤,可使得根据热补丁文件进行漏洞修复的步骤更加灵活,在用户想要进行漏洞修复时调用热补丁文件进行漏洞修复,提升了漏洞修复的灵活性,可根据用户的选择来进行何时进行修复。
[0175] 进一步地,所述步骤基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复之后,还包括:
[0176] 检测所述漏洞修复是否完成;在所述漏洞修复完成时,获取修复完成后的已替换文件;将所述已替换文件与所述目标文件进行比较;在所述已替换文件与所述目标文件相同时,删除所述热补丁文件。
[0177] 需要说明的是,由于漏洞修复需要持续一段时间,因此可实时或周期性进行检测,以检测漏洞修复是否完成,在漏洞修复完成时,获取修复完成后的已替换文件。
[0178] 应当理解的是,源文件为文件A,根据热补丁文件进行漏洞修复后,会对文件A进行修改,获得新的文件A,所述新的文件A就是已替换文件。
[0179] 可以理解的是,由于是根据目标文件与源文件之间存在区别的待替换对象来生成热补丁文件,并且进行漏洞修复的,因此,修复完成后的已替换文件应与目标文件相同,若已替换文件与目标文件不相同,则说明可能存在一定的问题,修复并未成功;若已替换文件与目标文件相同,则说明此次漏洞修复成功,而既然此次漏洞修复已经成功了,之前生成的热补丁文件已经起到了其该起的作用,继续留着该热补丁文件也没有什么意义了,为了节省存储空间,可删除该热补丁文件。
[0180] 应当理解的是,通过上述步骤可通过判断漏洞修复是否成功,在漏洞修复成功时删除热补丁文件,起到了节约存储空间的作用。
[0181] 在本实施例中,通过检测所述漏洞修复是否完成;在所述漏洞修复完成时,获取修复完成后的已替换文件;将所述已替换文件与所述目标文件进行比较;在所述已替换文件与所述目标文件相同时,删除所述热补丁文件。可先通过检测漏洞修复是否完成,在漏洞修复完成后获取已替换文件,在已替换文件和目标文件相同时,删除热补丁文件,从而可在确保漏洞修复完成的情况下,删除热补丁文件,减少存储的文件数据,提高硬盘的存储能力。
[0182] 本实施例中通过获取源文件的源文件数据,并获取目标文件的目标文件数据;将所述源文件数据与所述目标文件数据进行比较;根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数;将所述存在区别的代码或函数作为待替换对象。从而通过将源文件的源文件数据和目标文件的目标文件数据进行比较确定待替换对象,保障了确定待替换对象的准确性。
[0183] 此外,本发明实施例还提出一种存储介质,所述存储介质上存储有热补丁文件生成程序,所述热补丁文件生成程序被处理器执行时实现如上文所述的热补丁文件生成方法的步骤。
[0184] 由于本存储介质采用了上述所有实施例的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。
[0185] 此外,参照图7,本发明实施例还提出一种热补丁文件生成装置,所述热补丁文件生成装置包括:
[0186] 文件比较模块10,用于将源文件与目标文件进行比较,以确定待替换对象。
[0187] 应当理解的是,源文件为需要替换的文件,是有漏洞的文件,目标文件为确定的待替换文件,是已经克服了该漏洞的文件,目标文件可为用户选择确定的,也可为系统自动选择确定的,本实施例对此不作限制。
[0188] 可以理解的是,可获取源文件的源文件数据,并获取目标文件的目标文件数据,将源文件数据与目标文件数据进行比较,根据比较结果确定源文件数据与目标数据之间的存在区别的代码或函数,将所述存在区别的代码或函数作为待替换对象,还可通过其他比较方式确定待替换对象,本实施例对此不作限制。
[0189] 目标确定模块20,用于对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据。
[0190] 需要说明的是,可先获取目标文件的目标文件数据,从目标文件数据中提取字符序列,将字符序列转换为单词序列,基于JAVA语言的语言特征对单词序列进行语法分析,生成待处理语法树,再基于Android的特征和语义注释对待处理语法树进行语义分析,获得目标语法树,从目标语法树中提取待替换对象对应的目标数据。
[0191] 应当理解的是,由于待替换对象可为代码或函数,因此,待替换对象对应的目标数据可为代码数据或函数数据,本实施例对此不作限制。
[0192] 可以理解的是,语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次,也就是说,语法树就是按照某一规则进行推导时所形成的树。
[0193] 补丁生成模块30,用于根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。
[0194] 需要说明的是,热补丁指的是能够修复软件漏洞的一些代码,是一种快速、低成本修复产品软件缺陷的方式,热补丁对应的文件便是热补丁文件。
[0195] 应当理解的是,在确定与待替换对象对应的目标数据后,可根据目标数据生成DEX字节码,再根据DEX字节码生成热补丁文件,具体步骤可为,从目标数据中提取JAVA源代码,对JAVA源代码进行编译,获得CLASS字节码,再根据CLASS字节码生成DEX字节码,根据DEX字节码生成APK文件,将所述APK文件作为热补丁文件,还可为其他方式,本实施例对此不作限制。
[0196] 可以理解的是,本实施例针对的是Android系统,生成的热补丁文件为可在Android系统下直接运行的补丁文件,可提高漏洞修复的效率。
[0197] 本实施例中通过将源文件与目标文件进行比较,以确定待替换对象;对所述目标文件进行语法分析,并根据语法分析结果确定与所述待替换对象对应的目标数据;根据所述目标数据生成DEX字节码,并根据所述DEX字节码生成热补丁文件。通过对目标文件进行语法分析,确定待替换对象对应的目标数据,再根据目标数据生成热补丁文件,从而达到了方便快捷地生成热补丁文件的效果。
[0198] 在一实施例中,所述目标确定模块20,还用于对所述目标文件进行词法分析,获得待处理数据;基于预设语言特征对所述待处理数据进行语法分析,生成待处理语法树;根据所述待处理语法树确定与所述待替换对象对应的目标数据。
[0199] 在一实施例中,所述目标确定模块20,还用于获取所述目标文件的目标文件数据,并从所述目标文件数据中提取字符序列;将所述字符序列转换为所述单词序列;基于预设语言特征对所述单词序列进行语法分析,生成待处理语法树。
[0200] 在一实施例中,所述目标确定模块20,还用于从所述字符序列中提取待处理字符,并确定所述待处理字符对应的逻辑顺序;基于预设构词规则将所述待处理字符转换为待处理单词;根据所述待处理单词和所述逻辑顺序生成单词序列。
[0201] 在一实施例中,所述目标确定模块20,还用于基于预设语言特征对所述单词序列进行组合,获得语法短语;识别所述语法短语对应的语法范畴,并基于所述语法范畴对所述语法短语进行语法检查;判断语法检查结果是否为预设结果;在所述语法检查结果为所述预设结果时,根据所述语法短语生成待处理语法树。
[0202] 在一实施例中,所述目标确定模块20,还用于基于预设语义注释对所述待处理语法树进行语义分析,获得目标语法树;从所述目标语法树中提取与所述待替换对象对应的目标数据。
[0203] 在一实施例中,所述目标确定模块20,还用于获取所述目标语法树中与所述待替换对象对应的第一函数栈,并获取所述源文件中与所述待替换对象对应的第二函数栈;根据所述第一函数栈和所述第二函数栈生成改动信息;根据所述改动信息对所述目标语法树进行更新,获得更新后的目标语法树;从所述更新后的目标语法树中提取与所述待替换对象对应的目标数据。
[0204] 在一实施例中,所述补丁生成模块30,还用于从所述目标数据中提取JAVA源代码;对所述JAVA源代码进行编译,获得CLASS字节码;根据所述CLASS字节码生成DEX字节码;根据所述DEX字节码生成热补丁文件。
[0205] 在一实施例中,所述补丁生成模块30,还用于根据所述DEX字节码生成APK文件;将所述APK文件作为热补丁文件。
[0206] 在一实施例中,所述文件比较模块10,还用于获取源文件的源文件数据,并获取目标文件的目标文件数据;将所述源文件数据与所述目标文件数据进行比较;根据比较结果确定所述源文件数据与所述目标文件数据之间存在区别的代码或函数;将所述存在区别的代码或函数作为待替换对象。
[0207] 在一实施例中,所述热补丁文件生成装置还包括漏洞修复模块,用于将所述热补丁文件存储至系统的备份存储区域;在接收到用户输入的操作指令时,从所述备份存储区域提取所述热补丁文件;基于所述操作指令和所述热补丁文件对所述系统进行漏洞修复。
[0208] 在一实施例中,所述漏洞修复模块,还用于检测所述漏洞修复是否完成;在所述漏洞修复完成时,获取修复完成后的已替换文件;将所述已替换文件与所述目标文件进行比较;在所述已替换文件与所述目标文件相同时,删除所述热补丁文件。
[0209] 在本发明所述热补丁文件生成装置的其他实施例或具体实现方法可参照上述各方法实施例,此处不再赘述。
[0210] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0211] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0212] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该估算机软件产品存储在如上所述的一个估算机可读存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台智能设备(可以是手机,估算机,热补丁文件生成设备,空调器,或者网络热补丁文件生成设备等)执行本发明各个实施例所述的方法。
[0213] 以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。