一种可执行文件的保护方法和装置与流程

文档序号:14249807阅读:167来源:国知局
本发明涉及软件保护技术,特别是涉及一种可执行文件的保护方法和装置。
背景技术
::软件作为一种特殊的产品,由于其数字化的特征,从问世起就一直遭受盗版的困扰。盗版的存在不仅给软件开发者造成了巨大的损失,也极大的阻碍了整个软件行业的发展。目前的软件保护方式通常是对被保护的程序代码进行处理,以阻止非法用户对程序代码的反编译。例如,加壳作为一种软件保护方式,是将被保护的程序代码转换为虚拟机代码。程序运行时,虚拟机将模拟程序执行,进入和离开虚拟机都有高级代码混淆。该种软件保护方式,通过将虚拟机配合代码混淆可以达到很好的保护效果,尤其是开发者的私有逻辑,同时,采用高级混淆可充分干扰静态分析,并且应用程序的解压缩含有动态密码,可以让一切自动脱壳工具失效,有效的阻止.net、pe程序的直接反编译。上述软件保护方式虽然能可以较大程度地阻止软件的非法使用,但是在实际应用中,仍存在数据泄露及破坏的问题。技术实现要素:有鉴于此,本发明的主要目的在于提供一种可执行文件的保护方法和装置,可以提高软件的安全性。为了达到上述目的,本发明提出的技术方案为:一种可执行文件的保护方法,包括:获取可执行文件的附加数据;利用预设的加密代码段对所述附加数据进行加密;将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。较佳地,所述保护装置为精锐5加密锁。较佳地,所述获取可执行文件的附加数据包括:确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。本发明还提供了一种可执行文件的保护装置,包括:附加数据获取单元,用于获取可执行文件的附加数据;附加数据处理单元,用于利用预设的加密代码段对所述附加数据进行加密;文件保护单元,用于将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。较佳地,所述保护装置为精锐5加密锁。较佳地,所述附加数据获取单元,用于确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。综上所述,本发明提出的可执行文件的保护方法和装置,将对可执行文件中的附加数据进行加密保护处理,经过保护后的可执行文件运行时,需要先利用壳代码对附加数据进行解密,运行结束时再对附加数据进行加密,如此,可以增加可执行文件的反编译和分析的难度,从而可以大大提高软件的安全性。附图说明图1为本发明实施例的方法流程示意图;图2为windows系统的pe文件结构示意图;图3为本发明实施例的装置结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。通过研究分析,申请人发现:对于可执行文件中用来辅助分析可执行文件的至关重要的数据结构——附加数据,现有的软件保护方案并不对其进行处理,比如加壳技术,通常是直接把附加数据放在可执行文件的末尾。这样,附加数据就很容易被编译和分析出来,从而可以分析出执行文件的保护逻辑,造成数据的泄露及破坏。基于此,本发明的核心思想是:将可执行文件中的附加数据加密后放在文件末尾,这样,经过保护处理后的可执行文件在运行时,需要临时对附加数据解密,可行性文件运行结束时再次对附加数据进行加密,从而增加了反编译和分析的难度,大大提高了软件的安全性。图1为本发明实施例提供的可执行文件保护方法的流程示意图,如图1所示,该实施例主要包括:步骤101、获取可执行文件的附加数据。本步骤中,需要对可执行文件进行分析,获取文件中的附加数据,以便在后续步骤中进一步对附加数据进行加密处理,增加可执行文件的反编译和分析的难度。具体地,可以采用下述方法获取可执行文件的附加数据:步骤1011、确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小。本步骤的具体实现方法为本领域技术人员所已知,在此不再赘述。步骤1012、根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址。具体地,将文件偏移与区块表的文件大小相加即得到文件中附加数据的起始地址。步骤1013、读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。步骤102、利用预设的加密代码段对所述附加数据进行加密。本步骤用于对附加数据进行加密处理,以提高可执行文件的安全性,防止非法用户通过对附加数据的编译和分析,分析出执行文件的保护逻辑,造成数据的泄露及破坏。较佳地,所述加密代码段可以通过调用预设的保护装置对所述附加数据进行加密。较佳地,所述保护装置可以为加密锁,如精锐5加密锁,但在实际应用中,并不限于此,只要是能对附加数据进行加密的装置即可。步骤103、将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据。所述挂钩代码段,用来挂钩访问可执行文件附加数据的代码(如createfile和readfile)和文件退出代码(如windows下的exitprocess函数),具体地,用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时(即检测到文件的退出函数执行时),利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据,以确保可执行文件执行结束后的安全性。本步骤中,将利用经过加密的附加数据替换可执行文件中的附加数据,同时,将相应的用于在可执行文件启动和退出时,对附加数据进行解密和加密处理的壳代码增加到可执行文件中,以确保可执行文件运行时能正常的使用附加数据,以及运行结束后,能再次对附加数据进行加密。这里,所述挂钩代码段、加密代码段和解密代码段将作为壳代码增加至可执行文件中,如此,在可执行文件启动和退出时,将利用这些壳代码对文件中的附加数据进行解密和加密处理。通常,这些代码可以增加在文件的尾部。在实际应用中,所述挂钩代码段、加密代码段和解密代码段,可以采用c代码和部分汇编编写,这部分代码称为壳代码,采用普通编译器进行编译即可,具体编写方法为本领域技术人员所掌握,在此不再赘述。通过上述方案可以看出,本发明可以实现对可执行文件的附加数据的加密,从而可以提高可执行文件的安全性。在实际应用中,本发明可以和现有的文件保护工具相结合,例如,该可执行文件可以为经过加壳处理后的可执行文件。这样,在此基础上,进一步对附加数据进行保护处理,可以大大提高可执行文件的安全。下面以微软windows系统下32位的pb编译的pe文件为例,阐述利用本发明的上述实施例来对可执行文件中附加数据进行保护的具体过程。pe文件是微软windows操作系统上的程序文件(可能是间接被执行,如dll)。pe文件被称为可移植的执行体是portableexecute的全称,常见的exe、dll、ocx、sys、com都是pe文件。pe文件结构如图2所示,主要包括区段(section)、区段表(sectiontable)、pe头部(peheader)和dos头部(dosheader)。pe文件各个部分的详细定义可参阅微软windows系统的联机帮助,在此不做过多介绍。首先,确定可执行文件中附加数据所在的位置。根据文件的dosheader的e_lfanew找到image_nt_header数据结构,根据image_nt_header中的image_file_header中的numberofsections找到文件中的区块表的数目,根据image_nt_header中的数据结构image_optional_header32中的imagebase找到可执行文件的默认装入地址,image_file_header后面为区块表,根据最后一个区块表的文件偏移及区块表的文件大小计算附加数据的起始位置,对于本实施例来说,最后一个区块表的文件偏移为0x6600,区块大小为0x600,因此附加数据的起始地址为0x6600+0x600,即为0x6c00,结束地址为文件末尾。然后,利用加密代码段,对文件中的附加数据进行加密,本实施例中调用精锐5加密锁进行加密,精锐5加密锁为保护装置。接下来,将挂钩代码段、加密代码段、解密代码段,作为壳代码注入到原来的可执行文件中,构建成新的经过保护的可执行文件。对于本实施例来说,挂钩代码段所挂钩的访问附加数据的代码为createfile和readfile等,文件退出的代码为exitprocess。经过保护的可执行文件运行时,具体步骤如下:可执行文件运行启动时,由挂钩代码段通过解密代码段对文件中的附加数据解密,并写入到可执行文件中,可执行文件退出时,挂钩代码段利用加密代码段再次将附加数据加密,写入可执行文件中。图3为与上述方法实施例相对应的一种可执行文件的保护装置结构示意图,如图3所示,该装置包括:附加数据获取单元301,用于获取可执行文件的附加数据。附加数据处理单元302,用于利用预设的加密代码段对所述附加数据进行加密。文件保护单元303,用于将预设的挂钩代码段、所述加密代码段和预设的解密代码段,作为壳代码增加至所述可执行文件中,利用经过所述加密的附加数据替换所述可执行文件中的附加数据;其中,所述挂钩代码段用于在所述可执行文件启动时,利用所述解密代码段对文件中的附加数据进行解密,利用解密后的附加数据替换所启动的可执行文件中的附加数据,在所述可执行文件退出时,利用所述加密代码段对所述附加数据进行加密,利用加密后的附加数据替换所退出的可执行文件中的附加数据。较佳地,所述加密代码段通过调用预设的保护装置对所述附加数据进行加密。较佳地,所述保护装置为精锐5加密锁。较佳地,所述附加数据获取单元301,用于确定所述可执行文件中最后一个区块表的文件偏移和区块表的文件大小;根据所述文件偏移和区块表的文件大小,计算所述附加数据的起始地址;读取从所述起始地址开始到文件末尾的文件数据,得到所述附加数据。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1