首页> 中国专利> 一种软件检测方法、软件检测装置及介质

一种软件检测方法、软件检测装置及介质

摘要

本申请提供一种软件检测方法,可用于计算机程序的安全检测,包括:获取校验结构体;在待检测软件程序运行前,使用校验结构体对待检测软件程序进行校验,得到第一校验结果;在待检测软件程序运行过程中,使用校验结构体对待检测软件程序进行校验,得到第二校验结果;当第一校验结果与第二校验结果不一致时,判定待检测软件程序异常或者被修改;本申请实施例还提供一种软件检测装置、计算机设备及介质,通过第一校验结果和第二校验结果的对比,能够及时发明计算机程序中被篡改的部分,从而防止计算机病毒或黑客通过设置软件断点对软件程序进行分析,提升了软件程序的安全性。

著录项

  • 公开/公告号CN112307468A

    专利类型发明专利

  • 公开/公告日2021-02-02

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN201910702140.6

  • 发明设计人 尹钻兴;

    申请日2019-07-31

  • 分类号G06F21/52(20130101);G06F21/56(20130101);

  • 代理机构44285 深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人吴磊

  • 地址 518057 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2023-06-19 09:44:49

说明书

技术领域

本发明涉及计算机技术领域,更具体地说,涉及一种软件检测方法、软件检测装置及介质。

背景技术

软件程序断点是指:由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即软件程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。

一些计算机病毒或者黑客常利用设置断点的方式,对软件程序的数据进行分析,进而达到其非法目的。

现有技术中通常采用反调试或检测调试器的方式来防止计算机病毒或者黑客利用断点入侵计算机程序,然而,此种方式容易被针对性进行对抗,从而失去保护效果。

因此,上述问题还有待于解决。

发明内容

有鉴于此,为解决上述问题,本发明提供的技术方案如下:

一种软件检测方法,包括:

获取校验结构体,所述校验结构体用于对待检测软件程序进行校验;

在所述待检测软件程序运行前,使用所述校验结构体对待检测软件程序进行校验,得到第一校验结果;

在所述待检测软件程序运行过程中,使用所述校验结构体对待检测软件程序进行校验,得到第二校验结果;

比对所述第一校验结果和所述第二校验结果;

当所述第一校验结果与所述第二校验结果不一致时,判定所述待检测软件程序异常或者被修改。

一种软件检测装置,包括:

获取单元,所述获取单元用于获取校验结构体,所述校验结构体用于对待检测软件程序进行校验;

第一校验单元,所述第一校验单元用于,在所述待检测软件程序运行前,使用所述获取单元获取的所述校验结构体对待检测软件程序进行校验,得到第一校验结果;

第二校验单元,所述第二校验单元用于,在所述待检测软件程序运行过程中,使用所述获取单元获取的所述校验结构体对待检测软件程序进行校验,得到第二校验结果;

比对单元,所述比对单元用于,比对所述第一校验单元得到的所述第一校验结果和所述第二校验单元得到的所述第二校验结果;

判定单元,所述判定单元用于,当所述比对单元判断所述第一校验结果与所述第二校验结果不一致时,判定所述待检测软件程序异常或者被修改。

可选地,所述校验结构体包括:校验函数地址、回调函数、被校验的内存起始地址以及所述被校验的内存大小,其中,所述被校验的内存用于存储所述待检测软件程序的软件代码,所述校验函数地址用于指示所述校验函数的存储地址,所述校验函数用于校验所述软件代码,所述回调函数用于验证所述校验函数的校验结果是否正确;

则所述第一校验单元还用于:

通过所述校验函数地址调用所述校验函数;

使用所述校验函数校验所述被校验的内存中所存储的所述软件代码;

通过所述回调函数判断所述校验函数的校验结果是否正确;

当所述回调函数判断所述校验函数的校验结果正确时,得到所述第一校验结果。

可选地,所述软件检测装置还包括加密单元,所述加密单元用于:

对所述校验结构体进行加密,得到第一加密数据;

所述软件检测装置还包括解密单元,所述解密单元用于:

对所述加密单元加密的数据所述第一加密数据进行解密,得到所述校验结构体;

所述第二校验单元还用于:

