一种对.NET可执行程序进行保护的方法和系统技术方案

技术编号:10265252 阅读:147 留言:0更新日期:2014-07-30 12:45
本发明专利技术公开了一种对.NET程序进行保护的方法及系统。该方法首先采用元数据API来分析.NET程序的结构,分析出程序中引用程序集、程序集、类和类中的方法,以及类中的方法的参数、返回值、IL指令等信息。其次由用户选择需要保护的方法,保护系统生成需要保护的方法的代理类,保护系统对需要保护的方法的IL指令进行加密。再次,保护系统创建保护后的方法,将加密后的IL指令以局部变量的形式存储在保护后的方法中,保护后的方法主要功能是创建动态方法、解密IL指令、设置动态方法的IL指令、创建动态方法的代理类、通过代理类调用动态方法,最后,将引用程序集、程序集、代理类及保护后的方法等信息注入到保护后的程序中。

【技术实现步骤摘要】
一种对.NET可执行程序进行保护的方法和系统
本专利技术涉及信息安全
,特别涉及一种对.NET可执行程序进行保护的方法和系统。
技术介绍
.NET是微软公司用来实现XML、WebServices、SOA(面向服务的体系结构service-orientedarchitecture)和敏捷性的技术。技术人员一般将微软看成一个平台厂商。微软搭建技术平台,而技术人员在这个技术平台之上创建应用系统。从这个角度,.NET也可以如下来定义:.NET是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的、联通的、适应变化的、稳定的和高性能的。从技术的角度,一个.NET应用是一个运行于.NETFramework之上的应用程序。更精确的说,一个.NET应用是一个使用.NETFramework类库来编写,并运行于公共语言运行时CommonLanguageRuntime之上的应用程序。如果一个应用程序跟.NETFramework无关,它就不能叫做.NET程序。比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAPSDK调用一个WebService也不是.NET应用。.NET是基于Windows操作系统运行的操作平台,应用于互联网的分布式。在信息安全领域中,软件作为一种宝贵的财富,软件的安全性越来越受到单位、企业和个人的关注。.NET是作为微软的新一代技术平台,.NET统一了编程语言,无论程序使用C#,还是C++、VB编写,程序最终都会编译为.NET中间语言MSIL(MicrosoftIntermediateLanguage)。MSIL是将.NET代码转化为机器语言的一个中间过程,它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一个.NET程序时,编译器将源代码翻译成Microsoft中间语言(MSIL),它是一组可以有效地转换为本机代码且独立于CPU的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种实时编译器,因此同一段MSIL代码可以被不同的编译器实时编译并运行在不同的结构上。从理论上来说,MSIL将消除多年以来业界中不同语言之间的纷争。在.NET的世界中可能出现下面的情况,一部分代码可以用EFFIL实现,另一部分代码使用C#或VB.NET完成,但是最后这些代码都将被转换为中间语言。这给程序员提供了极大的灵活性,程序员可以选择自己熟悉的语言,并且再也不用为学习不断推出的新语言而烦恼了。编译为托管代码时,编译器将源代码翻译为Microsoft中间语言(MSIL),这是一组可以有效地转换为本机代码且独立于CPU的指令。MSIL包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。要使代码可运行,必须先将MSIL转换为特定于CPU的代码,这通常是通过实时(JIT)编译器来完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种JIT编译器,因此同一组MSIL可以在所支持的任何结构JIT上编译和运行。编译后的.NET运行时,由虚拟机执行引擎把中间语言代码转换为机器代码。虽然.NET提供了便利,但.NET编译后的程序集非常容易被反编译,比如利用Reflector工具几乎可以生成.NET程序的源代码。Reflector是由微软员工LutzRoeder编写的免费程序。Reflector的出现使.NET程序员眼前豁然开朗,因为这个免费工具可以将.NET程序集中的中间语言反编译成C#或者VisualBasic代码。除了能将IL(IntermediateLanguage,中间语言)转换为C#或VisualBasic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持。目前对于.NET程序集的保护主要是基于纯软件的保护技术,常见的.NET保护软件有.NETReactor、Dotfuscator等。基于纯软件的保护方法抗分析性较差。.Net自带工具Dotfuscator是领先的.NET模糊处理程序、压缩程序和水印处理程序,它有助于保护程序,使之免遭反向工程处理,同时使程序更小巧且更高效。DotfuscatorProfessionalEdition4.9旨在阻止各种反编译器生成有用的输出,即便是那些最好的反编译器也不例外。它提供了全面、高效的.NET代码开发和部署过程。元数据API是微软提供的一套非托管API,它的功能是可以读写程序集中的元数据,可操作的对象囊括了元数据的各个方面,比如可以是逻辑结构上的程序集、类、方法等。利用元数据API可以很方便的对.NET程序集进行分析和修改。元数据用于描述公共语言运行库(CLR)在JIT编译Microsoft中间语言(MSIL)、加载类、执行代码以及与COM传统型或本机领域进行交互时使用的运行库类型(类、接口和值类型)、字段、方法以及内部实现和布局信息。元数据包括在每个CLR组件中,并可供运行库、工具和服务使用。对元数据的所有操作都通过元数据API执行,这些API将客户端(工具和服务)与基础数据结构隔离,实现了一种可插入的持久性格式体系结构,这种体系结构允许运行库的二进制表示形式、COM传统型类型库和其他格式以透明方式出入内存。元数据API包括发出(即生成)和导入元数据的接口。客户端可通过下列方式发出或导入元数据:编译器和工具通过调用“发出”API发出元数据。元数据在编译和链接过程中发出。在生成组件或应用程序的过程中,RAD(RapidApplicationDevelop,快速应用开发)工具将发出元数据。API向内存中数据结构写入数据并从中读取数据。在保存时,这些内存中结构将被压缩并以二进制格式保存到目标编译单元(.obj文件)、可执行文件(.exe文件)或独立元数据二进制文件中。在通过链接多个编译单元来形成EXE或DLL文件时,“发出”API将提供相应的方法,用于将每个编译单元中的元数据合并为一个集成的元数据二进制文件。在导入元数据时,加载程序及其他运行库工具和服务将调用“导入”API来获取有关组件的信息,以便可以完成加载和激活等任务。基于硬件的.NET保护方法,主要是从.NET程序文件中提取部分代码到软件保护装置(下文也称为“保护装置”)中,这样一部分代码在计算机中执行,另外一部分在保护装置中模拟执行。基于硬件的保护方法可以移植的代码指令有限,受限于硬件的保护装置的空间限制,移植的代码的数量也有限。而软件保护装置是一种通过计算机接口(包括但不限于并口或者USB接口)连接到计算机主机上的硬件设备。该设备内部具有非易失性存储空间可供读写,通常还具有单片机或者微处理控制芯片等计算处理单元。软件开发者可以通过接口函数和软件保护装置进行数据交换(即对软件保护装置进行读写),来检查软件保护装置是否插在接口上;或者直接用软件保护装置附带的工具进行加密。这样,软件开发者可以在软件中设置多处软件锁,利用软件保护装置作为钥匙来打开这些锁;如果没插软件保护装置或软件保护装置不对应,软件将不能正常执行。此外,软件保护装置内部包含特定的功能,例如一部分存储空间本文档来自技高网...
一种对.NET可执行程序进行保护的方法和系统

