Windows动态链接库的分段双重加密及安全加载方法技术

技术编号:8347985 阅读:272 留言:0更新日期:2013-02-21 01:37
本发明专利技术公开了一种Windows动态链接库的分段双重加密及安全加载方法,目的在于解决现有技术中动态链接库容易被跟踪调试,被应用程序私自加载,被静态反汇编等技术问题,它包括如下步骤:解析Windows动态链接库文件结构;建立私有动态链接库导出表;清除动态链接库导出表;分别对动态链接库文件的代码段、数据段使用指定加密算法的一个加密密钥进行加密;对整个动态链接库文件使用指定加密算法的另外一个加密密钥进行加密;加载时从私有动态链接库导出表输出接口函数给应用程序等。

【技术实现步骤摘要】

本专利技术涉及信息安全技术,尤其涉及一种在Windows平台上对动态链接库的加密保护及私有的加载方法。
技术介绍
在业界,软件产品公司经常将开发的Windows软件以动态链接库(DLL)的形式提供给客户。这是一种很方便的发布方式,但可能存在以下几种威胁1.客户可以用静态分析动态链接库的方法以了解其中的重要算法;2.客户可以在程序运行时跟踪调试动态链接库以了解其中的重要算法,并获得运行时的重要数据。比如,在IPTV系统中,跟踪调试终端程序,可以获得流媒体的加扰密钥;3.动态链接被加载后,根据其在进程内存空间的映像的起始地址,获得内存映像的段头信息(section header)后,就可获得其完整的内存结构,比如,代码段地址、数据段地址、 导出表地址等等,再进行分析;4.客户可以非法地将该动态链接库软件传播给第三方使用。通常的软件加密方法加密整个文件,用Windows API加载,能在运行状态下被分析得到某些信息,比如能获得其中的API函数、代码段数据、数据段数据等等。或采用加密狗的方法,但需要特殊的硬件,价格昂贵,也不适合普通家庭的各人电脑上安装。还有为可执行文件加壳的方法,但加壳方法只是针对可执行文件,程序载入内存解密后,可以被分析、被调试跟踪。对一般的加壳保护,攻击者很容易找到被保护程序的原始入口点,这时被保护的程序已去壳(解压缩、解密),攻击者可以通过内存中的明文数据,分析目标程序。公开日为2007年04月11日、公开号为CN 1945589A的专利文献公开了这样的技术方案,一种WINDOWS平台下保护动态链接库接口的方法A、通过WINDOWS API L0ADLIBRARY,首先将要使用的目标DLL的导出函数改名;B、对已改名的目标DLL的导出表进行可逆的加密,再将DLL向用户发放;C、在使用DLL时,把磁盘上的DLL进行内存映射, 再在内存中对DLL的导出表进行解密,解密是B步骤中加密的逆过程,最后动态装载内存中的DLL;本方法可以保证在应用程序使用动态链接实现模块化的安全问题,并针对调用 WINDOWS API L0ADLIBRARY来动态装载DLL进行保护;同时不会破坏DLL的导出表,DLL仍然可以正常使用,也不需要密匙来控制,在使用上非常方便。该方案的不足之处在于对目标 DLL的导出表进行加密、在内存中对DLL的导出表进行解密,最后动态装载内存中的DLL过程中,由于原导出表的存在以及通用的加载器、加载方式,容易被跟踪调试、被应用程序私自加载、被静态反汇编等。
技术实现思路
本专利技术的目的在于解决现有技术中动态链接库加密后容易被跟踪调试,被应用程序私自加载,被静态反汇编等技术问题,提供一种通用的Windows动态连接库加密保护方法以及私有的加载方法,能够有效防止动态链接库被跟踪调试、私自加载、静态反汇编等操作。本专利技术针对现有技术问题主要是通过下述技术方案得以解决的,一种,包括如下步骤(1)解析Windows动态链接库文件结构;(2)建立私有动态链接库导出表;(3)清除动态链接库导出表;(4)分别对动态链接库文件的代码段、数据段使用指定加密算法的一个加密密钥进行加密;(5)对整个动态链接库文件使用指定加密算法的另外一个加密密钥进行加密;(6)安全加载步骤包括a)对加密的动态链接库文件使用指定加密算法的一个密钥进行解密,建立动态链接库文件内存映像I,对内存映像I中的代码段、数据段使用指定加密算法的另一个密钥进行解密;b)建立内存映像II,分配一个虚拟内存块,拷贝内存映像I中的内容,重定位虚拟内存块中的地址数据;c)从隐藏在内存映像II代码段中的私有动态链接库导出表输出接口函数给应用程序;d)删除内存映像I,清除内存映像II的段头(sectionheader)。本专利技术通过解析Windows动态链接库文件的结构(即PE结构),建立私有的动态链接库导出表并加以隐藏,将原有的动态链接库导出表(Export Table)清除,分别对动态链接库文件的代码段、数据段用一个密钥加密,最后,再对整体动态链接库文件用另外一个密钥进行加密。本专利技术采用私有的加载方法从私有动态链接库导出表中输出接口函数,自己为段分配内存以建立内存映像,而且建立的内存映像是没有段头(section header)信息的。 由于动态链接库的内存映像的内存是自己的加载器自己分配的,其内存结构具有保密性, 所以一些工具软件也难于动态跟踪分析这种动态链接库。经过本专利技术处理的动态链接库文件,不能被应用程序直接加载,即使密钥泄露后被应用链接加载,由于动态链接库的导出表已被清除,以致不能获得其中的导出函数,该库最终还是个不能使用的库。作为优选,私有动态链接库导出表存放的是导出函数的相对虚拟地址。该导出表不包含导出函数名,没有函数名的导出表只有特殊程序才能识别,更为安全。作为优选,本方案中编制一制造私有动态链接库导出表存储区间的代码文件,所述制造私有动态链接库导出表存储区间的代码文件与动态链接库的源文件一起编译后, 在代码段中会包含两个字节串,称之为分隔码,在两个分隔码之间存放私有动态链接库导出表。将私有动态链接库导出表隐藏在动态链接库代码段中。两个分隔符之间根据需要设置足够的存放区域。作为优选,私有动态链接库导出表的建立步骤包括(A)分析动态链接库的头部,获得导出表的起始地址;(B)分析动态链接库的导出表,获得所有的导出函数的函数名和它的相对虚拟地址;(C)将动态链接库导出表中的函数的相对虚拟地址放入私有动态链接库导出表中。私有动态链接库导出表放置在具有分隔符的动态链接库代码段中。作为优选,清除动态链接库导出表的步骤包括(A)分析动态链接库的头部,获得导出表的起始地址;(B)分析动态链接库导出表,获得所有函数名称或变量名称和对应的地址,将这些函数名称或变量名称和地址都清除。作为优选,加密数据段的步骤包括(A)分析动态链接库的头部,获得重定位表;(B)分析动态链接库的头部,获得只读数据段的起始地址,从该地址起采用指定加密算法的一个密钥加密整个只读数据段,该只读数据段中需要重定位的所有地址数据保留原来的值,这些地址数据的位置从重定位表中获得;(C)分析动态链接库的头部,获得可写数据段的起始地址,从该地址起采用指定加密算法用与只读数据段相同的密钥加密整个可写数据段,该可写数据段中需要重定位的地址数据保留原来的值,这些地址数据的位置从重定位表中获得。(D)作为优选,指定加密算法是采用AES算法的密码区块链模式作为加密算法。AES(Advanced Encryption Standard)算法的密码区块链(Cipher Block Chaining- CBC)模式作为加密算法安全性好,能有效防止非法篡改。作为优选,解密及加载动态链接库的步骤包括(A)从服务器端获得密钥Kl和K2,所述密钥Kl和K2是加密时的密钥;(B)查找加密库文件,根据文件名,在用户机器上找到加密的动态链接库文件;(C)用密钥K2解密动态链接库文件;(D)为动态链接库文件建立内存映像I;采用Windows API函数LoadLibrary为动态链接库文件建立内存映像I ;(E)对内存映像I中的代码段、数据段使用Kl解密可写数据段;解密只读数据段;(F)建立内存映像II,分配一个虚拟内存本文档来自技高网
...

【技术保护点】
一种Windows动态链接库的分段双重加密及安全加载方法,其特征在于,包括如下步骤:解析Windows动态链接库文件结构;建立私有动态链接库导出表;清除动态链接库导出表;分别对动态链接库文件的代码段、数据段使用指定加密算法的一个加密密钥进行加密;对整个动态链接库文件使用指定加密算法的另外一个加密密钥进行加密;安全加载步骤包括:a)对加密的动态链接库文件使用指定加密算法的一个密钥进行解密,建立动态链接库文件内存映像I,对内存映像I中的代码段、数据段使用指定加密算法的另一个密钥进行解密;b)?建立内存映像II,分配一个虚拟内存块,拷贝内存映像I中的内容,重定位虚拟内存块中的地址数据;c)?从隐藏在内存映像II代码段中的私有动态链接库导出表输出接口函数给应用程序;d)删除内存映像I,清除内存映像II的段头。

【技术特征摘要】

【专利技术属性】
技术研发人员:徐继军
申请(专利权)人:UT斯达康通讯有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1