使用所述校验结构体对待检测软件程序进行校验,得到所述第二校验结果。

可选地,所述加密单元还用于:

从所述校验结构体存储地址起始遍历到结束,生成机器码字符串列;

使用AES128位加密将所述机器码字符列表转换成加密的全局字符列表;

所述解密单元用于:

分配第一内存空间和第二内存空间;

将所述全局字符列表分别存入所述第一内存空间和所述第二内存空间中;

在所述第一内存空间中,通过AES128位解密,得到第一校验函数;

在所述第二内存空间中,通过AES128位解密,得到第一校验结构体,所述第一校验结构体中包含第二校验函数;

将所述第一校验函数由所述第一内存空间传入所述第二内存空间中,以所述第一校验函数替换所述第二校验函数,得到第二校验结构体。

可选地,所述解密单元还用于:

在随机时间点随机分配内存空间作为所述第一内存空间和所述第二内存空间。

可选地,所述第二校验单元还用于:

获取待检测软件程序功能模块的区块列表;

从所述区块列表中获取需要校验的功能模块;

通过所述校验结构体校验所述需要校验的功能模块,得到所述第二校验结果。

可选地,所述软件检测装置还包括处理单元,所述处理单元用于:

向服务器上报结果,和/或,通过预设的汇编码使所述待检测程序强制崩溃。

一种计算机设备,所述计算机设备包括:交互装置、输入/输出(I/O)接口、处理器和存储器,所述存储器中存储有程序指令;

所述交互装置用于获取用户输入的操作指令;

所述处理器用于执行存储器中存储的程序指令,执行上述方法。

一种计算机可读存储介质,包括指令,当所述指令在计算机设备上运行时,使得所述计算机设备执行上述方法。

附图说明

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

图1A为本申请实施例提供的软件检测方法的流程图;

图1B为本申请实施例提供的软件检测方法的一个实施例的流程图;

图1C为本申请实施例提供的软件检测方法的另一个实施例的流程图;

图2A为本申请实施例提供的软件检测方法的具体实施方式的流程图;

图2B为本申请实施例提供的软件检测方法的具体实施方式中一个实施例的流程图;

图2C为本申请实施例提供的软件检测方法的具体实施方式中另一个实施例的流程图;

图2D为本申请实施例提供的软件检测方法的具体实施方式中另一个实施例的流程图;

图2E为本申请实施例提供的软件检测方法的具体实施方式中另一个实施例的流程图;

图2F为本申请实施例提供的软件检测方法的具体实施方式中另一个实施例的流程图;

图3为本申请实施例提供的计算机设备的结构示意图;

图4为本申请实施例提供的一种软件检测装置的结构示意图。

具体实施方式

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

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

