一种文件校验方法和装置与流程

文档序号:12786216阅读:295来源:国知局
本发明涉及信息安全技术,尤其涉及一种文件校验方法和装置。
背景技术
::可执行链接格式(ELF,ExecutableandLinkingFormat)文件是一种二进制文件,可以被调入中央处理器中直接运行,也可以与多个ELF文件连接在一起而形成一个可执行文件,因此,被广泛地应用于电脑、嵌入式系统及移动终端等应用程序中。当前,为了防止第三方通过反编译工具对ELF文件进行破解,出现了很多对ELF文件进行保护的方案,比如,将ELF文件符号表中的符号用加密符进行替换,使得加密后的符号难以阅读,提高文件被恶意破解的门槛,从而对ELF文件进行保护。但是上述方案在对ELF文件解密时,需要对保护后的ELF文件中的加密后的符号进行解密,因此,在具体实现时,不仅需要额外对解密所使用的字典进行保存,还需要另外的程序对保护后的ELF文件进行解密,占用额外的存储空间。技术实现要素:为解决上述技术问题,本发明实施例期望提供一种文件校验方法和装置,无需对ELF文件中的字符进行替换,ELF文件在运行时就能够实现对自身的校验,不占用额外的存储空间。本发明的技术方案是这样实现的:第一方面,本发明实施例提供了一种文件校验方法,该方法可以包括:运行目标可执行链接格式ELF文件时,根据预设的校验算法获取所述目标 ELF文件的实际校验值;在所述运行目标ELF文件过程中,从所述目标ELF文件的预设空隙字节处读取所述目标ELF文件的校验参照值;将所述实际校验值与所述校验参照值进行比较;当所述实际校验值与所述校验参照值一致时,确定校验成功;当所述实际校验值与所述校验参照值不一致时,确定校验失败。在上述方案中,所述目标ELF文件的预设空隙字节具体包括:所述目标ELF文件中各节之间的空隙以及所述目标ELF文件各段的预留保留字段。在上述方案中,在所述根据预设的校验算法获取所述目标ELF文件的实际校验值之前,所述方法还包括:遍历所述目标ELF文件,获取所述目标ELF文件中的空隙字节;按照预设的写入规则将所述目标ELF文件的校验参照值写入空隙字节。在上述方案中,所述遍历所述目标ELF文件,获取所述目标ELF文件中的空隙字节,具体包括:根据所述目标ELF文件中的ELFHeader字段信息获取所述目标ELF文件各段的保留字段地址;以及,根据所述目标ELF文件中节头部表SectionHeaderTable获取所述目标ELF文件中各节之间的空隙。在上述方案中,所述从目标ELF文件的预设空隙字节处读取所述目标ELF文件的校验参照值,具体包括:获取所述目标ELF文件的预设空隙字节地址;从获取得到的预设空隙字节地址中读取所述目标ELF文件的校验参照值。第二方面,本发明实施例提供了一种文件校验装置,该装置可以包括:运行单元、获取单元、读取单元和校验单元;其中,所述运行单元,用于运行目标可执行链接格式ELF文件;所述获取单元,用于所述运行单元运行目标ELF文件时,根据预设的校验算法获取所述目标ELF文件的实际校验值;所述读取单元,用于所述运行单元运行目标ELF文件过程中,从所述目标ELF文件的预设空隙字节处读取所述目标ELF文件的校验参照值;所述校验单元,用于将所述实际校验值与所述校验参照值进行比较;以及,当所述实际校验值与所述校验参照值一致时,确定校验成功;以及,当所述实际校验值与所述校验参照值不一致时,确定校验失败。在上述方案中,所述目标ELF文件的预设空隙字节具体包括:所述目标ELF文件中各节之间的空隙以及所述目标ELF文件各段的预留保留字段。在上述方案中,所述装置还包括遍历单元和写入单元;其中,所述遍历单元,用于遍历所述目标ELF文件,获取所述目标ELF文件中的空隙字节;所述写入单元,用于按照预设的写入规则将所述目标ELF文件的校验参照值写入所述遍历单元获取到的空隙字节。在上述方案中,所述获取单元,具体用于:根据所述目标ELF文件中的ELFHeader字段信息获取所述目标ELF文件各段的保留字段地址;以及,根据所述目标ELF文件中节头部表SectionHeaderTable获取所述目标ELF文件中各节之间的空隙。在上述方案中,所述读取单元,具体用于:获取所述目标ELF文件的预设空隙字节地址;从获取得到的预设空隙字节地址中读取所述目标ELF文件的校验参照值。本发明实施例提供了一种文件校验方法和装置,通过在ELF文件预留的空隙字节中保存自身的校验值,从而无需对ELF文件中的字符进行替换,在ELF文件运行过程中,通过预先保存的校验值就能够对自身进行校验,不占用额外的存储空间。附图说明图1为本发明实施例提供的一种文件校验的方法流程示意图;图2为本发明实施例提供的一种ELF文件的整体格式示意图;图3为本发明实施例提供的一种ELF文件的具体内容示意图;图4为本发明实施例提供的一种将校验参考值写入空隙字节的过程示意图;图5为本发明实施例提供的一种ELF文件中ELFHeader字段信息的结构示意图;图6为本发明实施例提供的一种ELF文件中节头部表中表项结构示意图;图7为本发明实施例提供的一种ELF文件中节头部表中表项内容示意图;图8为本发明实施例提供的一种从空隙字节处读取校验参照值的流程示意图;图9为本发明实施例提供的一种文件校验装置结构示意图;图10为本发明实施例提供的另一种文件校验装置结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。实施例一参见图1,其示出了本发明实施例提供的一种文件校验的方法,该方法可以应用于能够运行目标ELF文件的装置,该方法可以包括:S101:运行目标ELF文件时,根据预设的校验算法获取目标ELF文件的实际校验值;S102:在运行目标ELF文件过程中,从目标ELF文件的预设空隙字节处读取目标ELF文件的校验参照值;S103:将实际校验值与校验参照值进行比较;S104:当实际校验值与校验参照值一致时,确定校验成功;S105:当实际校验值与校验参照值不一致时,确定校验失败。需要说明的是,预设的校验算法可以是消息摘要算法第五版(MD5, MessageDigestAlgorithm)或安全哈希算法(SHA1,SecureHashAlgorithm)等用于进行数据校验的算法。相应地,实施例中的实际校验值和校验参照值均是与预设的校验算法相对应的校验值。并且,当校验成功后,将继续运行目标ELF文件;当校验失败后,将停止运行目标ELF文件并退出。可以理解地,本发明实施例对步骤S101和步骤S102的执行顺序不进行限定,可以理解地,获取目标ELF文件的实际校验值与读取目标ELF文件的校验参考值之间的先后顺序可以按照运行目标ELF文件的具体运行顺序进行排列,本发明实施例对此不作限定和赘述。由上可知,图1所示的技术方案能够将在运行ELF文件时,从ELF文件中的空隙字节处读取得到预存的用于文件校验的参照值,因此,能够在ELF文件运行过程中对自身进行校验,并且无需额外的存储空间占用。实施例二结合图1所示的技术方案,如图2所示的ELF文件的整体格式,ELF文件是一种基于段的数据结构。对于ELF文件来说,文件开始是ELFHeader字段信息;随后是程序头部表(ProgramHeaderTable);接着是各节Segment的内容信息;然后是节头部表(SectionHeaderTable),节头部表中有字段记录每节Segment的实际长度等信息。节头部表的位置可由ELFHeader字段中的值进行指示。为了提高CPU的存取速度,ELF文件中的各节Segment长度会有大小对齐的要求。因此各节Segment数据的实际长度通常都小于等于节Segment大小,这就产生了节与节之间的空隙,另外,在ELF文件格式中,各段均有预留的保留字段不被使用,因此,目标ELF文件的预设空隙字节具体可以包括:目标ELF文件中各节之间的空隙以及目标ELF文件各段的预留保留字段。如图3所示的一个ELF文件的具体内容示意图,如图3中实线所示划分为三个区域,左区域为地址索引;中间区域为每个地址存储字符所对应的十六进制码;右区域为每个地址存储字符对应的美国标准信息交换代码(ASCII,AmericanStandardCodeforInformationInterchange)。在图3中,虚线框所包括的起始位置为0xE:0FB0H,长度为64字节的区域属于节头部表SectionHeaderTable的第0项,内容为全0的系统保留字段;紧挨着节头部表SectionHeaderTable上方的为字符串表,字符串表的起始位置为0xE:0E42H,长度为360字节,因此,字符串表的实际结束位置是0xE:0FA9H,即该地址存储的字符为“ranges”后的字符串结束符0X0,由于需要和节头部表SectionHeaderTable对齐,因此,字符串表后补充6个字节的空字符来形成字符串表与节头部表中间的字节空隙,地址为0xE:0FAAH至0xE:0FAFH。可以理解地,一个ELF文件中,还会存在多个系统保留字段和字节空隙,图3所示仅用来进行举例说明,并不对ELF文件的结构进行任何的限定。由图3可以得知,节头部表中64字节的系统保留字段以及字符串表与节头部表之间6个字节的字节空隙均可以用来存储ELF文件自身的校验参照值。从而能够达到隐藏校验参照值这一敏感信息,而且还不会影响ELF文件的正常运行。另外,为了增加敏感信息的隐蔽性,校验参照值可以分成几段或再进行变换,分别存储在这些字节空隙和保留字段中,具体实施的方案由开发人员灵活设定实施例三结合前两个实施例,在步骤S101之前,参见图4,所述方法还包括将目标ELF文件的校验参考值写入目标ELF文件中空隙字节的过程,具体可以包括:S100A:遍历目标ELF文件,获取目标ELF文件中的空隙字节;S100B:按照预设的写入规则将目标ELF文件的校验参照值写入所述空隙字节。可以理解地,步骤S100A以及步骤S100B可以由目标ELF文件的生成设备执行,本发明实施例对此不作具体限定。结合实施例二中所述的目标ELF文件的预设空隙字节具体可以包括:目标ELF文件中各节之间的空隙以及ELF文件各段的预留保留字段;相应地,步骤 S100A可以包括:根据目标ELF文件中的ELFHeader字段信息获取目标ELF文件各段的保留字段地址;根据目标ELF文件中节头部表SectionHeaderTable获取目标ELF文件中各节之间的空隙。在具体实施过程中,ELFHeader字段信息的结构如图5所示,以节头部表为例,图5所示结构中的参数e_shoff值为节头部表SectionHeaderTable表的起始位置,从而可以根据节头部表SectionHeaderTable的起始位置和节头部表SectionHeaderTable的保留字段规则获知节头部表SectionHeaderTable保留字段地址,也就是图3中虚线框所包括的区域。可以理解地,还能够根据ELFHeader字段信息中目标ELF文件的其他各段信息以及各段中保留字段的规则获取对应的保留字段;于是,保留字段可以用来存储校验参照值。节头部表SectionHeaderTable中每个表项均对应用来描述各节Segment的信息,其中,节头部表SectionHeaderTable用于描述节Segment信息的表项结构如图6所示,其中,sh_offset指示该节的起始地址,sh_size指示该节的数据长度;那么该节的起始地址和该节的数据长度之和则为该节的结束地址;随后遍历节头部表SectionHeaderTable中所有表项的sh_offset,将最接近该节的结束地址的sh_offset与该节的结束地址之间的差值则为目标ELF文件中两节之间的空隙;例如,以图3为例,设定前述的字符串表为ELF文件中的第34节,因此,第34节在节头部表SectionHeaderTable中的表项具体如图7所示,从图7中可以得出,第34节的起始地址s_offset为0xE0E42H,第34节的数据长度s_size为360;所以第34节的结束地址为0xE0E42H+360=921514=0xE0FAAH;而最接近0xE0FAAH的起始地址是节头部表SectionHeaderTable表的起始地址,即0xE0FB0H,因此,第34节和节头部表之间的空隙为0xE0FB0-0xE0FAA=6。因此,这6个字节也能够用于保存校验参照值。结合图4所示的将目标ELF文件的校验参考值写入目标ELF文件中空隙字节的过程,参见图8,步骤S102所述的从目标ELF文件的预设空隙字节处读取 目标ELF文件的校验参照值,具体可以包括:S1021:获取目标ELF文件的预设空隙字节地址;S1022:从获取得到的预设空隙字节地址中读取目标ELF文件的校验参照值。在具体实施过程中,可以在目标ELF文件运行的代码段增加用于校验的代码,在用于校验的代码中,存储校验参照值所存储的空隙字节,从而当目标ELF文件运行至用于校验的代码时,获取到空隙字节的地址,并从获取到的空隙字节的地址读取校验参照值。本实施例的技术方案能够在目标ELF文件运行时,对自身进行自校验,从而无需额外的加壳步骤和解密步骤对目标ELF文件进行校验,从而能够减少ELF文件运行时占用的存储空间。实施例四基于前述实施例相同的技术构思,参见图9、其示出了本发明实施例提供的一种文件校验装置90,该装置90可以包括:运行单元901、获取单元902、读取单元903和校验单元904;其中,所述运行单元901,用于运行目标ELF文件;所述获取单元902,用于所述运行单元901运行目标ELF文件时,根据预设的校验算法获取所述目标ELF文件的实际校验值;所述读取单元903,用于所述运行单元901运行目标ELF文件过程中,从所述目标ELF文件的预设空隙字节处读取所述目标ELF文件的校验参照值;所述校验单元904,用于将所述实际校验值与所述校验参照值进行比较;以及,当所述实际校验值与所述校验参照值一致时,确定校验成功;以及,当所述实际校验值与所述校验参照值不一致时,确定校验失败。示例性地,所述目标ELF文件的预设空隙字节具体包括:所述目标ELF文件中各节之间的空隙以及所述目标ELF文件各段的预留保留字段。在上述方案中,参见图10,所述装置90还包括遍历单元905和写入单元 906;其中,所述遍历单元905,用于遍历所述目标ELF文件,获取所述目标ELF文件中的空隙字节;所述写入单元906,用于按照预设的写入规则将所述目标ELF文件的校验参照值写入所述遍历单元905获取到的空隙字节。在上述方案中,所述获取单元902,具体用于:根据所述目标ELF文件中的ELFHeader字段信息获取所述目标ELF文件各段的保留字段地址;以及,根据所述目标ELF文件中节头部表SectionHeaderTable获取所述目标ELF文件中各节之间的空隙。在上述方案中,所述读取单元903,具体用于:获取所述目标ELF文件的预设空隙字节地址;从获取得到的预设空隙字节地址中读取所述目标ELF文件的校验参照值。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的 指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1