一种客户端安全检测方法、装置及客户端设备与流程

文档序号:16006865发布日期:2018-11-20 20:10阅读:170来源:国知局
本发明涉及客户端
技术领域
:,特别涉及一种客户端安全检测方法、装置及客户端设备。
背景技术
::目前,对于一个客户端程序来说,其是由一个个功能组件组合完成的,通常的客户端开发者会按照功能进行模块划分,从而可以使得多人协同完成,对功能的划分也会更为清晰。例如,对于Windows软件开发,会拆分成多个模块来完成,一个模块则是一个动态链接库文件((DynamicLinkLibrary,DLL)文件,这样既有利于代码共享和分工,又可以将功能尽可能的拆分,减少代码耦合度。因此一个软件的组成则由一个可执行程序(executableprogram,EXE)文件和多个DLL文件组成。例如将软件中使用的所有的加密解密算法功能封装到一个独立的DLL文件中,例如将所有网络相关的功能封装到一个独立的DLL文件中,例如将日志功能封装到一个独立的DLL文件中。具体的,客户端程序将数据库的操作独立的编写成一个模块文件,将网络操作独立的编写成一个模块文件,将数据加密解密相关功能独立的编写成一个模块文件,然而现有黑客通过修改客户端模块来完成一些非法的功能。例如黑客可以通过修改客户端的模块来从模块中获取想要的数据。例如对于客户端程序来说,比如客户端将用户的聊天记录进行加密后发送给服务器,那么客户端程序会将用户的聊天记录调用加密模块来进行加密后发送给服务器,那么此电脑一旦感染病毒,那么病毒程序则可以通过修改客户端加密模块程序,从而得到所有的明文的聊天记录。上述软件开发方式虽然有利于代码共享和分工,减少代码耦合度,但同时也会带来一个问题,软件模块容易被黑客所破解,从而可能对软件开发商和用户造成难以估量的损失。技术实现要素:本发明实施例提供了一种客户端安全检测方法、装置及客户端设备,以避免目前客户端模块容易被黑客破解,造成难以估量的损失的问题,提高客户端安全性。第一方面,本申请提供了一种客户端安全检测方法,该方法包括:当客户端启动后,从本地获取当前目标版本的所述客户端的第一模块校验信息;从预置的客户端版本区块链中,获取所述目标版本的所述客户端的第二模块校验信息,所述第一模块校验信息和所述第二模块校验信息对应相同的客户端模块;对所述第一模块校验信息及所述第二模块校验信息进行信息比对;若所述第一模块校验信息及所述第二模块校验信息匹配,则确定所述客户端合法。进一步的,所述从本地获取目标版本的所述客户端的第一模块校验信息,包括:从本地获取目标版本的所述客户端的模块校验信息列表,所述模块校验信息列表中包括所述目标版本的所述客户端所有模块的校验信息;其中,所述第一模块校验信息包括所述模块校验信息列表中至少一个所述客户端模块的校验信息。进一步的,所述方法还包括:在安装所述客户端后,从服务器获取所述客户端版本区块链,所述客户端版本区块链中包括所述客户端当前版本的模块校验信息列表及每一个历史版本的模块校验信息列表;在所述客户端每次进行版本更新时,生成新的模块校验信息列表;根据所述新的模块校验信息列表,更新所述客户端版本区块链。进一步的,所述在所述客户端每次进行版本更新时,生成新的模块校验信息列表,包括:在所述客户端每次进行版本更新时,获取当前更新的所述客户端各模块文件大小;获取当前更新的所述客户端模块版本号;根据所述客户端各模块文件大小,确定当前更新的所述客户端中各模块的校验信息;根据所述客户端中各模块的校验信息及所述当前更新的所述客户端模块版本号,生成新的模块校验信息列表。进一步的,所述根据所述客户端各模块文件大小,确定当前更新的所述客户端中各模块的校验信息,包括:分别以所述客户端中各模块为目标模块;若所述目标模块文件大小小于预设阈值,则以所述目标模块的整体哈希值作为所述目标模块的校验信息;若所述目标模块文件大小大于等于预设阈值,则以所述目标模块的第一预设长度文件头的哈希值,第二预设长度的文件尾部的哈希值作为所述目标模块的校验信息。进一步的,所述对所述第一模块校验信息及所述第二模块校验信息进行信息比对,包括:若所述第一模块校验信息中包括多个所述客户端的模块校验信息时,则分别对所述第一校验模块中的模块校验信息,与所述第二模块校验信息中对应的模块校验信息进行比对;若所述第一校验模块中的所有模块校验信息均与所述第二模块校验信息中对应的模块校验信息匹配,则确定所述第一模块校验信息及所述第二模块校验信息匹配。第二方面,本申请提供一种客户端安全检测装置,该装置包括:第一获取模块,用于当客户端启动后,从本地获取当前目标版本的所述客户端的第一模块校验信息;第二获取模块,用于从预置的客户端版本区块链中,获取所述目标版本的所述客户端的第二模块校验信息,所述第一模块校验信息和所述第二模块校验信息对应相同的客户端模块;比对模块,用于对所述第一模块校验信息及所述第二模块校验信息进行信息比对;确定模块,用于在所述第一模块校验信息及所述第二模块校验信息匹配时,确定所述客户端合法。进一步的,所述第一获取模块具体用于:从本地获取目标版本的所述客户端的模块校验信息列表,所述模块校验信息列表中包括所述目标版本的所述客户端所有模块的校验信息;其中,所述第一模块校验信息包括所述模块校验信息列表中至少一个所述客户端模块的校验信息。进一步的,所述装置还包括更新模块,所述更新模块用于:在安装所述客户端后,从服务器获取所述客户端版本区块链,所述客户端版本区块链中包括所述客户端当前版本的模块校验信息列表及每一个历史版本的模块校验信息列表;在所述客户端每次进行版本更新时,生成新的模块校验信息列表;根据所述新的模块校验信息列表,更新所述客户端版本区块链。进一步的,所述更新模块具体用于:分别以所述客户端中各模块为目标模块;若所述目标模块文件大小小于预设阈值,则以所述目标模块的整体哈希值作为所述目标模块的校验信息;若所述目标模块文件大小大于等于预设阈值,则以所述目标模块的第一预设长度文件头的哈希值,第二预设长度的文件尾部的哈希值作为所述目标模块的校验信息。进一步的,所述比对模块具体用于:若所述第一模块校验信息中包括多个所述客户端的模块校验信息时,则分别对所述第一校验模块中的模块校验信息,与所述第二模块校验信息中对应的模块校验信息进行比对;若所述第一校验模块中的所有模块校验信息均与所述第二模块校验信息中对应的模块校验信息匹配,则确定所述第一模块校验信息及所述第二模块校验信息匹配。第三方面,本发明还提供一种电子设备,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现第一方面中任一所述的方法。第四方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的方法。本发明实施例当客户端启动后,从本地获取当前目标版本的客户端的第一模块校验信息;从预置的客户端版本区块链中,获取目标版本的客户端的第二模块校验信息;对第一模块校验信息及第二模块校验信息进行信息比对;若第一模块校验信息及所述第二模块校验信息匹配,则确定客户端合法。本发明实施例中利用区块链技术保存客户端的版本信息,由于区块链数据不易篡改的特性,可以有效的对客户端合法性进行校验,提升客户端的安全性,避免用户和开发商的损失。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例中客户端安全检测方法的一个实施例示意图;图2是本发明实施例中客户端安全检测方法的另一个实施例示意图;图3是本发明实施例步骤S202的一个实施例示意图;图4是本发明实施例中步骤S2023的一个实施例示意图;图5是本发明实施例中客户端安全检测装置的一个实施例示意图;图6是本发明实施例中客户端安全检测装置的另一个实施例示意图;图7是本发明实施例中电子设备的一个实施例示意图。本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。本发明实施例中一种客户端安全检测方法应用于客户端安全检测装置,该装置位于电子设备中,该电子设备可以是手机、平板电脑或者个人电脑等电子设备,也可以是未来出现的电子设备等。请参阅图1,本发明实施例中一种客户端安全检测方法一个实施例包括:S101、当客户端启动后,从本地获取当前目标版本的客户端的第一模块校验信息;具体的,本实施例中客户端安装在电子设备中,该客户端对应一个客户端版本,即目标版本,例如V2.1,在电子设备本地保存有该目标版本的客户端的所有模块,同时还保存有第一模块校验信息,该第一模块校验信息可以是客户端一个模块的校验信息,也可以是多个模块的校验信息。S102、从预置的客户端版本区块链中,获取目标版本的客户端的第二模块校验信息;具体的,所述第一模块校验信息和所述第二模块校验信息对应相同的客户端模块,例如,当前客户端版本为V2.1,第一模块校验信息为客户端中A模块的校验信息,第二模块校验信息为客户端版本区块链中V2.1版本客户端区块中对应的A模块的校验信息,同理当第一模块校验信息中包括多个模块的校验信息时,例如A模块和B模块,第二模块校验信息中亦包括对应的A模块和B模块的校验信息。本实施例中,客户端版本区块链中包括客户端当前版本及各历史版本的客户端的区块信息,每个客户端版本信息对应客户端版本区块链中一个区块,在客户端启动时,从服务器获取所述客户端版本区块链,或者本地维护有一个客户端版本区块链,若有更新,直接从服务器进行更新,后续直接在本地使用即可。S103、对第一模块校验信息及第二模块校验信息进行信息比对;本实施例中,若第一模块校验信息中包括多个客户端的模块校验信息时,则分别对所述第一校验模块中的模块校验信息,与所述第二模块校验信息中对应的模块校验信息进行比对;例如上述步骤S102中举例的A模块及B模块,此时分别对第一校验模块中的A模块校验信息及第二模块校验信息中对应的A模块校验信息进行比对,对第一校验模块中的B模块校验信息及第二模块校验信息中对应的B模块校验信息进行比对。当第一模块校验信息中只有一个客户端模块的校验信息时,则只需一个模块校验信息的比较即可。S104、若第一模块校验信息及第二模块校验信息匹配,则确定客户端合法。具体的,若第一模块校验信息只有一个客户端模块校验信息时,则第一模块校验信息及第二模块校验信息匹配,则直接确定客户端合法。若第一模块校验信息中包括多个客户端的模块校验信息时,只有第一校验模块中的所有模块校验信息均与第二模块校验信息中对应的模块校验信息匹配,才确定第一模块校验信息及所述第二模块校验信息匹配。本发明实施例当客户端启动后,从本地获取当前目标版本的客户端的第一模块校验信息;从预置的客户端版本区块链中,获取目标版本的客户端的第二模块校验信息;对第一模块校验信息及第二模块校验信息进行信息比对;若第一模块校验信息及所述第二模块校验信息匹配,则确定客户端合法。本发明实施例中利用区块链技术保存客户端的版本信息,由于区块链数据不易篡改的特性,可以有效的对客户端合法性进行校验,提升客户端的安全性,避免用户和开发商的损失。为了更快速和更准确的校验客户端模块,本实施例中,在客户端安装目录文件中单独配置了一个模块校验信息列表,对于官方发布的每一个客户端,其具体的模块个数,每个模块的的名称,每个模块的版本号,每个模块的文件大小,每个模块的模块内容都是固定不变的,那么在校验模块列表信息中则会包含所有的模块,同时对于每一个模块则包含其模块的名称、模块的版本号、模块的文件大小、模块的哈希值(可以包括一个或多个哈希算法的哈希值),在电子设备上安装客户端后,即在本地生成了客户端的各模块,及该模块校验信息列表。具体的,该第一模块校验信息可以是该模块校验信息列表中的至少一个所述客户端模块的校验信息,所述从本地获取目标版本的所述客户端的第一模块校验信息,包括:从本地获取目标版本的所述客户端的模块校验信息列表,所述模块校验信息列表中包括所述目标版本的所述客户端所有模块的校验信息。本实施例中,所有设定范围内的客户端(例如同一平台的客户端,如斗鱼客户端)都是区块链的一个客户端,从而具有区块链的所有功能特性,包括生成新的区块,包括存储所有的区块,具有分布式账本的功能,包括对新的区块进行校验,包括从分布式账本中取出发布的模块信息,包括校验发布者的身份是否是官方发布等。同时,每个客户端还具有对当前客户端的所有模块进行信息获取和校验的功能,从而防止感染了病毒的客户端程序运行,防止信息被盗取或篡改。本发明实施例中,初始区块由服务器生成,在官方发布每一次客户端的版本时,都会生成一个对应版本的区块,并发布到所述客户端版本区块链中,每一个客户端版本在客户端版本区块链对应一个区块,该区块中包括客户端版本的预置数据,本实施例中,是通过在区块中设置每个客户端版本的模块校验信息列表,该模块校验信息列表中会包括每个版本中每个模块文件名称,每个模块的文件大小及每个模块的哈希值。下面举例说明模块校验信息列表配置模块校验信息的具体方式:ModuleCheckList:{Module1:FileSize:0xa2465dVersion:1.2.0MD5HASH:0x2567ade9e236a145CRC32HASH:0xa25ac3d6SHA1HASH:0xa25ecae63aebca256c9536edab2d5214HEADMD5HASH:0xaab25639741defa5TAILMD5HASH:0x35a5d2e3a6b2a123}其中,ModuleCheckList为模块校验信息列表,Module1则是模块1的文件名称,表示下面描述的是模块1的校验信息,FileSize则是模块的文件大小字节数,Version则是模块1的版本号,MD5HASH则是此模块1整个文件的MD5的HASH算法计算得到的哈希值结果,CRC32HASH则是此模块1整个文件的CRC32的HASH算法计算得到的哈希值结果,SHA1HASH则是此模块整个文件的SHA1的HASH算法计算得到的哈希值结果,HEADMD5HASH则是此模块文件的文件头1M字节大小的内容的MD5的哈希值结果,TAILMD5HASH则是此模块文件的文件尾1M字节大小的内容的MD5的哈希值结果。上述方式中,仅表述了模块校验信息列表中模块1的校验信息配置,同样的,若模块校验信息列表中还包括其他模块,则对于其他模块Module2、Module3也采取同样的配置信息的方式进行配置,使得最终在模块校验信息列表中则会包含客户端所有模块的校验信息。通常的一个区块链必须包含一些必要的数据,从而一个是可以校验区块链本身的合法性,另一个也使得其不易于伪造。本发明实施例中的客户端版本区块链数据结构则依赖于本文是每个客户端版本的模块校验信息列表。所以在客户端版本区块链的区块数据结构中包含了模块校验信息列表的信息,所述数据结构包括区块的块号、前一个区块的哈希值、当前时间、计算新区块哈希值中前面0的个数,随机数据、当前区块的哈希值以及区块功能数据;所述区块功能数据包括当前客户端版本模块校验列表的信息,例如上述ModuleCheckList,具体实现如下:StructBlockData{Int64index;StringpreviousHash;Int64timestamp;Stringdata;Stringzero;Stringranddata;Stringhash;}其中,index用来表示区块的块号,通常从0开始递增;previousHash表示前一个区块的hash值(哈希值);timestamp表示当前时间戳;zero表示计算新区块的hash值中前面0的个数据;randdata则标示随机数据,用于加入到新的区块中,以使得其计算的hash值满足服务器下发的0的个数;hash则表示当前这个区块的内容的hash值;data则表示一些数据的拼接(即上述区块功能数据),这个data字段的内容则是依据区块所需要完成的功能所设计,针对于本发明实施例中,区块功能数据可以包括模块校验信息列表ModuleCheckList的完整信息等,有了这个区块链数据结构的设计后,当收到其他客户端设备新产生的区块后或自身启动客户端时,则可以通过对里面的数据进行校验。如图2所示,在本发明一些实施例中,在每次更新客户端版本时,都会对客户端本地的客户端版本区块链进行更新,具体的,即所述方法还包括:S201、在安装所述客户端后,从服务器获取所述客户端版本区块链;其中,所述客户端版本区块链中包括所述客户端当前版本的模块校验信息列表及每一个历史版本的模块校验信息列表。S202、在客户端每次进行版本更新时,生成新的模块校验信息列表;S203、根据新的模块校验信息列表,更新客户端版本区块链。本实施例在安装所述客户端后,通过从服务器获取所述客户端版本区块链,在客户端每次进行版本更新时,生成新的模块校验信息列表,根据新的模块校验信息列表,更新客户端版本区块链,保证了客户端版本区块链的及时更新,可以有效确保前述实施例中对客户端合法性校验过程,提升客户端的安全性。进一步的,如图3所示,所述步骤S202具体包括:S2021、在所述客户端每次进行版本更新时,获取当前更新的所述客户端各模块文件大小;本实施例中,获取当前更新的所述客户端各模块文件大小的方式具体如下:(1)首先调用系统函数CreateFile来打开模块文件。HANDLECreateFile(LPCTSTR,lpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagAndAttributes,HANDLEhTemplateFile;其中关键的参数则是lpFileName需要打开的模块文件名称,dwDesiredAccess则传入读取模块文件GENERIC_READ,从而得到模块文件的句柄:hFile=CreateFile("module1",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);(2)然后调用系统函数GetFileSize来获取文件的大小,具体如下:intfilesize=GetFileSize(hFile,NULL);其中,系统函数GetFileSize的第一个参数则是传入文件句柄,第二个参数传入空,返回值则是文件的大小,从而得到此模块文件的大小filesize。S2022、获取当前更新的所述客户端模块版本号;由于模块文件版本号是官方发布时写入到模块文字中的,所以每个模块文件的版本号是可以直接获取的。S2023、根据所述客户端各模块文件大小,确定当前更新的所述客户端中各模块的校验信息;S2024、根据所述客户端中各模块的校验信息及所述当前更新的所述客户端模块版本号,生成新的模块校验信息列表。本实施例在客户端每次进行版本更新时,通过获取当前更新的客户端各模块文件大小,获取当前更新的客户端模块版本号,根据客户端各模块文件大小,确定当前更新的客户端中各模块的校验信息,根据客户端中各模块的校验信息及所述当前更新的客户端模块版本号,生成新的模块校验信息列表。本实施例在每次客户端版本更新时,通过获取当前更新的客户端各模块文件大小,获取当前更新的客户端模块版本号等内容生成新的模块校验信息列表,保证了每次客户端版本更新时,模块校验信息列表也对应更新,确保了模块校验信息的及时更新,提升了客户端版本及模块校验信息的同步性。进一步的,如图4所示,所述步骤S2023具体包括:S20231、分别以所述客户端中各模块为目标模块;S20232、若所述目标模块文件大小小于预设阈值,则以所述目标模块的整体哈希值作为所述目标模块的校验信息;需要说明的是,本实施例中,对目标模块的整体哈希值的计算方式可以采用多种哈希函数计算多个哈希值,例如MD5、SHA1、CRC32等哈希函数,此时以目标模块的整体哈希值作为所述目标模块的校验信息,可以以这多个计算的整体哈希值中至少一个作为目标模块的校验信息。S20233、若所述目标模块文件大小大于等于预设阈值,则以所述目标模块的第一预设长度文件头的哈希值,第二预设长度的文件尾部的哈希值作为所述目标模块的校验信息。本实施例中,计算模块文件头部哈希值和尾部哈希值采用的方式可以是预设的同一种哈希函数计算,例如上述MD5、SHA1、CRC32等哈希函数中的一种哈希函数。本实施例中分别以客户端中各模块为目标模块,若目标模块文件大小小于预设阈值,则以目标模块的整体哈希值作为目标模块的校验信息,若目标模块文件大小大于等于预设阈值,则以目标模块的第一预设长度文件头的哈希值,第二预设长度的文件尾部的哈希值作为目标模块的校验信息。本实施例中根据客户端模块中各模块的文件大小,提供了不同的模块校验信息计算方法,这样对于文件大小较小的模块,对全部文件计算校验信息,提升文件安全校验的精度,对于文件大小较大的模块,采用头部和尾部计算校验信息,可以确保文件安全校验的同时,减小计算量,提升计算效率。可以理解的是,上述步骤S20232和S20233中采取的方式仅为本发明实施例中一种实现方式,本实施例中还可以采取其他方式或者多种方式结合的方式,例如本文中后续举例描述的方式,本发明的一个具体实施方式是:对于每个模块文件则需要判断模块文件大小,如果模块文件小于1M则只需要计算整个模块文件的HASH值,如果文件大小大于1M则需要对模块文件计算文件头的HASH值,文件尾部的HASH值,以及整个文件的文件内容的HASH值,并且对于文件的HASH计算还需要计算多个HASH算法的HASH值。具体实现如下:(1)首先则需要打开需要校验的模块文件得到文件的句柄,从而得到文件的句柄hFile:hFile=CreateFile("module1",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);(2)读取文件头的前1M的文件大小,读取文件的系统函数则是ReadFile,具体函数描述如下:ReadFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPDWORDlpNumberOfBytesRead,LPOVERLAPPEDlpOverlapped);其中,hFile是文件句柄,lpBuffer是读写数据缓冲区,nNumberOfBytesToWrite是多少数据要写入,lpNumberOfBytesWritten是已经写入多少数据,nNumberOfBytesToRead是多少数据要读取,nNumberOfBytesToRead是已经读取多少数据,lpOverlapped是异步读写的结构。具体则读取1M大小的文件内容。ReadFile(hFile,buff,1M,&dwRead,NULL);其中,hFile则是之前打开的文件句柄,buff则用于存储读取的文件内容,1M则表示读取的文件内容大小,dwRead表示实际读取的文件内容大小,调用完成此函数后,则会将文件内容读取到buff缓存中。(3)接下来则调用HASH函数来对文件内容计算HASH结果。HEADMD5HASH=Md5.Create(buff,1M);具体则通过调用Md5的函数来对读取的文件内容计算Md5的HASH结果。(4)然后将文件指针移动到文件尾部,具体则通过调用系统函数SetFilePointer。DWORDSetFilePointer(HANDLEhFile,LONGlDistanceToMove,PLONGlpDistanceToMoveHigh,DWORDdwMoveMethod通过此函数则可以将读取文件的偏移移动到文件尾部,从而读取文件尾部的1M的文件大小。SetFilePointer(hFile,file_size-1M,NULL,FILE_BEGIN);此处标示从文件总大小中减去1M的文件尾部,然后移动到尾部只剩1M文件大小的位置。然后再读取文件尾部1M的大小:ReadFile(hFile,buff,1M,&dwRead,NULL);从而将文件内容读取到了buff缓存中。(5)接下来则调用HASH函数来对文件内容计算HASH结果。HEADMD5HASH=Md5.Create(buff,1M);具体则通过调用Md5的函数来对读取的文件内容计算Md5的HASH结果。从而得到了文件尾部的Md5校验结果。而本实施例中对整个文件内容校验,则首先需要读取整个文件的内容到缓存中。ReadFile(hFile,buff,filesize,&dwRead,NULL);其中,参数filesize则是之前获取的整个文件的文件大小,现在则读取整个文件内容读取到了buff缓存中,接下来则使用多种HASH算法来校验整个文件的内容。MD5HASH=Md5.Create(buff,filesize);从而得到整个文件的内容的Md5算法的HASH结果。CRC32HASH=Crc32.Create(buff,filesize);从而得到整个文件的内容的crc32算法的HASH结果。SHA1HASH=sha1.Create(buff,filesize);从而得到整个文件的sha1算法的HASH结果。通过上述方式得到这些数据后,则可以构造出一个模块文件的校验信息同样的对于其他模块也使用同样的方法则可以得到每一个模块的校验信息,从而构造出模块校验信息列表ModuleCheckList的信息。进一步的,本发明实施例中还需要设计通过一个区块生成一个新的区块的算法。每个区块链的客户端则都可以收到服务器下发的初始区块,然后依据初始区块则可以生成新的区块并且加入到区块链表中,具体实现如下:首先我们已经获取到了上一个区块的数据结构,下一个区块则是依据上一个区块的数据进行生成。本实施例中假设上一个区块的名字是prevblock,新生成的区块的名字是newblock。(1)计算新的区块的区块号。Newblock.index=prevblock.index+1;则新的区块的块号是当前块号加1。(2)计算新的区块的时间戳。Newblock.timestamp=time();新区块的时间戳则是获取当前的时间。(3)计算新的区块的上一个区块的hash值。Newblock.previousHash=prevblock.hash;新区块的上一个区块的hash值则是获取的上一个区块的hash。(4)计算新的区块的数据。Newblock.data=data+ModuleCheckList;当官方客户端版本进行更新时,则会产生一个新的区块,新的区块中则会包含新发布版本的所有模块的模块校验信息列表ModuleCheckList的完整信息。(5)计算新的区块的randdata值。此randdata值则是客户端随机生成,以凑足正好整个新的区块计算的hash值前面满足服务器下发的0的个数。(6)计算新的区块的hash值。Newblock.hash=HASH(index+previousHash+timestamp+data+zero+randdata);新区块的hash值则是有新区块的index字段和previousHash字段和timestamp字段和data字段。其中使用的HASH算法则通常是SHA-256算法,当然也可以使用其他HASH算法,例如SHA-1、MD5等。通过上述步骤就实现了通过一个区块生成一个新的区块的算法。本发明实施例中步骤S203根据新的模块校验信息列表,更新客户端版本区块链,则可以依据上述生成新区块的方式生成新的区块(前一个区块为服务器下发的初始区块),更新到客户端版本区块链中。本发明实施例中,对于新区块的产生,会通过网络广播到所有区块链的客户端中去,并且所有客户端都是一个区块链的客户端,都具有生成新的区块,并校验新的区块的能力,并且区块链的所有客户端是可以校验发送区块的身份信息,那么区块链的客户端对于收到一个新的区块时则都会去校验新的区块的发送者的身份是不是官方客户端的身份信息,如果不是则不会加入到区块链中,认为该是一个伪造的设备唯一ID。所以每个区块都需要进行完整性校验。具体实现如下:通常的在客户端,除了初始区块,对于其他区块则是首先客户端已经有当前区块,然后收到了一个新的区块,需要对新的区块进行合法性判断。具体实现如下:同样假设上一个区块的名字是prevblock,然后收到了一个新生成的区块的名字是newblock。(1)首先判断其index是否正确。Newblock.index!=prevblock.index+1;如果新的区块的区块号index不是上一个区块的区块号加1,则说明新的区块不合法,直接返回区块错误信息。(2)然后判断区块的hash值。Newblock.previousHash!=prevblock.hash如果新的区块的上一个区块的hash值不等于上一个区块的hash值则认为新的区块不合法,直接返回区块错误信息。(3)判断新的区块的hash值。新的区块的hash值是新区块的整个数据的hash结果。HASH(Newblock.index+Newblock.previousHash+Newblock.timestamp+Newblock.data+Newblock.randdata+Newblock.zero)!=Newblock.hash;如果新的区块的整个区块的数据的hash值不等于新的区块hash值,则认为新的区块不合法,直接返回区块错误信息。(4)判断客户端官方发布者的身份信息。当需要发布新的客户端时,则会生成新的客户端版本区块,并且在新的区块中可以包含整个客户端所有模块的校验信息ModuleCheckList。为了进一步保证安全,官方发布者可以使用自己的私钥信息来对ModuleCheckList信息进行加密,所有客户端则都具有官方者的公钥信息,从而通过公钥来对数据进行解密,如果解密出来的信息都是正确完整的,不是乱码信息,则说明此信息是官方发布者的信息,如果此信息是解密出来是乱码的则说明是非法的官方信息。进一步的,本发明实施例中,当客户端启动后,会从区块链中获取到当前客户端版本的模块校验信息列表ModuleCheckList,从而可以依据所有需要校验的模块去读取模块文件信息并且与ModuleCheckList里面的模块信息进行比对,只有校验模块信息匹配才说明客户端模块是合法的,否则则是非法的,本实施例中以所有客户端模块参与校验进行说明,具体实现如下:(1)对于ModuleCheckList列表则遍历其中的每一个模块。使用和上述步骤中描述的一样的方法来读取读取模块文件的内容大小,并且判断当前客户端读取的模块的大小是否和区块链中的ModuleCheckList的大小一致,如果不一致则直接说明客户端不合法。为了提高校验速度,则可以首先第一步对所有模块校验其文件大小,只要有一个文件大小不一致则说明客户端是非法的。当所有文件大小都合法后,则校验文件的的文件头哈希值,和文件尾哈希值,只要有一个文件的HASH校验不一致则说明客户端是非法的,只有都一致才能说明客户端是合法的。当校验完所有文件的文件头和文件尾HASH后,则对每一个模块文件的整个文件内容的HASH进行校验,并且需要对多种HASH算法的结果进行校验。包括MD5、Crc32、Sha1,只有所有都一致才能说明此模块和区块链中发布的模块信息一致,才是一个合法的客户端。如图5所示,本发明还提供一种客户端安全检测装置,该装置包括:第一获取模块501,用于当客户端启动后,从本地获取当前目标版本的所述客户端的第一模块校验信息;第二获取模块502,用于从预置的客户端版本区块链中,获取所述目标版本的所述客户端的第二模块校验信息,所述第一模块校验信息和所述第二模块校验信息对应相同的客户端模块;比对模块503,用于对所述第一模块校验信息及所述第二模块校验信息进行信息比对;确定模块504,用于在所述第一模块校验信息及所述第二模块校验信息匹配时,确定所述客户端合法。本发明实施例当客户端启动后,第一获取模块501从本地获取当前目标版本的客户端的第一模块校验信息;第二获取模块502从预置的客户端版本区块链中,获取目标版本的客户端的第二模块校验信息;比对模块503对第一模块校验信息及第二模块校验信息进行信息比对;确定模块504在第一模块校验信息及所述第二模块校验信息匹配时,确定客户端合法。本发明实施例中利用区块链技术保存客户端的版本信息,由于区块链数据不易篡改的特性,可以有效的对客户端合法性进行校验,提升客户端的安全性,避免用户和开发商的损失。进一步的,所述第一获取模块501具体用于:从本地获取目标版本的所述客户端的模块校验信息列表,所述模块校验信息列表中包括所述目标版本的所述客户端所有模块的校验信息;其中,所述第一模块校验信息包括所述模块校验信息列表中至少一个所述客户端模块的校验信息。进一步的,如图6所示,所述装置还包括更新模块505,所述更新模块505用于:在安装所述客户端后,从服务器获取所述客户端版本区块链,所述客户端版本区块链中包括所述客户端当前版本的模块校验信息列表及每一个历史版本的模块校验信息列表;在所述客户端每次进行版本更新时,生成新的模块校验信息列表;根据所述新的模块校验信息列表,更新所述客户端版本区块链。进一步的,所述更新模块505具体用于:分别以所述客户端中各模块为目标模块;若所述目标模块文件大小小于预设阈值,则以所述目标模块的整体哈希值作为所述目标模块的校验信息;若所述目标模块文件大小大于等于预设阈值,则以所述目标模块的第一预设长度文件头的哈希值,第二预设长度的文件尾部的哈希值作为所述目标模块的校验信息。进一步的,所述比对模块503具体用于:若所述第一模块校验信息中包括多个所述客户端的模块校验信息时,则分别对所述第一校验模块中的模块校验信息,与所述第二模块校验信息中对应的模块校验信息进行比对;若所述第一校验模块中的所有模块校验信息均与所述第二模块校验信息中对应的模块校验信息匹配,则确定所述第一模块校验信息及所述第二模块校验信息匹配。本发明实施例中还提供一种电子设备,请参见图7,所述电子设备包括:存储器701,处理器702及存储在所述存储器上并可在所述处理器上运行的计算机程序703,其中,所述处理器702执行所述计算机程序703时可以实现上述客户端安全检测方法。需要说明的是,本申请涉及的电子设备包括但不限于是:移动终端(手机、智能手机、PAD、笔记本电脑等等)、固定终端(计算机)。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。存储器701可用于存储计算机程序703,上述计算机程序包括软件程序、模块和数据,处理器702通过运行执行存储在存储器701的计算机程序703,从而执行电子设备的各种功能应用以及数据处理。在具体的实施过程中,存储器701可用于存储软件程序以及模块,处理器702通过运行存储在存储器701的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器701可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(例如游戏类应用程序、聊天类应用程序)等;存储数据区可存储根据电子设备的使用所创建的数据(游戏配置数据、音频数据)等。此外,存储器701可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器702是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器701内的软件程序和/或模块,以及调用存储在存储器701内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器702可包括一个或多个处理单元;优选的,处理器702可集成应用处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等。本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的客户端安全检测方法的部分或全部步骤。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1