软件增量升级方法、装置、设备及计算机可读存储介质与流程

    专利2022-07-08  96


    本发明涉及软件技术领域,特别是涉及一种软件增量升级方法、装置、设备及计算机可读存储介质。



    背景技术:

    目前,windows软件的升级功能通常为通过升级文件和现有文件的大小、版本号或md5值来确定文件是否有变化,如果有变化则进行升级。然而,由于目前编译自动化程度越来越高,文件版本号、证书签名等基本上都是在编译期自动处理好的,往往会出现版本号自增、证书签名的时间戳发生变化、甚至文件大小都发生了变化等情况。例如,同一证书的签名时间不同,就会生成不同的时间戳。这些变化情况并不会影响文件执行的功能,但都会被当做变化的文件进行更新,由此增加了下载的数据量,也增加了文件替换的复杂度,甚至因数据量过大,有可能导致升级失败。



    技术实现要素:

    本发明的目的是提供一种软件增量升级方法、装置、设备及计算机可读存储介质,用于在软件增量升级的场景中减少非必要的软件升级,提高下载效率和升级成功率。

    为解决上述技术问题,本发明提供一种软件增量升级方法,包括:

    当接收到新版本可执行文件时,计算所述新版本可执行文件的功能代码对应的第一签名;

    获取当前版本可执行文件的功能代码对应的第二签名;其中,所述第二签名和所述第一签名采用同样的计算规则生成;

    若所述第一签名和所述第二签名一致,则拒绝采用所述新版本可执行文件进行软件升级;

    若所述第一签名和所述第二签名不一致,则采用所述新版本可执行文件进行软件升级。

    可选的,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    剔除所述新版本可执行文件中的非功能代码,得到所述新版本可执行文件的重构内容;

    计算所述重构内容对应的第一签名。

    可选的,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    将所述新版本可执行文件中的非功能代码替换为默认代码,得到所述新版本可执行文件的重构内容;

    计算所述重构内容对应的第一签名。

    可选的,所述非功能代码具体包括:调试目录、资源目录和安全目录。

    可选的,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    将所述新版本可执行文件的nt文件头结构中的时间戳修改为第一默认时间戳;

    遍历所述新版本可执行文件的nt扩展可选结构中的数据目录中的调试节点的子结构,若存在nb10类型文件,则将所述nb10类型文件中的全局唯一标识符修改为默认标识符;若存在rsds类型文件,则将所述rsds类型文件中的四字节时间戳修改为第二默认时间戳;

    对所述新版本可执行文件中动态长度的程序数据库文件的源路径信息进行标记并转化为偏移地址,而后遍历所述新版本可执行文件的文件映像结构中的节表,若所述节表中包含被标记的地址,则剔除所述被标记的地址并对所述节表进行重组,并根据重组后的节表修改所述文件映像结构中的数据长度以及与所述节表的关联结构中指向实际数据的指针;

    遍历所述新版本可执行文件的资源目录的各层级以获取所述新版本可执行文件的版本信息,将所述新版本可执行文件的版本信息更改为默认版本信息;

    计算经过上述内容重构后的新版本可执行文件的第一签名。

    可选的,所述第一签名和所述第二签名均具体为消息摘要算法签名。

    可选的,还包括:

    遍历系统文件;

    当检测到软件升级文件时,检测所述软件升级文件的类型;

    若所述软件升级文件为可执行文件,则进入所述计算所述新版本可执行文件的功能代码对应的第一签名的步骤;

    若所述软件升级文件非所述可执行文件,则计算所述软件升级文件的第三签名;

    获取当前系统文件中非可执行文件的第四签名;

    若所述第三签名和所述第四签名一致,则拒绝采用所述软件升级文件进行软件升级;

    若所述第三签名和所述第四签名不一致,则采用所述软件升级文件进行软件升级。

    为解决上述技术问题,本发明还提供一种软件增量升级装置,包括:

    计算单元,用于当接收到新版本可执行文件时,计算所述新版本可执行文件的功能代码对应的第一签名;

    获取单元,用于获取当前版本可执行文件的功能代码对应的第二签名;其中,所述第二签名和所述第一签名采用同样的计算规则生成;

    升级单元,用于若所述第一签名和所述第二签名一致,则拒绝采用所述新版本可执行文件进行软件升级;若所述第一签名和所述第二签名不一致,则采用所述新版本可执行文件进行软件升级。

    为解决上述技术问题,本发明还提供一种软件增量升级设备,包括:

    存储器,用于存储指令,所述指令包括上述任意一项所述软件增量升级方法的步骤;

    处理器,用于执行所述指令。

    为解决上述技术问题,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述软件增量升级方法的步骤。

    本发明所提供的软件增量升级方法,通过在接收到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名,并获取当前版本可执行文件的功能代码对应的与第一签名采用同样的计算规则生成的第二签名,比较第一签名和第二签名是否相同,如果相同则拒绝采用新版本可执行文件进行软件升级,如果不相同则采用新版本可执行文件进行软件升级。本发明提供的软件增量升级方法通过忽略文件版本号、签名时间戳等非功能部分的变化,只针对可执行文件的功能代码的变化进行升级,减少了非必要的软件升级,进而提高了下载效率和升级成功率。

    本发明还提供一种软件增量升级装置、设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。

    附图说明

    为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1为本发明实施例提供的一种软件增量升级方法的流程图;

    图2为本发明实施例提供的一种软件增量升级装置的结构示意图;

    图3为本发明实施例提供的一种软件增量升级设备的结构示意图。

    具体实施方式

    本发明的核心是提供一种软件增量升级方法、装置、设备及计算机可读存储介质,用于在软件增量升级的场景中减少非必要的软件升级,提高下载效率和升级成功率。

    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

    图1为本发明实施例提供的一种软件增量升级方法的流程图。

    如图1所示,本发明实施例提供的软件增量升级方法包括:

    s101:当接收到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名。

    s102:获取当前版本可执行文件的功能代码对应的第二签名;其中,第二签名和第一签名采用同样的计算规则生成。

    s103:判断第一签名和第二签名是否一致;如果是,则进入步骤s104;如果否,则进入步骤s105。

    s104:拒绝采用新版本可执行文件进行软件升级。

    s105:采用新版本可执行文件进行软件升级。

    与现有技术中在检测到文件大小变化、版本号变化、签名时间戳变化、全文件md5值变化等就进行软件升级区别的是,本发明实施例提供的软件增量升级方法在检测到这些变化时不直接进行升级,而是计算新版本可执行文件中功能代码的第一签名,与当前版本可执行文件的功能代码的第二签名进行对比,若一致则拒绝此次升级,不必要的软件升级,若不一致再进行升级。

    在具体实施中,定时遍历系统文件中的文件,检查是否存在新版本可执行文件。可执行文件通常包括exe文件和dll文件。定时遍历文件,当检测到软件升级文件时,通过提取可执行文件结构中的dos映像结构中的dos标记(e_magic)和nt扩展结构中的nt标记(optionalheader.magic)可以判断软件升级文件是否为可执行文件。

    当检测到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名,将之与当前版本可执行文件的第二签名进行对比。其中,第一签名和第二签名可以均为消息摘要算法签名(md5)。第二签名可以是预先计算后存储于指定位置,例如存储于当前可执行文件中的指定位置,或另一指定位置。

    与功能代码相对的是非功能代码。在实际应用中,可执行文件的非功能代码通常包括调试目录(debugdirectory)、资源目录(resourcedirectory)和安全目录(securitydirectory)。通过对调试目录和资源目录进行修改,使新版本可执行文件和当前版本可执行文件的编译信息、时间信息和版本信息统一,并忽略安全目录的证书信息等非功能代码,对新版本可执行文件进行重构,对重构内容生成唯一签名来解决文件代码一致性的问题。例如,清空nt头中的pe签名,从而达到剔除动态变化的非功能信息的目的。

    则步骤s101中计算新版本可执行文件的功能代码对应的第一签名,具体可以包括:

    剔除新版本可执行文件中的非功能代码,得到新版本可执行文件的重构内容;

    计算重构内容对应的第一签名。

    或者,步骤s101中计算新版本可执行文件的功能代码对应的第一签名,具体包括:

    将新版本可执行文件中的非功能代码替换为默认代码,得到新版本可执行文件的重构内容;

    计算重构内容对应的第一签名。

    本发明实施例提供的软件增量升级方法,通过在接收到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名,并获取当前版本可执行文件的功能代码对应的与第一签名采用同样的计算规则生成的第二签名,比较第一签名和第二签名是否相同,如果相同则拒绝采用新版本可执行文件进行软件升级,如果不相同则采用新版本可执行文件进行软件升级。本发明提供的软件增量升级方法通过忽略文件版本号、签名时间戳等非功能部分的变化,只针对可执行文件的功能代码的变化进行升级,减少了非必要的软件升级,进而提高了下载效率和升级成功率。

    在上述实施例的基础上,本发明实施例提供的一种图1中步骤s101中计算新版本可执行文件的功能代码对应的第一签名的具体实施方案,具体包括:

    将新版本可执行文件的nt文件头结构中的时间戳(ntheader.fileheader.timedatestamp)修改为第一默认时间戳;

    遍历新版本可执行文件的nt扩展可选结构中的数据目录中的调试节点的子结构(optionheader.datadirectory[image_directory_entry_debug]),若存在nb10(程序数据库文件格式)类型文件,则将nb10类型文件中的全局唯一标识符修改为默认标识符;若存在rsds(程序数据库文件格式)类型文件,则将rsds类型文件中的四字节时间戳修改为第二默认时间戳;

    对新版本可执行文件中动态长度的程序数据库文件(pdb)的源路径信息进行标记并转化为偏移地址,而后遍历新版本可执行文件的文件映像结构中的节表(section_header),若节表中包含被标记的地址,则剔除被标记的地址并对节表进行重组(例如,在一段连续内存“a b c”中剔除标记的内存“b”块后对剩余内容进行重新排列,将“c”块向前偏移“b”块长度),并根据重组后的节表修改文件映像结构中的数据长度(sizeofrawdata,例如,将“a b c”的长度修改为“a c”的长度)以及与节表的关联结构中指向实际数据的指针;

    遍历新版本可执行文件的资源目录(image_resource_directory)的各层级以获取新版本可执行文件的版本信息(可以寻找0x0e内容标记的版本信息),将新版本可执行文件的版本信息更改为默认版本信息;

    计算经过上述内容重构后的新版本可执行文件(包括全部的节(section)、缩减和修改后的节的内容)的第一签名。

    在上述实施例的基础上,本发明实施例提供的软件增量升级方法还可以包括:

    遍历系统文件;

    当检测到软件升级文件时,检测软件升级文件的类型;

    若软件升级文件为可执行文件,则进入计算新版本可执行文件的功能代码对应的第一签名的步骤;

    若软件升级文件非可执行文件,则计算软件升级文件的第三签名;

    获取当前系统文件中非可执行文件的第四签名;

    若第三签名和第四签名一致,则拒绝采用软件升级文件进行软件升级;

    若第三签名和第四签名不一致,则采用软件升级文件进行软件升级。

    在系统文件中,除了可执行文件外,非可执行文件通常包括数据存储,例如图片、视频、文档等。对于此类非可执行文件,通常采用全量比较的方式,即计算软件升级文件的第三签名与当前系统文件中非可执行文件的第四签名进行对比,若不一致则进行软件升级。

    其中,第三签名和第四签名也可以均采用消息摘要算法签名(md5)。

    上文详述了软件增量升级方法对应的各个实施例,在此基础上,本发明还公开了与上述方法对应的软件增量升级装置、设备及计算机可读存储介质。

    图2为本发明实施例提供的一种软件增量升级装置的结构示意图。

    如图2所示,本发明实施例提供的软件增量升级装置包括:

    计算单元201,用于当接收到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名;

    获取单元202,用于获取当前版本可执行文件的功能代码对应的第二签名;其中,第二签名和第一签名采用同样的计算规则生成;

    升级单元203,用于若第一签名和第二签名一致,则拒绝采用新版本可执行文件进行软件升级;若第一签名和第二签名不一致,则采用新版本可执行文件进行软件升级。

    进一步的,本发明实施例提供的软件增量升级装置还可以包括:

    遍历单元,用于遍历系统文件;

    检测单元,用于当检测到软件升级文件时,检测软件升级文件的类型;

    判断单元,用于若软件升级文件为可执行文件,则进入升级单元103进行计算新版本可执行文件的功能代码对应的第一签名的步骤;若软件升级文件非可执行文件,则计算软件升级文件的第三签名;获取当前系统文件中非可执行文件的第四签名;若第三签名和第四签名一致,则拒绝采用软件升级文件进行软件升级;若第三签名和第四签名不一致,则采用软件升级文件进行软件升级。

    由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

    图3为本发明实施例提供的一种软件增量升级设备的结构示意图。

    如图3所示,本发明实施例提供的软件增量升级设备包括:

    存储器310,用于存储指令,所述指令包括上述任意一项实施例所述的软件增量升级方法的步骤;

    处理器320,用于执行所述指令。

    其中,处理器320可以包括一个或多个处理核心,比如3核心处理器、8核心处理器等。处理器320可以采用数字信号处理dsp(digitalsignalprocessing)、现场可编程门阵列fpga(field-programmablegatearray)、可编程逻辑阵列pla(programmablelogicarray)中的至少一种硬件形式来实现。处理器320也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器cpu(centralprocessingunit);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器320可以集成有图像处理器gpu(graphicsprocessingunit),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器320还可以包括人工智能ai(artificialintelligence)处理器,该ai处理器用于处理有关机器学习的计算操作。

    存储器310可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器310还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器310至少用于存储以下计算机程序311,其中,该计算机程序311被处理器320加载并执行之后,能够实现前述任一实施例公开的软件增量升级方法中的相关步骤。另外,存储器310所存储的资源还可以包括操作系统312和数据313等,存储方式可以是短暂存储或者永久存储。其中,操作系统312可以为windows。数据313可以包括但不限于上述方法所涉及到的数据。

    在一些实施例中,软件增量升级设备还可包括有显示屏330、电源340、通信接口350、输入输出接口360、传感器370以及通信总线380。

    本领域技术人员可以理解,图3中示出的结构并不构成对软件增量升级设备的限定,可以包括比图示更多或更少的组件。

    本申请实施例提供的软件增量升级设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如上所述的软件增量升级方法,效果同上。

    需要说明的是,以上所描述的装置、设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

    另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

    集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本发明各个实施例所述方法的全部或部分步骤。

    为此,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如软件增量升级方法的步骤。

    该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器rom(read-onlymemory)、随机存取存储器ram(randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

    本实施例中提供的计算机可读存储介质所包含的计算机程序能够在被处理器执行时实现如上所述的软件增量升级方法的步骤,效果同上。

    以上对本发明所提供的一种软件增量升级方法、装置、设备及计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

    还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。


    技术特征:

    1.一种软件增量升级方法,其特征在于,包括:

    当接收到新版本可执行文件时,计算所述新版本可执行文件的功能代码对应的第一签名;

    获取当前版本可执行文件的功能代码对应的第二签名;其中,所述第二签名和所述第一签名采用同样的计算规则生成;

    若所述第一签名和所述第二签名一致,则拒绝采用所述新版本可执行文件进行软件升级;

    若所述第一签名和所述第二签名不一致,则采用所述新版本可执行文件进行软件升级。

    2.根据权利要求1所述的软件增量升级方法,其特征在于,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    剔除所述新版本可执行文件中的非功能代码,得到所述新版本可执行文件的重构内容;

    计算所述重构内容对应的第一签名。

    3.根据权利要求1所述的软件增量升级方法,其特征在于,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    将所述新版本可执行文件中的非功能代码替换为默认代码,得到所述新版本可执行文件的重构内容;

    计算所述重构内容对应的第一签名。

    4.根据权利要求2或3所述的软件增量升级方法,其特征在于,所述非功能代码具体包括:调试目录、资源目录和安全目录。

    5.根据权利要求1所述的软件增量升级方法,其特征在于,所述计算所述新版本可执行文件的功能代码对应的第一签名,具体包括:

    将所述新版本可执行文件的nt文件头结构中的时间戳修改为第一默认时间戳;

    遍历所述新版本可执行文件的nt扩展可选结构中的数据目录中的调试节点的子结构,若存在nb10类型文件,则将所述nb10类型文件中的全局唯一标识符修改为默认标识符;若存在rsds类型文件,则将所述rsds类型文件中的四字节时间戳修改为第二默认时间戳;

    对所述新版本可执行文件中动态长度的程序数据库文件的源路径信息进行标记并转化为偏移地址,而后遍历所述新版本可执行文件的文件映像结构中的节表,若所述节表中包含被标记的地址,则剔除所述被标记的地址并对所述节表进行重组,并根据重组后的节表修改所述文件映像结构中的数据长度以及与所述节表的关联结构中指向实际数据的指针;

    遍历所述新版本可执行文件的资源目录的各层级以获取所述新版本可执行文件的版本信息,将所述新版本可执行文件的版本信息更改为默认版本信息;

    计算经过上述内容重构后的新版本可执行文件的第一签名。

    6.根据权利要求1所述的软件增量升级方法,其特征在于,所述第一签名和所述第二签名均具体为消息摘要算法签名。

    7.根据权利要求1所述的软件增量升级方法,其特征在于,还包括:

    遍历系统文件;

    当检测到软件升级文件时,检测所述软件升级文件的类型;

    若所述软件升级文件为可执行文件,则进入所述计算所述新版本可执行文件的功能代码对应的第一签名的步骤;

    若所述软件升级文件非所述可执行文件,则计算所述软件升级文件的第三签名;

    获取当前系统文件中非可执行文件的第四签名;

    若所述第三签名和所述第四签名一致,则拒绝采用所述软件升级文件进行软件升级;

    若所述第三签名和所述第四签名不一致,则采用所述软件升级文件进行软件升级。

    8.一种软件增量升级装置,其特征在于,包括:

    计算单元,用于当接收到新版本可执行文件时,计算所述新版本可执行文件的功能代码对应的第一签名;

    获取单元,用于获取当前版本可执行文件的功能代码对应的第二签名;其中,所述第二签名和所述第一签名采用同样的计算规则生成;

    升级单元,用于若所述第一签名和所述第二签名一致,则拒绝采用所述新版本可执行文件进行软件升级;若所述第一签名和所述第二签名不一致,则采用所述新版本可执行文件进行软件升级。

    9.一种软件增量升级设备,其特征在于,包括:

    存储器,用于存储指令,所述指令包括权利要求1至7任意一项所述软件增量升级方法的步骤;

    处理器,用于执行所述指令。

    10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述软件增量升级方法的步骤。

    技术总结
    本发明公开了一种软件增量升级方法,通过在接收到新版本可执行文件时,计算新版本可执行文件的功能代码对应的第一签名,并获取当前版本可执行文件的功能代码对应的与第一签名采用同样的计算规则生成的第二签名,比较第一签名和第二签名是否相同,如果相同则拒绝采用新版本可执行文件进行软件升级,如果不相同则采用新版本可执行文件进行软件升级。本发明提供的软件增量升级方法通过忽略文件版本号、签名时间戳等非功能部分的变化,只针对可执行文件的功能代码的变化进行升级,减少了非必要的软件升级,进而提高了下载效率和升级成功率。本发明还公开了一种软件增量升级装置、设备及计算机可读存储介质,具有上述有益效果。

    技术研发人员:高冉;蔡乐意;张煜;单立强;吴鹏;尘健
    受保护的技术使用者:浙江诺诺网络科技有限公司
    技术研发日:2020.12.07
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23248.html

    最新回复(0)