一种动态链接库dll文件的处理方法和装置的制作方法

文档序号:6607727阅读:190来源:国知局

专利名称::一种动态链接库dll文件的处理方法和装置的制作方法
技术领域
:本发明涉及软件维护
技术领域
,更具体地说,涉及一种动态链接库DLL文件的处理方法和装置。
背景技术
:目前,正版软件需要有软件证书授权才能进行使用,如何保护正版软件不被破解者非法破解免费使用而损害软件供应商的利益,针对所述正版软件授权的管理至关重要。现有的正版软件管理主要是针对具有保密效果的关键代码的管理,该种管理方式主要通过将关键代码以DLL独立的文件方式设于外部安全设备内,如硬件加密狗驱动中,或者设于网络远程证书服务器的API接口模块中,并通过静态链接或动态链接(调用API函数)加载所述DLL并调用其中函数,以进行软件后续进程。然而,由于现有技术中的DLL文件以完整独立的文件形式存在,即使对这些DLL文件进行数字签名,且在加载DLL文件之前先对数字签名进行校验,仍可被破解者通过定位该独立文件的位置,并以静态调试的方法找到并替换数字签名所用的公钥,再伪造DLL的数字签名达到加载所述DLL文件的目的,从而破坏正版软件管理系统而免费使用该软件,影响了正版软件供应商的利益。
发明内容有鉴于此,本发明提供一种动态链接库DLL文件的处理方法和装置,以实现将DLL文件以二进制方式嵌入到应用程序,并安全地动态加载该应用程序。一种动态链接库DLL文件的处理方法,包括获取需加载应用程序中预先编译的二进制文件,该二进制文件由DLL文件封装而成;将所述DLL文件导入内存,确定所述DLL文件的在所述内存中的实际虚拟地址;修改地址表IAT中的导入函数的入口地址;获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载。本实施方式将包含有关键代码的DLL文件作为资源嵌入到应用程序中,而不再作为独立文件存在,而令破解者不能轻易定位所述关键代码及所述DLL文件的位置;且该实施方式不再直接使用LoadLibraryAPI函数加载所述DLL文件,而令破解者难于判断实际加载所述DLL文件的时机和地址,从而实现了安全加载动态链接库DLL文件的技术效果。优选地,所述方法还包括计算DLL文件的CRC检验码,通过DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件。为了安全起见,所述DLL文件与对应的CRC检验码合并并加密再嵌入至所述二进制文件,进一步增加了破解者定位所述所述关键代码及所述DLL文件的位置的难度。优选地,所述获取需加载应用程序中预先编译的二进制文件具体为4调用FindResourceAPI函数获取所述DLL文件与对应的CRC校验码所在资源;根据该资源调用LoadResource和LockResourceAPI函数获得所述DLL文件与对应的CRC校验码的内存入口指针;依据该内存入口指针获取所述加密后的DLL文件与对应的CRC校验码。该实施方式的目的在于在所述DLL文件与对应的CRC校验码加密的情况下,利用API函数释放所述DLL文件与所述CRC校验码,从而进行DLL文件的加载过程。优选地,所述将DLL文件导入所述内存中具体为通过调用VirtualAllocAPI函数分配与所述DLL文件对齐长度相等的内存,并返回所述DLL文件的内存基地址,该内存基地址存储于所述DLL文件的PE文件头中。所述DLL文件以对齐方式存储于内存中,方便了动态寻址。优选地,所述确定所述DLL文件的在所述内存中的实际虚拟地址包括从所述DLL文件的PE文件头读取所述DLL文件的基地址;通过内存的起始地址减去所述DLL文件的基地址,得到地址偏移量;从所述DLL文件的PE文件头中读取重定位表,遍历整个重定位表列举出其中需重新定位的入口地址;通过所述需要重新定位的入口地址加上所述地址偏移量得到所述DLL文件的实际虚拟地址。本实施方式为针对所述DLL文件的地址重定位过程,获得实际虚拟地址以便于导入函数的关键代码的调用。优选地,所述修改地址表IAT中的导入函数的入口地址具体为读取所述PE文件头中的IAT表;遍历所述IAT表中需导入DLL文件的文件名称;调用GetModuleHandleAPI函数获得指向所述需导入的DLL文件的句柄;以所述DLL文件的句柄和导入函数的名称为参数,调用GetProcAddressAPI函数获得所述导入函数的入口地址,并以所述导入函数的入口地址修改IAT表相应的条目。以上实施方式是将IAT表的入口地址与所述导入函数在所述IAT表中的实际虚拟地址进行修改,从而使得所述DLL文件中的导入函数的关键代码与所述导入函数实际所处的地址联系起来,建立动态链接。优选地,所述方法还包括调用VirtualProtectAPI函数将所述内存中所述DLL文件的执行代码的节修改为PAGE_EXECUT_READWRITE属性。修改所述DLL文件的执行代码属性使内存区域有不同的属性,确保包含执行代码的节能够被操作系统正确识别并执行。优选地,所述获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载具体为读取所述DLL文件的PE头文件,获取所述入口函数的相对地址;将所述入口函数的相对地址与所述内存起始地址相加,得到所述入口函数的实际虚拟地址,根据所述入口函数的实际虚拟地址,以DLL_PROCESS_ATTACH参数调用该入口函数,完成加载。一种动态链接库DLL文件的处理装置,包括编译单元,用于将DLL文件封装至二进制文件中,并将该二进制文件编译至应用程序中;DLL文件提取单元,用于获取所述二进制文件中的DLL文件;内存分配单元,用于将所述DLL文件导入内存;地址确定单元,用于确定所述DLL文件在所述内存中的实际虚拟地址,并修改地址表IAT中的导入函数的入口地址;入口函数调用单元,用于获取DLLMain入口函数的实际虚拟地址并调用所述入口函数完成对所述DLL文件的加载。优选地,所述装置还包括所述编译单元具体为加密编译单元,用于计算DLL文件的CRC检验码,通过DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件。上述处理装置与动态链接库DLL的处理方法对应。从上述的技术方案可以看出,本发明实施例将包含有关键代码的DLL文件作为资源(具体为二进制资源)嵌入到应用程序中,在加载应用程序时,释放所述DLL文件的内容,所述DLL文件不再作为独立文件存在,而令破解者不能轻易定位所述关键代码及所述DLL文件的位置;同时,本发明中,不再直接使用LoadLibraryAPI函数加载所述DLL文件,整个加载过程以动态加载的方式进行,通过重定位DLL文件实际虚拟地址,并修改IAT表中的导入函数的入口地址,从而调用所述DLL文件中的导入函数的关键代码与所述导入函数实际所处的地址联系起来,建立动态链接,而令破解者难于判断实际加载所述DLL文件的时机和地址。进一步地,所述DLL文件可与对应的CRC校验码同时嵌入应用程序,所述DLL文件以动态形式加载,克服了现有技术中破解者利用独立存在的DLL文件以静态调试及伪造数字签名的方式加载所述DLL文件的缺陷,实现了安全加载动态链接库DLL文件的技术效果。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图Ia为本发明实施例公开的一种动态链接库DLL文件的处理方法流程图;图Ib为本发明实施例公开的一种动态链接库DLL文件以对齐方式导入至内存的长度计算方法流程图;图Ic为本发明实施例公开的一种动态链接库DLL文件以对齐方式导入至内存中的布局结构示意图;图2为本发明又一实施例公开的一种动态链接库DLL文件的处理方法流程图;图3为本发明又一实施例公开的一种动态链接库DLL文件的处理方法流程图;图4为本发明实施例公开的一种动态链接库DLL文件的处理装置结构示意图。具体实施例方式为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结如下CRC校验CyclicRedundancyCheck,循环冗余校验码,是常用的一种差错校验方法;DES密码体制中的对称密码体制,是1972年美国IBM公司研制的对称密码体制加密算法。API:ApplicationProgrammingInterface,j^MfMj^lSfM^Π;DLL=DynamicLinkLibrary,动态链接库,是包含可由多个程序同时使用的代码和数据的库;PEPortableExecute,文件的扩展名包括EXE、DLL、OCX等;RVA=RelativeVirtualAddresses,相对虚拟地址;IATJmportAddressTable,导入地址表;下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例公开了一种动态链接库DLL文件的处理方法和装置,以实现将DLL文件以二进制方式嵌入到应用程序,并安全地动态加载该应用程序。图Ia示出了一种动态链接库DLL文件的处理方法,包括步骤101获取需加载应用程序中预先编译的二进制文件,该二进制文件由DLL文件封装而成;在编译应用程序的执行文件(ΕΧΕ文件)时,在该EXE文件的资源一节增加对于包含关键代码的DLL文件的引用,从而将所述DLL文件作为二进制资源嵌入到所述应用程序的EXE文件中。步骤102获取所述DLL文件内存入口指针;加载应用程序启动后,根据所述二进制资源的ID在当前进程的资源中调用FindResourceAPI函数查找DLL文件所在的资源,若没有找到指定资源ID对应的ID,则退出;若查找成功,则调用LoadResource及LockResourceAPI函数,并调用FreeResource释放对该资源的锁定,获得DLL文件所在资源的内存入口指针;步骤103根据所述内存指针,获取所述DLL文件,计算所述DLL文件的文件长度并以对齐方式将所述DLL文件导入至内存中;图Ib示出了所述DLL文件的导入至内存的长度计算方法,具体为步骤1031从DLL内容中加载PE文件头,获得SelctionAligment字段,即对齐长度;步骤1032根据所述PE文件头的SizeOfHeaders字段,得到PE文头的实际长度;步骤1033判断所述实际长度是否能被整除,若可以整除,则进行步骤1034,否则将余数加1后进行所述步骤1033;步骤1034将整除值乘以对齐长度得到对齐后的PE文件头在内存中的实际长度7步骤1035根据PE文件头中的NumberOfSections字段获得节的个数,然后循环处理每个节步骤1036读取节的头并获得该节的长度,将该长度除以对齐长度;步骤1037判断所述实际长度是否能被整除,若可以整除,则进行步骤1038,否则将余数加1后进行所述步骤1038;步骤1038将整除值乘以对齐长度得到对齐后的该节头在内存中的实际长度;步骤1039计算所述DLL文件中所有节的对齐后的长度;步骤1040将所述PE文件头的实际长度+对齐后所有节的长度总和,得到所述DLL文件以对齐方式导入内存所需长度。图Ic示出了本发明实施例公开的一种动态链接库DLL文件以对齐方式导入至内存中的布局结构。步骤104确定所述DLL文件的在所述内存中的实际虚拟地址;从所述DLL文件的PE文件头读取所述DLL文件的基地址;通过内存的起始地址减去所述DLL文件的基地址,得到地址偏移量;从所述DLL文件的PE文件头中读取重定位表,遍历整个重定位表列举出其中需重新定位的入口地址;通过所述需要重新定位的入口地址加上所述地址偏移量得到所述DLL文件的实际虚拟地址。步骤105修改地址表IAT中的导入函数的入口地址;读取所述PE文件头中的IAT表;遍历所述IAT表中需导入DLL文件的文件名称;调用GetModuleHandleAPI函数获得指向所述需导入的DLL文件的句柄;以所述DLL文件的句柄和导入函数的名称为参数,调用GetProcAddressAPI函数获得所述导入函数的入口地址,并以所述导入函数的入口地址修改IAT表相应的条目。步骤106调用VirtualProtectAPI函数将所述内存中所述DLL文件的执行代码的节修改为PAGE_EXECUT_READWRITE属性;步骤107获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载;读取所述DLL文件的PE头文件,获取所述入口函数的相对地址;将所述入口函数的相对地址与所述内存起始地址相加,得到所述入口函数的实际虚拟地址,根据所述入口函数的实际虚拟地址,以DLL_PROCESS_ATTACH参数调用该入口函数,完成加载。本实施例将包含有关键代码的DLL文件作为资源(具体为二进制资源)嵌入到应用程序中,在加载应用程序时,释放所述DLL文件的内容,所述DLL文件不再作为独立文件存在,而令破解者不能轻易定位所述关键代码及所述DLL文件的位置;同时,本实施例中不再直接使用LoadLibraryAPI函数加载所述DLL文件,整个加载过程以动态加载的方式进行,通过重定位DLL文件实际虚拟地址,并修改IAT表中的导入函数的入口地址,所述DLL文件中的导入函数的关键代码与所述导入函数实际所处的地址联系起来,建立动态链接。而令破解者难于判断实际加载所述DLL文件的时机和地址,由于所述DLL文件从嵌入应用程序到动态加载,都未以独立文件的方式出现过,从而克服了现有技术中破解者利用独立存在的DLL文件以静态调试的方式加载所述DLL文件的缺陷,实现了安全加载动态链接库DLL文件的技术效果。图2示出了又一种动态链接库DLL文件的处理方法,包括步骤201获取需加载应用程序中预先编译的二进制文件,该二进制文件由DLL文件与对应的CRC校验码合并并加密后封装而成;在编译应用程序的执行文件(ΕΧΕ文件)之前,首先计算DLL文件的CRC校验码,使用DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件;并在编译所述应用程序的该EXE文件时,在该EXE文件的资源一节增加对所述二进制文件的引用,即可将加密后的DLL文件和对应的CRC校验码作为二进制资源嵌入到所述应用程序的EXE文件中。步骤202获取所述DLL文件与对应的CRC校验码所在资源的内存入口指针;调用FindResourceAPI函数获取所述DLL文件与对应的CRC校验码所在资源,若没有找到指定资源ID对应的资源则退出;若查找成功,则根据该资源调用LoadResource和LockResourceAPI函数,并调用FreeResource释放对该资源的锁定,获得所述DLL文件与对应的CRC校验码所在资源的内存入口指针;步骤203依据该内存入口指针获取所述加密后的DLL文件与对应的CRC校验码,利用DES算法解密后导入内存中;使用CRC算法计算解密后的所述CRC校验码,如果破解者手动修改过加密的DLL的内容,则解密完成后CRC校验码将出现不匹配,即可判断所述DLL文件已被修改而结束加载进程;计算所述DLL文件的导入至内存的长度的方法与上一实施例相同,可参见上一实施例的说明与图示;步骤204确定所述DLL文件的在所述内存中的实际虚拟地址;步骤205修改地址表IAT中的导入函数的入口地址;步骤206调用VirtualProtectAPI函数将所述内存中所述DLL文件的执行代码的节修改为PAGE_EXECUT_READWRITE属性;步骤207获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载;本实施例本实施例将包含有关键代码的DLL文件与对应的CRC校验码作为资源(具体为二进制资源)嵌入到应用程序中,在加载应用程序时,释放所述DLL文件的内容,所述DLL文件不再作为独立文件存在且是在进行加密后再嵌入的,则进一步增加了破解者定位所述关键代码及所述DLL文件的位置的难度;同时,本实施例中不再直接使用LoadLibraryAPI函数加载所述DLL文件,是以直接将所述DLL文件在内存中动态加载的方式进行,而令破解者难于判断实际加载所述DLL文件的时机和地址,由于所述DLL文件从嵌入应用程序到动态加载,都未以独立文件的方式出现过,从而克服了现有技术中破解者利用独立存在的DLL文件以静态调试的方式及伪造数字签名的方式加载所述DLL文件的缺陷,实现了安全加载动态链接库DLL文件的技术9效果;同时,该方法简化了程序的发布,不再需要在发布应用程序时附带大量的DLL文件。图3示出了又一种动态链接库DLL文件的处理方法,包括步骤301获取需加载应用程序中预先编译的二进制文件,该二进制文件由DLL文件与对应的CRC校验码合并并加密后封装而成;步骤302获取所述DLL文件与对应的CRC校验码所在资源的内存入口指针;步骤303依据该内存入口指针获取所述加密后的DLL文件与对应的CRC校验码,利用DES算法解密后将所述DLL文件导入内存中;步骤304调用CreateFileAPI函数新建临时文件;步骤305将所述DLL文件写入所述新建临时文件中;步骤306调用LoadLibraryAPI函数并将所述新建临时文件的路径作为参数加载所述DLL文件。上述实施例公开的所述动态链接库DLL文件的处理方法,将所述DLL文件嵌入到EXE文件中,由于该实施例在加载时将所述DLL文件写入到一个临时文件中,因此破解者难于发现实际DLL文件的内容,且该实施方式简单易行,兼容性好。图4示出了一种动态链接库DLL文件的处理装置结构,包括编译单元401,用于将DLL文件封装至二进制文件中,并将该二进制文件编译至应用程序中;DLL文件提取单元402,用于获取所述二进制文件中的DLL文件;内存分配单元403,用于将所述DLL文件导入内存;地址确定单元404,用于确定所述DLL文件在所述内存中的实际虚拟地址,并修改地址表IAT中的导入函数的入口地址;入口函数调用单元405,用于获取DLLMain入口函数的实际虚拟地址并调用所述入口函数完成对所述DLL文件的加载。需要说明的是,作为优选,在本实施例中,所述编译单元具体为加密编译单元,用于计算DLL文件的CRC检验码,通过DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件。上述处理装置与动态链接库DLL的处理方法对应。综上所述本发明的实施例将包含有关键代码的DLL文件作为资源(具体为二进制资源)嵌入到应用程序中,在加载应用程序时,释放所述DLL文件的内容,所述DLL文件不再作为独立文件存在,而令破解者不能轻易定位所述关键代码及所述DLL文件的位置;同时,本发明中,不再直接使用LoadLibraryAPI函数加载所述DLL文件,整个加载过程以动态加载的方式进行,通过重定位DLL文件实际虚拟地址,并修改IAT表中的导入函数的入口地址,从而使得所述DLL文件中的导入函数的关键代码与所述导入函数实际所处的地址联系起来,建立动态链接,而令破解者难于判断实际加载所述DLL文件的时机和地址。进一步地,所述DLL文件可与对应的CRC校验码同时嵌入应用程序,所述DLL文件以动态形式加载,克服了现有技术中破解者利用独立存在的DLL文件以静态调试及伪造数字签名的方式加载所述DLL文件的缺陷,实现了安全加载动态链接库DLL文件的技术效果;同时,所述该方法简化了程序的发布,不再需要在发布应用程序时附带大量的DLL文件;本发明还同时公开了与所述方法对应的装置。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或
技术领域
内所公知的任意其它形式的存储介质中。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。1权利要求一种动态链接库DLL文件的处理方法,其特征在于,包括获取需加载应用程序中预先编译的二进制文件,该二进制文件由DLL文件封装而成;将所述DLL文件导入内存,确定所述DLL文件的在所述内存中的实际虚拟地址;修改地址表IAT中的导入函数的入口地址;获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载。2.根据权利要求1所述的方法,其特征在于,还包括计算DLL文件的CRC检验码,通过DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件。3.根据权利要求2所述的方法,其特征在于,所述获取需加载应用程序中预先编译的二进制文件具体为调用FindResourceAPI函数获取所述DLL文件与对应的CRC校验码所在资源;根据该资源调用LoadResource和LockResourceAPI函数获得所述DLL文件与对应的CRC校验码的所在资源的内存入口指针;依据该内存入口指针获取所述加密后的DLL文件与对应的CRC校验码。4.根据权利要求1所述的方法,其特征在于,所述将DLL文件导入所述内存中具体为通过调用VirtualAllocAPI函数分配与所述DLL文件对齐长度相等的内存,并返回所述DLL文件的内存基地址,该内存基地址存储于所述DLL文件的PE文件头中。5.根据权利要求4所述的方法,其特征在于,所述确定所述DLL文件的在所述内存中的实际虚拟地址包括从所述DLL文件的PE文件头读取所述DLL文件的基地址;通过内存的起始地址减去所述DLL文件的基地址,得到地址偏移量;从所述DLL文件的PE文件头中读取重定位表,遍历整个重定位表列举出其中需重新定位的入口地址;通过所述需要重新定位的入口地址加上所述地址偏移量得到所述DLL文件的实际虚拟地址。6.根据权利要求1所述的方法,其特征在于,所述修改地址表IAT中的导入函数的入口地址具体为读取所述PE文件头中的IAT表;遍历所述IAT表中需导入DLL文件的文件名称;调用GetModuleHandleAPI函数获得指向所述需导入的DLL文件的句柄;以所述DLL文件的句柄和导入函数的名称为参数,调用GetProcAddressAPI函数获得所述导入函数的入口地址,并以所述导入函数的入口地址修改IAT表相应的条目。7.根据权利要求1所述的方法,其特征在于,还包括调用VirtualProtectAPI函数将所述内存中所述DLL文件的执行代码的节修改为PAGE_EXECUT_READWRITE属性。8.根据权利要求7所述的方法,其特征在于,所述获取DLLMain入口函数的实际虚拟地址,调用所述入口函数完成对所述DLL文件的加载具体为读取所述DLL文件的PE头文件,获取所述入口函数的相对地址;将所述所述入口函数的相对地址与所述内存起始地址相加,得到所述入口函数的实际虚拟地址,根据所述入口函数的实际虚拟地址,以DLL_PROCESS_ATTACH参数调用该入口函数,完成加载。9.一种动态链接库DLL文件的处理装置,其特征在于,包括编译单元,用于将DLL文件封装至二进制文件中,并将该二进制文件编译至应用程序中;DLL文件提取单元,用于获取所述二进制文件中的DLL文件;内存分配单元,用于将所述DLL文件导入内存;地址确定单元,用于确定所述DLL文件在所述内存中的实际虚拟地址,并修改地址表IAT中的导入函数的入口地址;入口函数调用单元,用于获取DLLMain入口函数的实际虚拟地址并调用所述入口函数完成对所述DLL文件的加载。10.根据权利要求9所述的装置,其特征在于,所述编译单元具体为加密编译单元,用于计算DLL文件的CRC检验码,通过DES算法将包含有关键代码的DLL文件与对应的CRC校验码合并并加密后,输出至所述二进制文件。全文摘要本发明实施例公开了一种动态链接库DLL文件的处理方法和装置,所述处理方法将包含有关键代码的DLL文件作为资源(具体为二进制资源)嵌入到应用程序中,所述DLL文件不再作为独立文件存在,而令破解者不能轻易定位所述关键代码及所述DLL文件的位置;同时,本发明不再直接使用LoadLibraryAPI函数加载所述DLL文件,整个加载过程以动态加载的方式进行,通过重定位DLL文件实际虚拟地址,并修改IAT表中的导入函数的入口地址,使得所述DLL文件中的导入函数的关键代码与所述导入函数实际所处的地址联系起来,建立动态链接,而令破解者难于判断实际加载所述DLL文件的时机和地址,实现了安全加载动态链接库DLL文件的技术效果。文档编号G06F9/445GK101908119SQ20101025398公开日2010年12月8日申请日期2010年8月12日优先权日2010年8月12日发明者古勇,叶建位,苏宏业,荣冈申请人:浙江中控软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1