热补丁处理方法及装置制造方法

文档序号:6543200阅读:168来源:国知局
热补丁处理方法及装置制造方法
【专利摘要】本发明公开了一种热补丁处理方法及装置。其中,所述方法包括:监测是否有新的程序模块加载;若有,则获取所述程序模块对应的补丁信息;在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。本发明提供的技术方案通过监测新程序模块的加载情况,以在程序模块加载后,获取所述程序模块的补丁信息,然后在程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,这样就可以在不中断程序运行的情况下,对系统程序或应用程序进行修复或升级,提高了补丁处理的效率。
【专利说明】热补丁处理方法及装置
【技术领域】
[0001]本发明涉及一种计算机领域,特别是涉及一种热补丁处理方法及装置。
【背景技术】
[0002]目前,微软公司(Microsoft Corporation)将会全面停止对其公司出品的WindowsXP系统的支持服务,不再向个人用户发布关于Windows XP系统的漏洞补丁。但根据相关行业机构统计数据显示,Windows XP系统在全球市场的占有率仍然有25%,而在中国国内的占有率更是超过了 70%。这样对于现有Windows XP系统使用者来说没有了官方的支持服务,黑客必然会利用系统漏洞传播木马病毒,对用户电脑进行攻击,形成安全威胁。
[0003]因此,需要提供一种技术方案,以实现对现有得不到官方支持服务的系统程序或应用程序进行热补丁的方法,以在不中断程序运行的过程中对系统程序或应用程序进行修复或升级,提高补丁处理效率。

【发明内容】

[0004]鉴于上述问题,提出了本发明以便于提供一种克服上述问题或者至少部分地解决上述问题的热补丁处理方法及装置。
[0005]依据本发明的一个方面,提供了一种热补丁处理方法,包括:
[0006]监测是否有新的程序模块加载;
[0007]若有,则获取所述程序模块对应的补丁信息;
[0008]在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。
[0009]可选的,前述的热补丁处理方法,其中,所述获取所述程序模块对应的补丁信息,包括:
[0010]提取所述程序模块的特征信息;
[0011]根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信
肩、O
[0012]可选的,前述的热补丁处理方法,其中,所述特征信息包括:程序模块的文件名、程序模块的文件路径,程序模块的时间戳TimeStamp字段、程序模块的校验和CheckSum字段及程序模块的版本信息VersionInfo字段中的一个或任意多个的组合。
[0013]可选的,前述的热补丁处理方法,其中,所述补丁信息包括:补丁函数地址和被补丁函数地址;相应的,
[0014]所述在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,包括:
[0015]在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令;
[0016]将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
[0017]可选的,前述的热补丁处理方法,所述在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理之后,还包括:
[0018]执行所述程序模块,并在执行过程中当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
[0019]可选的,前述的热补丁处理方法,还包括:
[0020]获取添加钩子Hook函数的地址,其中,所述Hook函数用于监测是否有新的程序模块加载;
[0021]在所述地址处挂接所述Hook函数。
[0022]根据本发明的另一个方面,提供了一种热补丁处理装置,包括:
[0023]监测模块,用于监测是否有新的程序模块加载;
[0024]第一获取模块,用于当所述监测模块监测到有新的程序模块加载时,获取所述程序模块对应的补丁信息;
[0025]处理模块,用于在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。
[0026]可选的,前述的热补丁处理装置,其中,所述第一获取模块包括:
[0027]提取单元,用于提取所述程序模块的特征信息;
[0028]获取单元,用于根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信息。
[0029]可选的,前述的热补丁处理装置,其中,所述补丁信息包括:补丁函数地址和被补丁函数地址;相应的,所述处理模块包括:
[0030]构造单元,用于在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令;
[0031]替换单元,用于将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
[0032]可选的,前述的热补丁处理装置,还包括:
[0033]执行模块,用于执行所述程序模块,并在执行过程中当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
[0034]可选的,前述的热补丁处理装置,还包括:
[0035]第二获取模块,用于获取添加钩子Hook函数的地址,其中,所述Hook函数用于监测是否有新的程序模块加载;
[0036]挂接模块,用于在所述地址处挂接所述Hook函数。
[0037]借由上述技术方案,本发明实施例提供的技术方案至少具有下列优点:
[0038]本发明实施例提供的技术方案通过监测新程序模块的加载情况,以在在程序模块加载后,获取所述程序模块的补丁信息,然后在程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,这样就可以在不中断程序运行的情况下,对系统程序或应用程序进行修复或升级,提高了补丁处理的效率。
[0039]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。【专利附图】

