The invention discloses a software protection method and device, wherein the method comprises the following steps: according to the.NET code to generate.NET the corresponding data structure, from the.NET data structure to be protected from code; code conversion method to convert the protected code for virtualization; location to be protected in the code extraction method add for invoking the x86/x64 virtual machine instruction code, the x86/x64 virtual machine for executing the virtualization code. The software can improve the security of the software.
【技术实现步骤摘要】
软件保护方法和装置
本专利技术涉及计算机应用技术,特别是涉及一种软件保护方法和装置。
技术介绍
.NET代码即IL代码,由.NET运行时进行解释执行,由.NET编译器将源代码编译为IL代码。通过现有工具可自动反编译IL代码并还原为源代码形式。基于上述原因,破解者通常能够还原软件的核心算法,或通过修改代码等达到破解软件的目的。目前,对.NET软件进行保护的方法有以下几种:第一种是通过对.NET符号名称进行混淆,到达反编译后难以阅读的目的。由于这种方法不能对代码逻辑进行处理,因此,可以通过对算法的分析来破解软件。第二种是对代码逻辑进行混淆。由于目前混淆的程度还比较低,算法逻辑依然可以阅读,无法抵御破解者攻击。第三种是对.NET软件进行压缩、加密,软件执行前将其解压、解密再执行.NET代码。在这种保护方式下,可以通过转存得到原始.NET代码。由此可见,上述现有的.NET软件保护方法,无法有效确保软件的安全性。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种软件保护方法和装置,可以提高软件的安全性。为了达到上述目的,本专利技术提出的技术方案为:一种软件保护方法,包括 ...
【技术保护点】
一种软件保护方法,其特征在于,包括:a、根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;b、将所述待保护的方法代码转换为虚拟化代码;c、在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
【技术特征摘要】
1.一种软件保护方法,其特征在于,包括:a、根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;b、将所述待保护的方法代码转换为虚拟化代码;c、在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。2.根据权利要求1所述的方法,其特征在于,所述调用x86/x64虚拟机的指令代码包括虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码。3.根据权利要求1所述的方法,其特征在于,所述生成相应的.NET数据结构之后还包括:将所述x86/x64虚拟机添加至所述.NET数据结构的全局数组中;将内存加载方法增加到所述.NET数据结构中,所述内存加载方法用于获取虚拟机入口地址并加载所述x86/x64虚拟机;如果所述.NET数据结构中不存在.cctor方法,则将.cctor方法添加至所述.NET数据结构中,其中,所述.cctor方法中包括第二call代码和Marshal库;所述第二call代码用于调用所述内存加载方法;所述Marshal库用于将虚拟机入口地址作为参数生成调用虚拟机的方法,并将虚拟机方法保存到全局变量中。4.根据权利要求1所述的方法,其特征在于,所述根据.NET代码,生成相应的.NET数据结构包括:获取所述.NET代码的.NET元数据;解析所述.NET元数据,根据所包含的方法函数体,生成相应的.NET数据结构。5.根据权利要求1所述的方法,其特征在于,所述步骤b具体包括:根据分块标准,将所述待保护的方法代码分成若干子代码块;将每个所述子代码块转换为虚拟化代码。6.根据权利要求5所述的方法,其特征在于,所述分块标准包括:跳转指令的目标地址作为块首,或者,Call指令的下一条指令作为块首。7.根据权利要求5所述的方法,其特征在于,所述将每个所述子代码块转换为虚拟化代码包括:将所述子代码块转换成IR指令;将所述IR指令转换为虚拟化代码,其中,所述虚拟化代码被封装成数组并且保存在全局变量中。8.根据权利要求1中所述的方法,其特征在于,步骤c之后还包括,重新编译所述.NET数据结构,利用编译后的.NET数据结构生成.NET元数据,作为所述.NET代码新的.NET元数据。9.一种软件保护装置,其特...
【专利技术属性】
技术研发人员:孙吉平,周建辉,
申请(专利权)人:北京深思数盾科技股份有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。