计算机软件程序是运行在计算机(例如PC机、平板电脑或智能手机)中的软件程序,其中,软件程序中的软件程序断点是指:由于有特殊事件(例如中断事件)发生,计算机暂停当前的任务(即软件程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。

一些计算机病毒或者黑客常利用设置断点的方式,对软件程序进行分析,进而达到其非法目的。

通常采用反调试或检测调试器的方式来防止计算机病毒或者黑客利用断点入侵计算机程序,然而,此种方式容易被针对性进行对抗,从而失去保护效果。

因此,针对上述问题,本申请实施例提供了一种软件检测方法,为便于理解,以下结合附图,对本申请实施例所提供的控件遮挡检测方法进行详细说明。

请参阅图1A,如图1A所示,本申请实施例所提供的软件检测方法包括以下步骤:

101、获取校验结构体。

本实施例中,该校验结构体用于对待检测软件程序进行校验,具体地,该校验结构体包括:校验函数地址、回调函数、被校验的内存起始地址以及该被校验的内存大小,其中,该被校验的内存用于存储该待检测软件程序的软件代码,该校验函数地址用于指示该校验函数的存储地址,该校验函数用于校验该软件代码,该回调函数用于验证该校验函数的校验结果是否正确。通过该校验结构体,能够使得执行软件检测的计算机程序知晓,需要校验多大的内存,被检测内存的起始地址,在通过校验函数校验完成后,还可以进一步通过回调函数验证校验函数校验的准确性。

102、在待检测软件程序运行前,使用校验结构体对待检测软件程序进行校验,得到第一校验结果。

本实施例中,在待检测软件程序运行之前,使用校验结构体对待检测软件程序进行校验的目的有两个,一是在待检测软件程序运行前对待检测软件程序的初始状态进行校验,从而在待检测软件程序运行过程中,若被加入断点能够及时被检测出来;二是通过回调函数验证该校验函数的正确性,确保在待检测软件程序开始运行时,使用正确的校验函数对待检测软件程序进行校验。

可选地,如图1B所示,在待检测软件程序运行前,使用校验结构体对待检测软件程序进行校验,得到第一校验结果的工作流程具体可以包括以下步骤:

1021、通过所述校验函数地址调用校验函数。

本实施例中,校验函数存储在计算机的一段内存中,计算机通过校验函数地址找到校验函数存储在内存中的位置,从而调用该校验函数。

1022、使用校验函数校验被校验的内存中所存储的软件代码。

本实施例中,校验结构体中包括被校验的内存起始地址以及所述被校验的内存大小,从而计算机可以通过校验函数校验该段内存中所存储的代码,同时计算机可以根据校验结构体中所记载的被校验内存的大小判断,校验函数是否校验了内存中所存储的所有代码。

1023、通过回调函数判断校验函数的校验结果是否正确。

本实施例中,在校验函数完成对代码的校验后,通过回调函数来验证校验函数的校验结果是否正确,需要说明的是,本申请实施例中并不对校验函数和回调函数的具体实施方式做限定,本领域技术人员可根据需要选择校验函数和回调函数。

1024、当回调函数判断校验函数的校验结果正确时,得到第一校验结果。

本实施例中,当回调函数验证校验函数的校验结果正确时,说明校验函数为正确函数,且第一校验结果可靠,此处输出第一校验结果,供后续步骤使用。

进一步地,通过上述步骤1021至步骤1024,计算机即可判断校验结构体为符合要求可以供后续使用的校验结构体,为了进一步保证软件检测方法的安全性,需要对校验结构体进行加密得到第一加密数据,以防黑客或病毒对该校验结构体进行篡改,从而绕过本软件检测方法。可选地,该加密的方式可以包括以下步骤。

从校验结构体存储地址起始遍历到结束,生成机器码字符串列。

本实施例中,通过遍历校验结构体的存储地址,将校验结构体转化为机器码字符串列,从而便于后续步骤的处理。

使用AES128位加密将机器码字符列表转换成加密的全局字符列表。

本实施例中,通过AES128位加密将机器码字符列表转换成加密的全局字符列表,由于加密后的校验结构体不位于可执行代码区块中,所以通过函数列表无法找到它,由于它是分散的字符列表,所以字符串列表也无法找到它,而且经过AES加密,大小和内容都已改变,更无法让人联想这居然是一个校验函数,这也是防止被恶意分析的核心点。可选地,该AES128位加密还可以替换为其他加密方式,对此本申请实施例并不进行限定。

103、在待检测软件程序运行过程中,使用校验结构体对待检测软件程序进行校验,得到第二校验结果。

本实施例中,在软件程序运行的过程中,通过校验结构体对待检测软件程序进行校验,从而实现对待检测软件的实时监控。具体地,使用校验结构体对待检测软件程序进行校验的具体实施方式,如图1C所示,可以包含以下步骤。

1031、获取待检测软件程序功能模块的区块列表。

本实施例中,软件程序由多个功能模块构成,每个功能模块执行一个功能,从而多个功能模块协同组成整个软件程序,获取待检测软件程序功能模块后构建区块列表,从而得到每个功能模块的情况;具体地,可以是通过获得各个模块基地址的方式来获取待检测软件程序功能模块的区块列表。

1032、从区块列表中获取需要校验的功能模块。

本实施例中,由于软件断点影响的是可执行代码区块,所以需要过滤掉不必要的区块,从而提升校验效率,避免校验不受软件断点影响的模块,从而影响算力,进一步地,从区块列表中获取需要校验区块的具体实现方式可以为:对可执行、可读、代码属性、不可丢弃的区块,则认为是需要校验的区块。上述只是一种可选的实施方式,本领域技术人员能够通过现有技术中的手段获取到区块列表中受断点影响的模块,因此本申请实施例并不对从区块列表中获取需要校验的功能模块的具体实施方式进行限定。

进一步地,当获取到需要校验的功能模块之后,需要调用校验结构体来对功能模块进行校验,若上述步骤中执行了对校验结构体的加密,则本步骤中需要执行对第一加密数据的解密,从而得到校验结构体,可选地,该解密工作具体可以包含以下步骤。

分配第一内存空间和第二内存空间。

本实施例中,第一内存空间和第二内存空间均为计算机中的内存空间,该第一内存空间和该第二内存空间是通过动态分配的方式进行分配的,具体地,可以是在随机时间点随机分配内存空间作为第一内存空间和第二内存空间,通知这种方式,保证每次执行校验结构体的内存地址都是随机的,从而病毒或黑客无法准确获得校验结构体的所在内存的地址,增加了软件检测方法的隐蔽性。

将全局字符列表分别存入第一内存空间和第二内存空间中;

本实施例中,将前序步骤中加密后的全局字符列表分别存入第一内存空间和第二内存空间中,即第一内存空间和第二内存空间中分别存储有一份全局字符列表。

在第一内存空间中,通过AES128位解密,得到第一校验函数。

在第一内存空间中,通过AES128位解密,得到校验结构体中的校验函数,记为第一校验函数,在本次解密过程中,仅仅解密出校验函数,而不解密校验结构体的其他部分。

在第二内存空间中,通过AES128位解密,得到第一校验结构体。

本实施例中,通过AES128位解密,得到校验结构体,记为第一校验结构体,其中该第一校验结构体中包含:校验函数(记为第二校验函数)、回调函数、被校验的内存起始地址以及被校验的内存大小。

将第一校验函数由第一内存空间传入第二内存空间中,以第一校验函数替换所述第二校验函数,得到第二校验结构体。

本实施例中,在后续检测过程中通过第二校验结构体对软件程序进行校验。本方法在第一内存空间和第二内存空间中分别解密校验函数和校验结构体,之后叫第一内存空间中解密出的校验函数传入第二内存空间的校验结构体中,从而能够有效防止第二内存空间在解密校验结构体的过程中发生解析错误,确保校验函数被正确解密。

需要说明的是,对于上述第一内存空间和第二内存空间,实际上还可以分配为多个内存空间,由多个内存空间分别解密不同部分的校验结构体,最后在一个内存空间中将所有解密后的部分组合在一起形成校验结构体,因此对于分配的内存空间的数量,本申请实施例并不进行限定。

1033、通过校验结构体校验需要校验的功能模块,得到第二校验结果。

本实施例中,上述步骤1032已经筛选出需要校验的功能模块,因此,在本步骤中使用解密后的校验结构体直接对需要校验的功能模块进行校验,具体校验过程可以参见上述步骤1021至1024,唯一区别在于,上述步骤1021至1024有另外一个目的,在于判断校验函数是否正确,而步骤中,校验函数已经被步骤1021至1024判定为正确,仅仅执行对功能模块的校验,以得到第二校验结果。

104、比对第一校验结果和第二校验结果。

本实施例中,第一校验结果为软件程序运行之前校验得到的,第二校验结果为软件程序运行过程中校验得到的,通过二者的比对,即可判断软件程序代码是否异常或被修改,可选地,在软件运行的过程中,也可以不定时地重复进行上述步骤103,以得到多个不同时段的校验结果,之后将各个时段获得的校验结果进行比对,从而获知当前软件程序代码是否异常或被修改。

105、当第一校验结果与第二校验结果不一致时,判定待检测软件程序异常或者被修改。

本实施例中,第一校验结果为软件程序运行之前校验得到的,第二校验结果为软件程序运行过程中校验得到的,通过二者的比对,即可判断软件程序代码是否异常或被修改。

可选地,当步骤105判断软件程序异常或被修改后,还可以进一步执行以下步骤。

向服务器上报结果,和/或,通过预设的汇编码使待检测程序强制崩溃。

本实施例中,当判定软件程序代码异常或被修改后,说明可能遭遇病毒或黑客入侵,此时,需要上报服务器或用户,以使得服务器或用户第一时间了解到该情况,以采取进一步的措施,可选地,还可以通过预设的汇编码使待检测程序强制崩溃,从而保证软件程序的运行安全性,防止病毒或黑客进一步对软件程序进行分析。

上述工作过程中,通过校验结构体对软件程序进行检验,从而防止其被篡改,有效对抗黑客或病毒通过设置断点方式分析软件程序的情况出现,其中,为了防止校验结构体被篡改,对其进行了加密处理,并且在解密过程中,分别解密完整校验结构体和校验结构体中的校验函数,从而进一步保护了校验函数的隐秘性,提升了安全性能。为便于理解,对于上述步骤101至106所提供的软件检测方法,本申请实施例进一步结合附图说明其具体实施方式。

本申请实施例所提供的软件检测方法可分为准备阶段和校验阶段两个阶段,以下分别结合附图进行详细说明。

一、准备阶段。

请参阅图2A,如图2A所示,本申请实施例所提供的软件检测方法的准备阶段在具体实施时包含以下步骤。

201、获取校验结构体。

本实施例中,如图2B所示,获取校验结构体的步骤具体可以包括

2011、动态生成函数地址;

本实施例中,动态生成的意思即:每次将生成的校验函数随机存储在不同的存储地址中,从而使得计算机病毒或黑客无法获得校验函数的存储地址,从而提高了安全性。

2012、获取校验后的回调函数;

本实施例中,根据步骤2012中所获取的校验函数,获取对应的回调函数,用于对该校验函数的校验结果进行检测,具体的回调函数获取方式,可以是由用户对回调函数进行指定。

2013、获取待校验内存区段起始地址;

本实施例中,获取待校验内存区段起始地址,以使得后续操作中校验函数知晓需要校验的代码所在的内存起始地址。

2014、获取待校验内存区段大小;

本实施例中,获取待校验内存区段大小,以使得后续操作中校验函数知晓需要校验的代码所在内存的内存大小。

202、执行校验结构体。

本实施例中,执行校验体的目的有两个,一是通过校验确认校验函数正确,二是获取软件程序的初始状态,如图2C所示,执行校验结构体具体可以包含以下步骤:

2021、传入校验结构体;

本实施例中,需要将步骤201中获取的校验结构体传入执行内存中,以使得后续步骤中能够在执行内存中执行该校验结构体。

2022、执行校验函数;

本实施例中,通过执行校验函数,对待检测的软件程序代码进行校验。

2023、获得校验结果;

本实施例中,校验函数对待检测的软件程序代码进行校验后,得到校验结果。

2024、执行校验后回调函数;

本实施例中,在完成校验后,通过回调函数来检查校验函数的校验结果是否正确。

2025、返回校验结果。

本实施例中,当回调函数确认校验函数的校验结果正确,即返回校验结果,该校验结果记为第一校验结果。

203、获得机器码。

本实施例中,需要将上述步骤201中获取,步骤202确认正确的校验结构体转化成机器码,如图2D所示,具体可包括以下步骤:

2031、传入函数地址,记录长度len=0;

本实施例中,在初始阶段,传入函数地址,且记录机器码长度为0。

2032、得到当前地址的值;

本实施例中,传入校验结构体的函数地址后,得到当前地址的值。

2033、判断当前地址是否为函数结束地址。

本实施例中,若当前地址不是函数结束地址,则需要进行后续步骤2034,若当前地址为函数结束地址,则执行最终步骤2036.

2034,记录机器码到字符串列表;

本实施例中,将步骤2031中传入的函数地址作为机器码记录到字符串列表中;

2035、地址偏移一位,记录长度len+1位;

本实施例中,若当前函数地址不是结束地址,则说明还有剩余的地址需要进一步转化为机器码,因此,在将当前机器码记录到字符串列表后,记录长度加一,以记录下一位机器码,之后得到下一位的地址的值,重新执行步骤2032至2033,直到执行到函数结束地址,执行步骤2036。

2036、返回函数长度(len)

本实施例中,当执行到函数结束地址时,说明所有函数地址都已经全部转化为机器码并记录到字符串列表中,此时返回函数长度,即可获得完整机器码。

204、加密机器码。

本实施例中,需要对上述步骤203中获取到的机器码进行加密,如图2E所示,具体可以包括以下步骤:

2041、传入机器码;

本实施例中,将上述机器码传入执行内存,以执行后续操作。

2042、对机器码执行AES1238加密;

本实施例中,通过AES1238加密的方式,对上述机器码进行加密,可选地,上述加密方式还可以是其他加密,对此本申请实施例并不进行限定。

2043、返回加密字符列表;

本实施例中,经过AES1238加密的机器码被加密为字符列表的格式,从而完成对上述校验结构体的加密,加密后的校验结构体已字符列表的方式呈现,不易被破解,同时也不易想到,这样一组字符列表竟然就是加密后的校验结构体,从而提升了隐秘性。

经过上述准备阶段,获取到了加密后的校验结构体,从而可以开始后续的校验阶段。

二、校验阶段。

205、获得模块基址。

本实施例中,在完成上述步骤201至204的准备方式后,开始执行软件检测的步骤,首先需要获取模块基址,该模块基址是软件程序功能模块的基址。

206、遍历模块的区块列表。

本实施例中,软件程序的功能模块通过区块列表的方式展示,因此需要对该区块列表进行遍历,以查找需要校验的模块。

207、判断是否需要校验。

本实施例中,对于遍历的模块,需要判断是否需要校验,具体实施方式可以参考上述步骤1032,此处不再赘述,对于需要校验的模块,执行下述步骤208,对于不需要校验的模块,则重新执行上述步骤206,即遍历到下一个模块继续判断是否需要校验。

208、校验软件程序。

本实施例中,开始对软件程序进行校验,如图2F所示,具体校验可以包含以下过程:

2081、动态分配内存;

本实施例中,动态分配内存的具体实施方案是为:在随机时间随机分配内存空间,其中,至少分配第一内存空间和第二内存空间两个内存空间。

2082、设置内存空间为可读可写可执行;

本实施例中,对于上述步骤2081分配的内存,需要将其设置为可读可写可执行的内存,从而才能够执行后续操作。

2083、AES128解密数据存储动态内存。

本实施例中,将步骤204中所得到的加密机器码存储在步骤2081所分配的内存中,其中,对于校验结构体,在第一内存空间和第二内存空间中分别存储一份。

2084、解密校验结构体;

本实施例中,在第一内存空间中将加密机器码通过AES128解密出其中的校验函数,记为第一校验函数,在第二内存空间中将加密机器码通过AES128解密出校验结构体,记为第一校验结构体,其中,该第一校验结构体中包括一个第二校验函数。

2085、校验函数传入校验结构体中;

本实施例中,将第一内存空间中解密出的校验函数传入到第二内存空间中,使第一校验函数替换第二校验函数,得到新的第二校验结构体,本实施例中,通过在两个内存空间中分别解密校验函数和校验结构体,之后将校验函数传入校验结构体中,防止校验结构体在解密的过程中发生错误,确保校验函数正确解密,从而提升了安全性。

2086、执行校验结构体。

本实施例中,对于解密所得到的校验结构体(即上述第二校验结构体),对待检测的软件程序代码执行校验。

2087、校验结束后,释放内存;

本实施例中,在完成校验后,释放内存,从而使得计算机病毒或黑客无法获知,校验工作具体是在哪段内存中执行,从而提升了安全性。

209、获得校验结果。

本实施例中,对当前软件的功能模块完成校验后,获得对当前模块的校验结果。

210、判断是否存在初始可比对校验结果。

本实施例中,若不存在初始可比对校验结果,说明当前校验记为初始校验,此时执行步骤211:记录初始校验结果;若存在初始可比对校验结果,则执行步骤212:和初始校验结果比对。

211、记录初始校验结果。

本实施例中,初始校验结果为软件程序刚开始运行时的校验结果,此时由于软件程序刚开始运行,尚未被计算机病毒或黑客入侵,因此,初始化校验结果为一个基准结果。

212、和初始校验结果比对。

本实施例中,对于后续软件程序运行过程中所得到的校验结果,需要和初始校验结果相比对。

213、判断比对结果是否不同。

本实施例中,若当前校验结果和初始校验结果相同,说明当前软件程序的功能模块运行正常,没有被计算机病毒或黑客入侵,此时回到步骤206,继续遍历下一模块,从而对下一个需要校验的模块进行校验。

214、执行上报或崩溃操作。

本是实施例中,若当前校验结果和初始校验结果不相同,说明当前软件程序的功能模块可能计算机病毒或黑客的入侵,因此需要进行上报,或者对软件程序进行崩溃处理,以防止计算机病毒或黑客对软件程序进行分析,从而保证软件程序运行的安全性。

215、退出。

本实施例中,有两种方式可以退出当前软件测试检测方法,一是经过上述步骤214上报当前校验结果和初始校验结果不相同或崩溃软件程序;二是经过上述步骤206遍历完待检测软件程序的所有模块后,没有发现问题,则退出当前软件测试检测方法。

综上所述,本申请实施例中,提供了一种软件检测方法,可用于计算机程序的安全检测,包括:获取校验结构体;在待检测软件程序运行前,使用校验结构体对待检测软件程序进行校验,得到第一校验结果;在待检测软件程序运行过程中,使用校验结构体对待检测软件程序进行校验,得到第二校验结果;当第一校验结果与第二校验结果不一致时,判定待检测软件程序异常或者被修改;通过第一校验结果和第二校验结果的对比,能够及时发明计算机程序中被篡改的部分,从而防止计算机病毒或黑客通过设置软件断点对软件程序进行分析,提升了软件程序的安全性。

需要说明的是,上述软件检测方法中所涉及的加密方式,除了采用AES128位加密的加密方式加密外,还可以采用哈希值计算校验的方式进行加密,例如:在程序初始化时动态创建可执行内存区段,执行动态代码段对指定的内存区段进行扫描,并在动态代码段里对指定的内存区段进行哈希值计算校验,然后执行预定的回调函数,在扫描完成后不定时触发检测机制。其中,动态创建的可执行内存里的函数可以按需配置不同的哈希校验函数与检测机制。

本申请实施例所提供的软件检测方法可应用于任意客户端产品中,使用过程不需要用户交互,在应用时候仅需要将代码静态或动态链接到需要的产品里,并在原产品逻辑进行简单的代码插入与逻辑修改即可使用,可达到软件自保,防止被恶意分析的效果。

上述对本申请实施例提供的方案进行了介绍。可以理解的是,计算机设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

从硬件结构上来描述,上述方法可以由一个实体设备实现,也可以由多个实体设备共同实现,还可以是一个实体设备内的一个逻辑功能模块,本申请实施例对此不作具体限定。

例如,上述方法均可以通过图3中的计算机设备来实现。图3为本申请实施例提供的计算机设备的硬件结构示意图。该计算机设备包括至少一个处理器301,通信线路302,存储器303以及至少一个通信接口304。

处理器301可以是一个通用中央处理器(central processing unit,CPU),微处理器,特定应用集成电路(application-specific integrated circuit,服务器IC),或一个或多个用于控制本申请方案程序执行的集成电路。

通信线路302可包括一通路,在上述组件之间传送信息。

通信接口304,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。

存储器303可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyer服务器able programmable read-only memory,EEPROM)、只读光盘(compact discread-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过通信线路302与处理器相连接。存储器也可以和处理器集成在一起。

其中,存储器303用于存储执行本申请方案的计算机执行指令,并由处理器301来控制执行。处理器301用于执行存储器303中存储的计算机执行指令,从而实现本申请上述实施例提供的方法。

可选的,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。

在具体实现中,作为一种实施例,处理器301可以包括一个或多个CPU,例如图3中的CPU0和CPU1。

在具体实现中,作为一种实施例,计算机设备可以包括多个处理器,例如图3中的处理器301和处理器307。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

在具体实现中,作为一种实施例,计算机设备还可以包括输出设备305和输入设备306。输出设备305和处理器301通信,可以以多种方式来显示信息。例如,输出设备305可以是液晶显示器(liquid crystal display,LCD),发光二级管(light emitting diode,LED)显示设备,阴极射线管(cathode ray tube,CRT)显示设备,或投影仪(projector)等。输入设备306和处理器301通信,可以以多种方式接收用户的输入。例如,输入设备306可以是鼠标、键盘、触摸屏设备或传感设备等。

上述的计算机设备可以是一个通用设备或者是一个专用设备。在具体实现中,计算机设备可以是台式机、便携式电脑、网络服务器、掌上电脑(personal digitalassistant,PDA)、移动手机、平板电脑、无线终端设备、嵌入式设备或有图3中类似结构的设备。本申请实施例不限定计算机设备的类型。

本申请实施例可以根据上述方法示例对存储设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

比如,以采用集成的方式划分各个功能单元的情况下,图4示出了一种软件检测装置的示意图。

如图4所示,本申请实施例提供的软件检测装置,包括:

获取单元401,所述获取单元401用于获取校验结构体,所述校验结构体用于对待检测软件程序进行校验;

第一校验单元402,所述第一校验单元402用于,在所述待检测软件程序运行前,使用所述获取单元401获取的所述校验结构体对待检测软件程序进行校验,得到第一校验结果;

第二校验单元403,所述第二校验单元403用于,在所述待检测软件程序运行过程中,使用所述获取单元401获取的所述校验结构体对待检测软件程序进行校验,得到第二校验结果;

比对单元404,所述比对单元404用于,比对所述第一校验单元402得到的所述第一校验结果和所述第二校验单元403得到的所述第二校验结果;

判定单元405,所述判定单元405用于,当所述比对单元404判断所述第一校验结果与所述第二校验结果不一致时,判定所述待检测软件程序异常或者被修改。

可选地,所述校验结构体包括:校验函数地址、回调函数、被校验的内存起始地址以及所述被校验的内存大小,其中,所述被校验的内存用于存储所述待检测软件程序的软件代码,所述校验函数地址用于指示所述校验函数的存储地址,所述校验函数用于校验所述软件代码,所述回调函数用于验证所述校验函数的校验结果是否正确;

则所述第一校验单元402还用于:

通过所述校验函数地址调用所述校验函数;

使用所述校验函数校验所述被校验的内存中所存储的所述软件代码;

通过所述回调函数判断所述校验函数的校验结果是否正确;

当所述回调函数判断所述校验函数的校验结果正确时,得到所述第一校验结果。

可选地,所述软件检测装置还包括加密单元406,所述加密单元406用于:

对所述校验结构体进行加密,得到第一加密数据;

所述软件检测装置还包括解密单元407,所述解密单元407用于:

对所述加密单元406加密的数据所述第一加密数据进行解密,得到所述校验结构体;

所述第二校验单元403还用于:

使用所述校验结构体对待检测软件程序进行校验,得到所述第二校验结果。

可选地,所述加密单元406还用于:

从所述校验结构体存储地址起始遍历到结束,生成机器码字符串列;

使用AES128位加密将所述机器码字符列表转换成加密的全局字符列表;

所述解密单元407用于:

分配第一内存空间和第二内存空间;

将所述全局字符列表分别存入所述第一内存空间和所述第二内存空间中;

在所述第一内存空间中,通过AES128位解密,得到第一校验函数;

在所述第二内存空间中,通过AES128位解密,得到第一校验结构体,所述第一校验结构体中包含第二校验函数;

将所述第一校验函数由所述第一内存空间传入所述第二内存空间中,以所述第一校验函数替换所述第二校验函数,得到第二校验结构体。

可选地,所述解密单元407还用于:

在随机时间点随机分配内存空间作为所述第一内存空间和所述第二内存空间。

可选地,所述第二校验单元403还用于:

获取待检测软件程序功能模块的区块列表;

从所述区块列表中获取需要校验的功能模块;

通过所述校验结构体校验所述需要校验的功能模块,得到所述第二校验结果。

可选地,所述软件检测装置还包括处理单元408,所述处理单元408用于:

向服务器上报结果,和/或,通过预设的汇编码使所述待检测程序强制崩溃。

进一步的,本发明实施例还提供一种计算机存储介质,包括指令,当该指令在计算机设备上运行时,使得该计算机设备执行上述方法。

有关本申请实施例提供的计算机存储介质中存储的程序的详细描述可参照上述实施例,在此不做赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的核心思想或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号