一种在安全环境中生成代码提高软件保护强度的方法技术

技术编号:8705127 阅读:186 留言:0更新日期:2013-05-16 19:18
本发明专利技术公开了一种基于运行时在安全环境中生成动态代码的软件保护方法,通过在安全环境中即时生成与非安全运行环境相关的代码,在非安全运行环境中运行生成的代码,从而提高软件调试和分析的难度,还可以避免使用安全环境运行代码引起的性能损失,本方法基本没有性能损失,且能够提供较好的安全性,具有非常大的实用价值。

【技术实现步骤摘要】

本专利技术涉及软件版权保护技术,特别涉及到基于即时编译的软件保护方法。
技术介绍
计算机软件由于具有数字化的特征,因此很容易被复制和非法使用,软件保护技术就是用来保护软件版权、避免软件被非法使用的技术。针对计算机软件进行破解的主要方法就是调试,通过调试了解软件运行的流程和逻辑,然后加以篡改,实现对软件破解,由于运行计算机软件的计算机硬件和操作系统平台信息是公开的,并且都提供了对调试器的支持以便进行正常的软件调试,因此,在这种环境下很难避免软件被调试,所以,软件保护的一个重要发展方向就是构造安全的运行环境,在安全环境中运行软件的部分代码,这样,针对软件进行分析就必须先分析出安全环境,提高了破解的难度。例如常见的虚拟机保护技术,使用未公开架构的虚拟机来运行软件的部分代码,破解者要调试这部分软件代码就必须分析出虚拟机的指令集。安全环境显著提高了软件调试的难度,特别是对于将安全环境置于智能卡硬件或者远程服务器的情况,几乎不可能对受保护的部分进行调试,从而可以实现非常高的保护强度。然而,由于构造安全环境要比构造普通的环境考虑的情况更加复杂,在安全环境中运行代码的速度会大幅度降低,例如某些虚拟机保护方法甚至会使软件的运行速度下降1000倍以上,且如果软件本体和在安全环境中运行的代码之间相互访问频繁的情况下,软件的运行效率还会降低,从而降低安全环境这种软件保护方式的可用性。
技术实现思路
本专利技术提供一种在安全环境中生成代码提高受保护软件保护强度的方法,所述安全运行环境是可运行代码、具有安全防范功能、难以进行调试的计算机运行环境, 其中所述安全环境中运行代码生成模块,所述代码生成模块根据源输入逻辑描述生成对应逻辑的可执行代码;其中,所述受保护软件中具有调用模块; 所述方法包括如下步骤: 抽取受保护软件中的部分代码; 将所述部分代码转换为源输入逻辑描述; 在所述受保护软件中被抽取代码的位置插入调用模块; 当所述受保护软件运行到被抽取代码的位置时,所述调用模块将调用安全环境,报告运行环境信息; 所述安全环境中的所述代码生成模块根据所述运行环境信息生成与所述运行环境相关的执行代码; 将生成的与运行环境相关的所述执行代码填充到所述被抽取代码的位置; 所述受保护软件执行所述执行代码。根据本专利技术的一个方面,所述安全环境包括但不限于虚拟机、智能卡、远程服务器。根据本专利技术的一个方面,每次生成的执行代码不完全相同。根据本专利技术的一个方面,所述生成的执行代码是完成相同的功能的等效代码。根据本专利技术的一个方面,在执行完所述执行代码之后,将受保护软件中的这部分生成的执行代码清除。附图说明附图1为按照本专利技术的在安全环境中生存代码的软件保护方法的一优选实施例的流程示意图。具体实施例方式为使本专利技术的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本专利技术进一步详细说明。有鉴于此,本专利技术提供了一种利用安全环境动态生成软件代码的软件保护方法和系统,可以在基本不影响软件运行效率的情况下获得相对较高的安全性。本专利技术包括安全运行环境,运行在安全环境中的代码生成模块,受保护软件中加入的调用模块。所述安全运行环境是可运行代码,但是具有安全防范功能、难以进行调试的计算机运行环境,例如运行在受保护软件所在进程中的虚拟机、智能卡、远程服务器等。所述代码生成模块可以根据源输入逻辑描述生成对应逻辑的可执行代码。所述受保护软件中的调用模块用于替代被抽取的代码,当运行到被抽取代码的位置时,调用模块调用安全环境,提交运行环境信息。步骤A,将受保护软件中的部分代码抽取出来,并转换为代码生成模块的源输入逻辑描述,而且在被抽取代码的位置插入调用模块。步骤B,当受保护软件运行到被抽取代码的位置时,调用模块将调用安全环境,报告运行环境信息,安全环境中的代码生成模块根据运行环境信息生成与运行环境相关的执行代码。步骤C,将生成的代码填充到被抽取的位置,软件执行此代码。其中,根据本专利技术的一种实施方式,在上述步骤B中,每次生成的代码可以不完全相同,例如用等效的指令完成相同的功能,使用不同的优化方式,这可以增加调试和分析的难度。其中,根据本专利技术的一种实施方式,在步骤C之后,还存在步骤D,执行完生成的代码之后,将受保护软件中的这部分生成的代码清除,降低被调试和分析的风险。其中,根据本专利技术的一种实施方式,受保护软件中的调用模块可通过其他方式替代,比如通过加载器的方式来加载执行。运行环境相关的代码指的是所述代码运行依赖当前运行环境,一旦环境变化,代码就不能运行,例如代码中可以有当前CPU的特有指令(比如CPU型号等与当前计算机相关信息),或者使用绝对文件存储位置(比如文件在硬盘盘符下的绝对路径),通过多种此类方法的组合使用之后,其他计算机运行这些代码几乎是不可能的,甚至同一台机器重新运行都可能存在问题。本实施例中安全环境是远程服务器。本实施例中在服务器内部生成执行代码,服务器外部不知道具体代码信息,也不知道相关代码生成规则,并且每次都是由服务器根据环境相关信息生成的代码,而且服务器端处于远程,无法对服务器进行调试,因此远程服务器是安全的运行环境。代码生成模块使用开源的GCC,(S卩,GNU Compiler Collection,中文术语为GNU编译器套装,是一套由GNU开发的编程语言编译器),相对应的,从受保护软件中抽取的代码用GCC的源文件方式保存在远程服务器上。根据本专利技术的一个实施方式,所述抽取操作可以根据指定的方式进行自动抽取或者进行人工抽取。根据本专利技术的一个实施方式,可按照C语言原始程序.c格式保存。根据本专利技术的一个实施方式,另外也可以根据需求或规划自行定制保存位置。根据本专利技术的一个实施方式,假设要保护的软件中存在如下函数代码: int foo(int a){b = a + I;return b;} 此时需要保护“b = a + 1;”,同时将% = a + I;”在该函数代码中原来的位置处替换为对安全环境的调用secureCallO。一旦替换之后,则该函数代码变为:int foo(int a){ secureCall () ; /* 调用安全环境*/ return b;} 其中,secureCall ()函数内部功能如下: 发送环境信息 接收字节码 执行字节码 当软件运行到secureCall ()的时候,secureCall ()负责和安全环境通信。根据本专利技术的一个实施方式,首先secureCall ()调用安全环境,向安全环境报告原受保护软件的运行环境信息(如操作系统信息、地址、CPU型号等特有指令信息),安全环境中代码生成模块根据接收到的运行环境信息生成与运行环境相关的执行代码,然后seacureCall ()内部接收该执行代码并将代码填充到被抽取的位置,继而软件顺序执行此代码。此时,代码生成器GCC将“b = a + I ; ”编译成合适的目标平台代码,比如,根据本专利技术的一个实施方式,代码生成器GCC编译成的代码与原受保护软件的运行环境一致,比如在x86机器上将代码编译生成对应的可执行的x86指令。secureCall ()通过调用安全环境取得由安全环境生成并返回的与运行环境相关的执行代码,然后将这些执行代码放在本地的内存中本文档来自技高网...

【技术保护点】
一种在安全环境中生成代码提高受保护软件保护强度的方法,所述安全运行环境是可运行代码、具有安全防范功能、难以进行调试的计算机运行环境,其中所述安全环境中运行代码生成模块,所述代码生成模块根据源输入逻辑描述生成对应逻辑的可执行代码;其中,所述受保护软件中具有调用模块;所述方法包括如下步骤:抽取受保护软件中的部分代码;将所述部分代码转换为源输入逻辑描述;在所述受保护软件中被抽取代码的位置插入调用模块;当所述受保护软件运行到被抽取代码的位置时,所述调用模块将调用安全环境,报告运行环境信息;所述安全环境中的所述代码生成模块根据所述运行环境信息生成与所述运行环境相关的执行代码;将生成的与运行环境相关的所述执行代码填充到所述被抽取代码的位置;所述受保护软件执行所述执行代码。

【技术特征摘要】

【专利技术属性】
技术研发人员:不公告发明人
申请(专利权)人:北京深思洛克软件技术股份有限公司
类型:发明
国别省市:北京;11

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

1