一种隐藏dll模块导出函数的方法

文档序号:6521226阅读:307来源:国知局
一种隐藏dll模块导出函数的方法
【专利摘要】一种隐藏dll模块导出函数的方法,包括:dll模块将原导出函数进行不导出处理;dll模块将原导出函数的指针进行加密存储;dll模块中添加一个接口,该接口是一个函数,将该函数设置为导出函数;当dll模块的调用者要使用本模块时,首先要获得dll模块提供的原导出函数声明文件,其次要获得dll模块提供的接口的声明文件,还需获得dll模块提供的解密函数方法的定义和实现算法。利用本发明,可以将原本要导出的函数,进行处理,从而不会导出函数的相关信息,提高了函数调用的安全性。
【专利说明】—种隐藏dl I模块导出函数的方法
【【技术领域】】 [0001]本发明涉及计算机软件安全【技术领域】,具体涉及一种隐藏dll模块导出函数的方法。
【【背景技术】】
[0002]dll导出函数是提供导出名字,函数指针给第3方或者程序的模块之间调用。这样容易被其他人知道,函数名,函数参数,函数代码偏移等等,如果被直接调用,dll模块的导出函数是可以使用工具查看到其导出函数名和函数地址,这样就存在一个被第三方非法调用的风险。目前的常规的保护方式是利用第三方加壳工具,对dll模块的导出函数进行加密,存在性能下降、容易崩溃,稳定性不高,而且被误报木马病毒的风险,所以此往往被大多数软件厂商弃用。
[0003]有鉴于此,本发明人针对现有技术的缺陷深入研究,遂有本案产生。

【发明内容】

[0004]本发明所要解决的技术问题在于提供一种隐藏dll模块导出函数的方法,提高了函数调用的安全性。
[0005]本发明是这样实现的:
[0006]一种隐藏dll模块导出函数的方法,包括如下步骤:
[0007]步骤1:dll模块将原导出函数进行不导出处理;
[0008]步骤2:dll模块将原导出函数的指针进行加密存储;
[0009]步骤3:dll模块中添加一个接口,该接口是一个函数,将该函数设置为导出函数;
[0010]步骤4:当dll模块的调用者要使用本模块时,首先要获得dll模块提供的原导出函数声明文件,其次要获得dll模块提供的接口的声明文件,还需获得dll模块提供的解密函数方法的定义和实现算法;
[0011]所述原导出函数声明文件,包括原函数名、函数返回值、函数参数和类型的声明;所述接口的声明文件,包括接口函数声明;
[0012]步骤5:dll模块的调用者调用dll模块提供的接口,获取原导出函数的加密指针,需在自己程序中编译dll模块提供的解密算法;
[0013]步骤6:dll模块的调用者,调用解密算法,解密获得原导出函数加密函数地址;
[0014]步骤7:dll模块的调用者,使用原导出函数,实现对原导出函数的使用。
[0015]本发明的优点在于:隐藏了 dll的导出函数,而与dll的使用者建议合法的安全通道协议,进行调用,从而避免暴露,提高了 dll模块的安全性。将原导出的dll函数不导出,而只导出一个接口,利用这个接口实现所有导出函数的对外开放,这个方法只有约定调用方知道,调用方拥有解密方法。解出方法后,得到真正的函数指针,即可实现合法调用。实现使用后自动加密,使用前自动解密,内存中不存在函数地址原文,来提高安全性。利用本方法,可以将原本要导出的函数,进行处理,从而不会导出函数的相关信息,提高了函数调用的安全性。
【【专利附图】

【附图说明】】
[0016]下面参照附图结合实施例对本发明作进一步的描述。
[0017]图1是本发明中dll模块的调用者调用dll模块提供的接口示意图。
【【具体实施方式】】
[0018]一种隐藏dll模块导出函数的方法,包括如下步骤:
[0019]步骤1:dll模块将原导出函数进行不导出处理;
[0020]步骤2:dll模块将原导出函数的指针进行加密存储;
[0021]步骤3:dll模块中添加一个接口,该接口是一个函数,将该函数设置为导出函数;
[0022]步骤4:当dll模块的调用者要使用本模块时,首先要获得dll模块提供的原导出函数声明文件,其次要获得dll模块提供的接口的声明文件,还需获得dll模块提供的解密函数方法的定义和实现算法;
[0023]所述原导出函数声明文件,包括原函数名、函数返回值、函数参数和类型的声明;所述接口的声明文件,包括接口函数声明;
[0024]步骤5:dll模块的调用者调用dll模块提供的接口,如图1所示,获取原导出函数的加密指针,需在自己程序中编译dll模块提供的解密算法;
[0025]步骤6:dll模块的调用者,调用解密算法,解密获得原导出函数加密函数地址;
[0026]步骤7:dll模块的调用者,使用原导出函数,实现对原导出函数的使用。
[0027]本发明隐藏了 dll的导出函数,而与dll的使用者建议合法的安全通道协议,进行调用,从而避免暴露,提高了 dll模块的安全性。将原导出的dll函数不导出,而只导出一个接口,利用这个接口实现所有导出函数的对外开放,这个方法只有约定调用方知道,调用方拥有解密方法。解出方法 后,得到真正的函数指针,即可实现合法调用。实现使用后自动加密,使用前自动解密,内存中不存在函数地址原文,来提高安全性。利用本方法,可以将原本要导出的函数,进行处理,从而不会导出函数的相关信息,提高了函数调用的安全性。
[0028]以上所述仅为本发明的较佳实施用例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种隐藏dll模块导出函数的方法,其特征在于:包括如下步骤: 步骤1:dll模块将原导出函数进行不导出处理; 步骤2:dll模块将原导出函数的指针进行加密存储; 步骤3:dll模块中添加一个接口,该接口是一个函数,将该函数设置为导出函数; 步骤4:当dll模块的调用者要使用本模块时,首先要获得dll模块提供的原导出函数声明文件,其次要获得dll模块提供的接口的声明文件,还需获得dll模块提供的解密函数方法的定义和实现算法; 所述原导出函数声明文件,包括原函数名、函数返回值、函数参数和类型的声明;所述接口的声明文件,包括接口函数声明; 步骤5:dll模块的调用者调用dll模块提供的接口,获取原导出函数的加密指针,需在自己程序中编译dll模块提供的解密算法; 步骤6:dll模块的调用者,调用解密算法,解密获得原导出函数加密函数地址; 步骤7:dll模块的调用者,使用原导出函数,实现对原导出函数的使用。
【文档编号】G06F21/62GK103745138SQ201310625191
【公开日】2014年4月23日 申请日期:2013年11月28日 优先权日:2013年11月28日
【发明者】李上杰, 刘德建, 陈宏展, 方振华 申请人:福建天晴数码有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1