[发明专利]保护.NET软件安全的方法和设备有效
申请号: | 201310100253.1 | 申请日: | 2013-03-26 |
公开(公告)号: | CN103186730A | 公开(公告)日: | 2013-07-03 |
发明(设计)人: | 孙吉平;韩勇 | 申请(专利权)人: | 北京深思数盾科技有限公司 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 北京金信立方知识产权代理有限公司 11225 | 代理人: | 黄威;胡上海 |
地址: | 100872 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 保护 net 软件 安全 方法 设备 | ||
技术领域
本发明涉及计算机及通信技术领域,具体涉及一种保护.NET软件安全的方法和设备,加强对可执行文件与本地动态链接库文件之间的接口的安全保护,防止被破坏。
背景技术
很多.NET软件都包含一些可执行程序(托管代码的.exe文件)和本地动态链接库文件(如.dll等格式的文件)。软件在运行时可执行程序调用动态库中导出的接口以执行只有本地代码才能实现的功能。由于它们之间是动态链接,因此导出接口是通过函数名称和函数原形(签名)相关的机制来实现,每一个导出函数都有一个对应的本地(PInvoke)方法,在.NET托管代码中通过调用本地方法来调用对应的导出函数。
由于.NET可执行程序和动态链接库之间的接口是以函数名称和签名来实现的,而目前的代码保护主要都是单纯保护.NET可执行程序,或者单纯保护动态链接库中的本地代码,对它们之间的接口的保护很少涉及,这些接口暴露出来的信息很可能被破解者用来探测和发现软件的逻辑和流程,从而对软件造成破坏。
发明内容
为了解决上述技术问题,本发明所要解决的技术问题是提供一能对软件的可执行程序和动态链接库之间的导出接口进行保护,提高.NET软件安全性的方法和系统。
为了解决上述技术问题,本发明提供了一种保护.NET软件安全的方法,包括如下步骤:
查找步骤:从所述.NET软件中的动态链接库文件中查找出所有导出函数并建立导出函数表;
核对步骤:如果所述.NET软件中的可执行文件中有对本地方法的调用,则核对所述调用所对应的导出函数的名称是否在上述导出函数表中,如在,则将所述本地方法的相关参数存储于所述导出函数表中,如果所述.NET软件中的可执行文件中没有所述对本地方法的调用,则执行下述替换步骤;
改写步骤:生成派遣代码片段,替换所述可执行文件中的对所述本地方法的调用的代码,并返回所述核对步骤,其中所述派遣代码片段用于调用统一导出函数:
替换步骤:生成所述统一导出函数,并将所述动态链接库文件中的所有导出函数的名称替换为所述统一导出函数的名称,所述统一导出函数用于跳转到原导出函数。
作为优选,在所述查找步骤中:
为每个导出函数分配一个索引值以建立所述导出函数表,并将导出函数的名称与索引值对应存储,所述导出函数表以数据库的表的形式或者以文件的形式存储。
作为优选,在所述核对步骤中:如果核对所述调用所对应的导出函数的名称不在所述导出函数表中,则继续查找所述.NET软件中的可执行文件中的下一个对本地方法的调用。
作为优选,在所述核对步骤中:所述本地方法的相关参数包括签名、返回值和参数类型,其中,根据可执行文件的.NET元数据表中所记录的所述本地方法的签名获得该本地方法的返回值和参数类型。
作为优选,在所述改写步骤中:所述派遣代码片段将所述统一导出函数所代替的原导出函数在所述导出函数表中的索引值及所传入的参数封装为一个字节数组作为所述统一导出函数的参数。
作为优选,在所述替换步骤中:所述统一导出函数从其参数中提取出原导出函数的索引值和原导出函数的参数,然后跳转到原导出函数。
作为优选,在所述替换步骤之后,执行属性修改步骤:将所述动态链接库文件中的原导出函数的属性修改为不可导出。
作为优选,在所述改写步骤中,还包括将所述字节数组加密的步骤。
作为优选,在所述查找步骤或所述核对步骤中还包括对所述导出函数表加密的步骤。
作为优选,所述动态链接库文件包括.dll格式的文件,所述可执行文件包括.exe格式的文件。
本发明还提供了一种保护.NET软件安全的设备,包括:
查找模块,用于从所述.NET软件中的动态链接库文件中查找出所有导出函数并建立导出函数表;
核对模块,在确认所述.NET软件中的可执行文件中有对本地方法的调用时,所述核对模块核对所述调用所对应的导出函数的名称是否在上述导出函数表中,如在,则将所述本地方法的相关参数存储于所述导出函数表中;
改写模块,用于生成派遣代码片段,替换所述可执行文件中的对所述本地方法的调用的代码,其中所述派遣代码片段用于调用统一导出函数:
替换模块,当所述核对模块确认所述.NET软件中的可执行文件中没有所述对本地方法的调用时,所述替换模块生成所述统一导出函数,并将所述动态链接库文件中的所有导出函数的名称替换为所述统一导出函数的名称,所述统一导出函数用于跳转到原导出函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京深思数盾科技有限公司,未经北京深思数盾科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310100253.1/2.html,转载请声明来源钻瓜专利网。