【附图说明】
[0040]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0041]图1示出了本发明实施例一提供的热补丁处理方法的一种实现的流程示意图;
[0042]图2示出了本发明实施例一提供的热补丁处理方法的另一种实现的流程示意图;
[0043]图3示出了本发明实施例二提供的热补丁处理装置的一种实现的结构示意图;
[0044]图4示出了本发明实施例二提供的热补丁处理装置中所述第一获取模块的实现结构示意图;
[0045]图5示出了本发明实施例二提供的热补丁处理装置中所述处理模块的实现结构示意图;
[0046]图6示出了本发明实施例二提供的热补丁处理装置的另一种实现的结构示意图。【具体实施方式】
[0047]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0048]如图1所示,本发明实施例一提供的热补丁处理方法的流程示意图。如图1所示,本实施例的所述的方法的执行主体可以是热补丁处理装置。其中,所述热补丁处理装置可具体为安装在客户端设备上的客户端应用软件。用户在本地安装完成所述热补丁处理装置后,即在本地计算机中存储了用于进行热补丁处理的补丁信息,或者,本地计算机可通过互联网与服务器端实时进行交互以获取相应的补丁信息。如图1所示,本实施例所述的热补丁处理方法包括:
[0049]步骤101、监测是否有新的程序模块加载。
[0050]具体的,本步骤可采用现有Windows的消息处理机制,即HOOK机制来实现。其中,Windows的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种钩子(亦或称回调或反调,英文Hook)函数的功能。HOOK函数用于监视消息的传递过程,并在其到达目的进程或目的模块之前,将其截获。
[0051]步骤102、若有,则获取所述程序模块对应的补丁信息。
[0052]具体的,所述补丁信息可存储在预设的热补丁应用配置文件中。例如,所述热补丁应用配置文件中包括有至少一个程序模块的特征信息及对应的补丁信息。其中,所述程序模块的特征信息可以包括:程序模块的文件名、程序模块的文件路径,程序模块的时间戳字段(TimeStamp)、程序模块的校验和字段(Checksum)及程序模块的版本信息字段(VersionInfo)中的一个或任意多个的组合。
[0053]对应的,本步骤可采用如下方法实现:
[0054]首先,提取所述程序模块的特征信息。
[0055]然后,根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信息。
[0056]这里需要补充的是:所述热补丁应用配置文件由服务进程加载和解析,并以共享的内存映射文件(File Mapping)对象保存,后续的每个进程只负责读取File Mapping,而不用重新加载和解析所述热补丁应用配置文件。另外,此处还需要说明的是:所述热补丁应用配置文件还包括校验信息(如循环冗余校验CRC信息及版本信息等)。因此,本步骤获取到的所述程序模块对应的补丁信息还应该满足通过基于CRC计算的完整性检查及版本信息的安全性检查。
[0057]步骤103、在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。
[0058]具体的,所述补丁信息可以包括:补丁函数地址和被补丁函数地址。相应的本步骤103具体可采用如下方法实现:
[0059]首先,在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令。
[0060]例如,所述补丁函数地址为0x1600000,被补丁函数地址为0x300080,采用跳转指令操作符JMP T0,构造得到的跳转指令为JMP0xl2fff7b。
[0061]然后,将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
[0062]将所述程序模块中的被补丁函数地址0x300080处的指令替换为上一步骤得到的跳转指令JMP0xl2fff7b,即完成了指令的替换。这样在所述程序模块执行过程中,当执行到所述0x300080地址处时,就会通过所述跳转指令JMP0xl2fff7b跳转到相应的补丁函数,执行该补丁函数,这样就实现了在不中断程序运行就能对程序进行实时修复的目的。
[0063]即进一步的,本实施例所述的方法中所述步骤103之后,还包括如下步骤:
[0064]执行所述程序模块,并在执行过程中当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
[0065]这里需要补充的是:所述补丁函数被预先读取到补丁文件缓冲区内。所述补丁函数地址可以是所述补丁文件在所述缓冲区内的地址。
[0066]本实施例提供的技术方案通过监测新程序模块的加载情况,以在在程序模块加载后,获取所述程序模块的补丁信息,然后在程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,这样就可以在不中断程序运行的情况下,对系统程序或应用程序进行修复或升级,提高了补丁处理的效率。
[0067]进一步的,如图2所示,上述实施例所述的方法除包括上述各步骤外,还包括如下步骤:
[0068]步骤201、获取添加钩子Hook函数的地址。
[0069]其中,所述Hook函数用于监测是否有新的程序模块加载。例如,在WindowsXP系统中,可进行栈回溯,找到ntdll !LdrpCallInitRoutine的地址,找到的所述ntdll !LdrpCallInitRoutine的地址即可作为所述Hook函数的地址。
[0070]步骤202、在所述地址处挂接所述Hook函数。 [0071]本实施例挂接所述Hook函数的原理是:系统程序通常是按照自己的加载顺序依次调用并加载其他程序模块的。所有程序模块中可能有部分存在漏洞,也可能都存在漏洞。当前程序模块一被加载但还未执行时,根据本实施例提供的热补丁处理方法就已经进行了热补丁处理。然而,继当前新加载的程序模块之后,系统程序是不知道加载什么程序模块的,所以要在加载的程序模块后面加Hook函数,以通过所述Hook函数对所述程序模块以后新加载的程序模块进行监测,这样后面系统程序只要一调用,系统程序就能最先知道有新的模块加载了。
[0072]需要说明的是:对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0073]本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0074]如图3所示,本发明实施例二提供的热补丁处理装置的结构示意图。如图3所示,本实施例二所述的装置包括:监测模块1、第一获取模块2和处理模块3。其中,所述监测模块用于监测是否有新的程序模块加载。所述第一获取模块2用于当所述监测模块I监测到有新的程序模块加载时,获取所述程序模块对应的补丁信息。所述处理模块3用于在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。本实施例提供的所述热补丁处理装置可实现上述实施例提供的所述热补丁处理方法。
[0075]本实施例提供的技术方案通过监测新程序模块的加载情况,以在在程序模块加载后,获取所述程序模块的补丁信息,然后在程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,这样就可以在不中断程序运行的情况下,对系统程序或应用程序进行修复或升级,提高了补丁处理的效率。
[0076]进一步的,上述实施例中所述的获取模块可采用图4所示的结构实现。具体的,如图4所示,所述第一获取模块2包括:提取单元21和获取单元22。其中,所述提取单元21用于提取所述程序模块的特征信息。所述获取单元22用于根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信息,其中,获取到的所述补丁信息即为所述程序模块对应的补丁信息。所述程序模块的特征信息包括:程序模块的文件名、程序模块的文件路径,程序模块的时间戳字段(TimeStamp)、程序模块的校验和字段(Checksum)及程序模块的版本信息字段(Ver si on Info)中的一个或任意多个的组合。
[0077]进一步的,上述实施例中所述的补丁信息包括:补丁函数地址和被补丁函数地址。相应的,上述实施例中所述的处理模块可采用图5所示的结构实现。具体的,如图5所示,所述处理模块3包括:构造单元31和替换单元32。其中,所述构造单元31用于在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令。所述替换单元32用于将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
[0078]再进一步的,基于上述结构的处理模块,所述热补丁处理装置如图6所示还包括:执行模块4。所述执行模块4用于执行所述程序模块,并在执行过程中当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
[0079]进一步的,如图6所示,所述热补丁处理装置还包括:第二获取模块5和挂接模块
6。其中,所述第二获取模块5用于获取添加钩子Hook函数的地址,其中,所述Hook函数用于监测是否有新的程序模块加载。所述挂接模块6用于在所述地址处挂接所述Hook函数。
[0080]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0081]可以理解的是,上述方法及交换机中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
[0082]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0083]在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0084]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0085]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0086]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0087]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0088]本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP )来实现根据本发明实施例的热补丁处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0089]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
【权利要求】
1.一种热补丁处理方法,其特征在于,包括: 监测是否有新的程序模块加载; 若有,则获取所述程序模块对应的补丁信息; 在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。
2.根据权利要求1所述的方法,其特征在于,所述获取所述程序模块对应的补丁信息,包括: 提取所述程序模块的特征信息; 根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信息。
3.根据权利要求1或2所述的方法,其特征在于,所述补丁信息包括:补丁函数地址和被补丁函数地址;相应的, 所述在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理,包括: 在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令; 将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
4.根据权利要求3所述的方法,其特征在于,所述在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理之后,还包括: 执行所述程序模块,并在执行过程中 当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
5.根据权利要求1或2所述的方法,其特征在于,还包括: 获取添加钩子Hook函数的地址,其中,所述Hook函数用于监测是否有新的程序模块加载; 在所述地址处挂接所述Hook函数。
6.一种热补丁处理装置,其特征在于,包括: 监测模块,用于监测是否有新的程序模块加载; 第一获取模块,用于当所述监测模块监测到有新的程序模块加载时,获取所述程序模块对应的补丁信息; 处理模块,用于在所述程序模块运行之前,根据所述补丁信息,对所述程序模块进行热补丁处理。
7.根据权利要求6所述的热补丁处理装置,其特征在于,所述第一获取模块包括: 提取单元,用于提取所述程序模块的特征信息; 获取单元,用于根据预设的特征信息及补丁信息的对应关系,获取所述特征信息对应的补丁信息。
8.根据权利要求6或7所述的热补丁处理装置,其特征在于,所述补丁信息包括:补丁函数地址和被补丁函数地址;相应的,所述处理模块包括: 构造单元,用于在所述程序模块运行之前,根据所述补丁函数地址和所述被补丁函数地址,构造跳转指令; 替换单元,用于将所述程序模块中所述被补丁函数地址处的指令替换为所述跳转指令。
9.根据权利要求8所述的热补丁处理装置,其特征在于,还包括: 执行模块,用于执行所述程序模块,并在执行过程中当调用到所述程序模块中所述被补丁函数地址处的指令时,根据所述跳转指令跳转到所述补丁函数地址处的补丁函数,执行所述补丁函数。
10.根据权利要求6或7所述的热补丁处理装置,其特征在于,还包括: 第二获取模块,用于获取添加钩子Hook函数的地址,其中,所述Hook函数用于监测是否有新的程序模块加载; 挂接模块,用于在所述地址处挂接所述Hook函数。
【文档编号】G06F9/445GK103885808SQ201410139346
【公开日】2014年6月25日 申请日期:2014年4月8日 优先权日:2014年4月8日
【发明者】张聪, 郑文彬 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1