一种.Net程序保护方法,其特征在于,所述方法包括:步骤A:从编译好的.Net程序选取包含.Net中间语言指令的二进制代码段;步骤B:对所述二进制代码段进行变换,并从所述.Net程序中删除所述二进制代码段;步骤C:将 经过变换后的二进制代码段写入所述.Net程序的外壳程序中,并将外壳程序调用指令写入所述.Net程序中;步骤D:运行所述.Net程序,当所述.Net程序运行到所述外壳程序调用指令时,所述外壳程序调用.Net虚拟机,所述.Net虚拟机运 行经过变换后的二进制代码段。
【技术实现步骤摘要】
本专利技术涉及软件保护领域,特别涉及一种.Net程序保护方法及装置。技术背景.Net是微软的新一代技术平台,是全新的基于互联网的跨语言软件开发平台,顺应了当 今软件工业分布式计算、面向组件、企业级应用、软件服务化和以Web为中心等大趋势。.Net 并非开发语言,但是在.Net开发平台上可以支持多门开发语言。.Net最突出的一个特点是它 能够使用户通过Web与众多智能设备相交互,同时确保用户而不是应用程序控制这个交互。 这就使得微软.Net体验是极具个性化、综合化的体验,这种体验通过与XML Web服务相连 的智能设备来实现。这些智能设备是一种具有Web功能的工具,如个人电脑、掌上电脑、智 能电话,在这些设备中配上软件,这些软件使得它们在与用户、网络、信息及其它设备和服 务的交互过程中更加智能化。.Net语言的编译分为两个阶段,首先高级语言被编译成一种称作IL (中间代码)的中间语 言,与高级语言相比,IL更像是机器语言,然而,IL却包含一些抽象概念(比如类、异常), 这也是这种语言被称为中间语言的原因。高级语言在初次被编译时,编译器做两件事首先 把编译得到的IL存储在DLL或EXE中,然后为类的每个方法创建一个stub函数,此函数会调用 即时编译器,并将自身的地址作为参数传给编译器。即时编译器则从DLL或EXE中获取相应 的IL,编译成机器语言,并将内存中的原零时调用函数替换成机器语言。stub函数再调用编译 器,将自身编译为本地机器语言。JIT是一个典型的即时编译器,JIT编译器在每段代码执行 前进行编译,编译的结果为本地静态机器码,如x86指令程序的运行环境下的机器码。所谓虚拟机,可以把它想象成一台用软件来模拟的机器,在这台机器里有处理器、内存、 寄存器等各种硬件,模拟执行各种指令,在这台机器上运行的软件对运行环境没有特殊要求, 所以虚拟机对在它上运行的程序是透明的。例如,x86虚拟机模拟的是x86指令程序的运行 环境,c51虚拟机模拟的是c51指令程序的运行环境。编译过程是指将某高级语言编写的源程序翻译成与之等价的低级语言(汇编语言或机器 语言)的目标程序的过程。反编译可以看成是编译的逆过程,即将以机器语言形式存在的目标代码翻译成与其功能等价的汇编语言形式或髙级语言形式的代码的过程。指令变换是指将一 种平台的目标指令根据程序执行的逻辑转换成另一种平台的目标指令的过程。.Net上最突出的架构特性在提供了超乎寻常的便利的同时,也带来了一个非常敏感的缺点 一.Net程序集可被非常容易地反编译。针对易反编译这一缺点,现有技术中有很多.Net中间 代码的解决方案,但效果并不理想。因为这些解决方案除了降低反编译后代码的可阅读性外, 并没有达到真正反编译效果。混淆过的源代码仍然可以被轻易反编译后完全暴露在有不良企 图的攻击者面前。即使开发商采用非常强大的加密算法,但是由于最终运行时还是会将其解 密后在计算机内存中运行,所以很容易被解密者获取。目前针对.Net程序的纯软件保护方法,整个过程都在计算机内完成,具体实现步骤如下1) 将.Net程序经过反编译生成IL文本文件;2) 开发商改写IL文本文件,在需要保护的内容之外加入解密函数;3) 将改写后的IL文本经过编译生成可以在.Net平台上执行的二进制指令;4) 通过软件对二进制指令文件中需要保护的部分进行加密;5) 运行时通过事先写入的解密函数对加密的二进制指令进行解密,从而实现对该.Net 程序的保护。所谓"外壳"就是给可执行的文件加上一个外壳。用户执行的实际上是这个外壳的程序, 而这个外壳程序负责把用户原来的程序在内存中解开压縮,并把控制权交还给解开后的真正 的程序,由于一切工作都是在内存中运行,用户根本不知道也不需要知道其运行过程,并且 对执行速度没有什么影响。如果在外壳程序中加入对软件锁或钥匙盘的验证部分,它就是我 们所说的外壳加密了。外壳对程序进行压縮或根本不压縮,外壳主要特点在于反跟踪、加密 代码和数据、保护程序数据的完整性,确保程序代码不被黑客修改或者被人跟踪调试。现有技术中,常利用硬件设备来实现.Net程序的保护方法,即从.Net程序文件中提取部 分代码至加密装置中,通过.Net程序文件中的代码分解为两部分, 一部分代码在加密装置中 运行,其余部分代码在计算机中运行,以实现.Net程序保护的目的。目前,比较高端的加密 装置是可编程的,利用其实现程序保护包含两部分内容, 一部分是将被保护的程序中的关键 代码存储到加密装置内,另一部分是实现计算机内的被保护的程序与信息安全设备之间的通 信。这就要求编写外壳程序调用指令,被保护的程序通过调用API (ApplicationProgramming Interface,应用程序编程接n)实现与加密装置的通信,其中API就是系统不同组成部分衔 接的约定,是应用程序用来与硬件系统交换信息和命令的程序接口。加密装置生产商会在较 高端的硬件设备中实现某种虚拟机功能,那么便可以在加密装置中直接运行与实现的虚拟机 相对应格式的代码。然而用硬件实现软件程序的保护方法,其弊端在于保护范围小,保护强度及可控性低, 每次运行的程序代码受到限制,使得通过硬件加密来实现程序保护变得较为烦琐。另一方面,传统技术中,基于软件方式来实现.Net的代码保护中,由于受保护的.Net程序会在计算机的 内存中重现,使得.Net程序在内存中容易被破解,这就在一定程度上给.Net程序的保护带来 了风险。
技术实现思路
为了解决通过硬件加密来实现.Net程序保护的繁琐性,以及通过软件方式实现.Net程序 保护在内存中容易被破解的问题,本专利技术提供了一种.Net程序保护方法,所述方法包括步骤A:从编译好的.Net程序选取包含.Net中间语言指令的二进制代码段;步骤B:对所述二进制代码段进行变换,并从所述.Net程序中删除所述二进制代码段;步骤C:将经过变换后的二进制代码段写入所述.Net程序的外壳程序中,并将外壳程序 调用指令写入所述.Net程序中;步骤D:运行所述.Net程序,当所述.Net程序运行到所述外壳程序调用指令时,所述外 壳程序调用.Net虚拟机,所述.Net虚拟机运行经过变换后的二进制代码段。所述步骤A具体为计算机根据编译好的.Net程序中二进制代码段的重要性自动选取包 含.Net中间语言指令的二进制代码段,或者人工从编译好的.Net程序中选取包含,Net中间语 言指令的二进制代码段。所述步骤B中对所述二进制代码段进行变换的步骤具体为对所述二进制代码段进行逻 辑变换,并对经过逻辑变换的二进制代码段进行加密或压縮。所述步骤B中对所述二进制代码段进行变换的步骤具体为对所述二进制代码段进行逻 辑变换,或者对所述二进制代码段进行加密或压縮。所述逻辑变换包括代码段的指令互换、指令乱序或重新编码。所述步骤C中将外壳程序调用指令写入所述.Net程序中的步骤具体为将外壳程序调用 指令写入所述二进制代码段在所述.Net程序中对应的位置。 所述步骤D具体包括步骤D1:运行所述.Net程序,当所述.Net程序运行到所述外壳程序调用指令时,所述外 壳程序调用指令调用所述外壳程序;步骤D2:所述外壳程序调用.Net虚拟机; 步骤D3:所述.Net虚拟机本文档来自技高网...
【技术保护点】
一种.Net程序保护方法,其特征在于,所述方法包括:步骤A:从编译好的.Net程序选取包含.Net中间语言指令的二进制代码段;步骤B:对所述二进制代码段进行变换,并从所述.Net程序中删除所述二进制代码段;步骤C:将 经过变换后的二进制代码段写入所述.Net程序的外壳程序中,并将外壳程序调用指令写入所述.Net程序中;步骤D:运行所述.Net程序,当所述.Net程序运行到所述外壳程序调用指令时,所述外壳程序调用.Net虚拟机,所述.Net虚拟机运 行经过变换后的二进制代码段。
【技术特征摘要】
【专利技术属性】
技术研发人员:陆舟,于华章,
申请(专利权)人:北京飞天诚信科技有限公司,
类型:发明
国别省市:11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。