【技术保护点】
一种对.NET程序进行保护的方法,该方法的步骤包括:分析.NET程序中引用程序集信息、程序集信息、类及类中的方法,分析类中的方法中的返回值、参数、IL指令等信息;用户选择需要保护的方法;根据需要保护的方法的参数、返回值,生成保护后方法的代理类;根据需要保护的方法的IL指令,对IL指令采用保护装置进行加密;对需要保护的方法进行保护;将程序中的引用程序集信息、程序集信息、方法的代理类、保护后的方法等信息注入到保护后的.NET程序中。

【技术特征摘要】
1.一种对.NET程序进行保护的方法,该方法的步骤包括:分析.NET程序中引用程序集信息、程序集信息、类及类中的方法,分析类中的方法中的返回值、参数、IL指令;用户选择需要保护的方法;根据需要保护的方法的参数、返回值,生成保护后方法的代理类;根据需要保护的方法的IL指令,对IL指令采用保护装置进行加密;对需要保护的方法进行保护;将程序中的引用程序集信息、程序集信息、方法的代理类、保护后的方法注入到保护后的.NET程序中;其中,对需要保护的方法进行保护具体包括:根据方法的参数、返回值创建一个动态方法对象,将加密后的IL指令作为一个数组存储在保护后的方法中,调用保护装置对加密后的IL指令进行解密,设置动态方法的IL指令,创建动态方法的代理类,通过代理类调用动态方法。2.一种对.NET程序进行保护的系统,所述系统包括:保护装置、分析模块、保护模块、注入模块;其中:保护装置,提供软件、数据保护功能;分析模块,对.NET程序进行分析;保护模块,对需要保护的方法的IL指令利用保护装置进行加密,生成保护后方法的签名信息,设置保护后方法的局部变量信息和保护后方法的IL指令;注入模块,将分析模块和保护模块得到的内容注入到保护后的.NET程序中;其中所述保护模块,对需要保护的方法的IL指令利用保护装置进行加密;生成保护后方法的签名信息,根据保护前方法的签名信息,设置保护后的方法的签名信息,使保护前后方法的签名信息保持一致;设置保护后方法的局部变量信息;设置保护后方法的IL指令,保护后方法的IL指令主要功能为:获取保护前的方法的参数的类型信息,并保存到参数类型数组中,获取保护前方法的返回值类型信息,并保存到返回值类型信息方法中,根据保护前方法的参数类型信息、返回值类型信息创建一个动态方法对象,将创建的动态方法对象保存到动态方法对象变量中,将加密后的IL指令依次存储到加密后的IL指令数组变量中,调用保护装置对加密后的IL指令进行解密,设置动态方法的IL指令,创建动态方法的代理类,并将代理类信息保存到代理变量中,通过代理类调用动态方法,达到执行原方法逻辑的目的。3.如权利要求2所述的系统,其中所述保护装置为具有智能卡芯片的信息安全设备,提供软件、数据保护功能。4.如权利要求2或3所述的系统...

【专利技术属性】
技术研发人员:孙吉平韩勇
申请(专利权)人:北京深思数盾科技有限公司
类型:发明
国别省市:北京;11

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

1