一种使用软件保护装置存储程序代码实现软件保护的方法转让专利
申请号 : CN200810103665.X
文献号 : CN101261664B
文献日 : 2010-07-07
发明人 : 孙吉平 , 韩勇
申请人 : 北京深思洛克软件技术股份有限公司
摘要 :
权利要求 :
1.一种使用软件保护装置存储程序代码实现软件保护的方法,其特征在于,该方法包括步骤:A、将受保护软件的可执行程序的若干段代码段数据和起始地址存储到软件保护装置中;
B、在受保护软件中擦除上述代码段数据;
C、在代码段起始位置处写入调用软件保护装置的指令;
D、当软件运行到某个已转移存储到软件保护装置中的被保护代码段时,将所述代码段的起始地址发送给软件保护装置;其中,通过执行预先写入的调用软件保护装置的指令,计算被保护代码段的起始地址,然后将其发送到软件保护装置中;
E、软件保护装置返回相应的代码段数据;其中,软件保护装置根据被保护代码段的起始地址找到已存储的代码段数据,返回给软件;
F、软件将代码段数据存储到内存中,并执行该代码段数据;其中,软件首先分配一块内存,然后将软件保护装置返回的代码段数据存储到所述内存中;
G、执行完成后擦除内存中所述代码段数据;
在上述步骤中,被存储的代码段数据以密文形式从软件保护装置发送到软件,须解密后才可被软件执行。
2.根据权利要求1所述的方法,其特征在于,解密密钥是软件与软件保护装置协商建立的动态会话密钥。
3.根据权利要求1所述的方法,其特征在于,被存储的代码段数据中包含对软件保护装置的再次调用。
4.根据权利要求3所述的方法,其特征在于,软件正常运行时,首先从软件保护装置中读取被存储的代码段数据,在执行所述代码段数据时再次调用软件保护装置的功能。
5.根据权利要求4所述的方法,其特征在于,在上述二次调用软件保护装置的功能时,传入参数由软件保护装置在返回所述代码段数据时动态生成。
6.根据权利要求5所述的方法,其特征在于,软件保护装置在处理上述二次调用时,检查传入参数的合法性。
7.根据权利要求1所述的方法,其特征在于,在上述步骤A中还包括:由软件开发商选取受保护软件的若干段代码,标记代码段的起始和结束位置并计算其长度,将代码段数据和起始地址存储到软件保护装置中。
8.根据权利要求7所述的方法,其特征在于,还包括:软件开发商将上述受保护软件和软件保护装置发布给授权的软件用户。
9.根据权利要求7所述的方法,其特征在于,还包括:软件调用解密后的代码段中的功能函数,执行完功能函数后擦除内存数据并释放内存。
10.根据权利要求9所述的方法,其特征在于,还包括:功能函数中包含对软件保护装置的进一步调用,同时调用的参数是由软件保护装置在返回被存储的代码段数据时动态设定的。
说明书 :
技术领域
本发明涉及软件保护技术,特别涉及一种使用软件保护装置存储程序代码实现软件保护的方法。
背景技术
采用软件保护装置进行软件保护的通常的方法是将其视作一个与受保护软件并行的运算平台,将软件中的一部分功能移植到软件保护装置中实现,在软件运行时调用这些功能。软件破解者的目的是使得被保护软件在没有连接软件保护装置时也能正常工作,或者制造可以克隆软件保护装置功能的硬件装置。理想情况下,受保护软件的运行依赖于软件保护装置提供的预算功能,而破解者又无法复制软件保护装置,因此可以很好的保护软件。
为了达到一定的保护强度,被移植的功能应该是一定复杂性、且非常见的算法,而且输入输出的数据空间必须足够大,同时又适合在软件保护装置中有限的存储和计算条件下运行。在实际情况中要找到软件中满足上述要求的功能模块并非易事,通常要在安全强度和运行效率之间权衡。另外,由于软件保护装置和PC主机是完全不同的硬件运算平台,软件开发商需要将原先在PC上的功能在软件保护装置的开发平台上重新编程实现,具有一定的技术难度,因此提高了软件开发和维护成本。
发明内容
参见图1,利用软件保护装置存储程序代码进行软件保护的方法,具体包括:
步骤101,从受保护软件的可执行程序文件中选取若干代码段,将代码段数据和起始地址存储到软件保护装置中,擦除代码段内容,并在代码段起始处写入调用软件保护装置的指令。
步骤102,软件运行到被保护代码部分时执行预先写入的调用软件保护装置的指令,计算被保护代码段的起始地址,将其发送到软件保护装置中。软件保护装置根据被保护代码段的起始地址找到已存储的代码段数据,返回给软件。
步骤103,软件分配一块内存,将软件保护装置返回的代码段数据存储到该内存中,调用其中的入口函数实现受保护功能,完成后擦除并释放该块内存。
在上述过程中,为了进一步提高软件保护强度,可以采用以下措施:
1.被存储的代码以密文形式从软件保护装置发送到软件,须解密后才可被执行,因此防止了破解者通过监控和记录通信数据获得被存储代码的方法。
2.进一步,解密密钥是软件与软件保护装置协商建立的动态会话密钥,保证了每次取回的代码数据密文都不相同。
3.被存储的代码中可以包含对软件保护装置的再次调用,因此软件要正常运行,首先要从软件保护装置中读取被存储代码,而在执行该段代码时仍需要调用软件保护装置的功能,这种二次调用方式可以有效的防止破解者复制被存储代码。
4.进一步,在上述二次调用软件保护装置功能时传入的参数是由软件保护装置在返回该段代码时动态生成的,软件保护装置在处理二次调用时检查传入参数的合法性,这样保证了软件每次执行的被移植代码是不同的,并且与软件保护装置结合紧密。
根据本发明的一个方面,提供一种使用软件保护装置存储程序代码实现软件保护的方法,该方法包括步骤:
A、将受保护软件的可执行程序的若干段代码段数据和起始地址存储到软件保护装置中;
B、在受保护软件中擦除上述代码段数据;
C、在代码段起始位置处写入调用软件保护装置的指令;
D、当软件运行到某个已转移存储到软件保护装置中的被保护代码段时,将所述代码段的起始地址发送给软件保护装置;其中,通过执行预先写入的调用软件保护装置的指令,计算被保护代码段的起始地址,然后将其发送到软件保护装置中;
E、软件保护装置返回相应的代码段数据;其中,软件保护装置根据被保护代码段的起始地址找到已存储的代码段数据,返回给软件;
F、软件将代码段数据存储到内存中,并执行该代码段数据;其中,软件首先分配一块内存,然后将软件保护装置返回的代码段数据存储到所述内存中;
G、执行完成后擦除内存中所述代码段数据;
在上述步骤中,被存储的代码段数据以密文形式从软件保护装置发送到软件,须解密后才可被软件执行。
根据本发明的一个方面,解密密钥是软件与软件保护装置协商建立的动态会话密钥。
根据本发明的一个方面,被存储的代码段数据中包含对软件保护装置的再次调用。
根据本发明的一个方面,软件正常运行时,首先从软件保护装置中读取被存储的代码段数据,在执行所述代码段数据时再次调用软件保护装置的功能。
根据本发明的一个方面,在上述二次调用软件保护装置的功能时,传入参数由软件保护装置在返回所述代码段数据时动态生成。
根据本发明的一个方面,软件保护装置在处理上述二次调用时,检查传入参数的合法性。
根据本发明的一个方面,在上述步骤A中还包括:由软件开发商选取受保护软件的若干段代码,标记代码段的起始和结束位置并计算其长度,将代码段数据和起始地址存储到软件保护装置中。
根据本发明的一个方面,软件开发商将上述受保护软件和软件保护装置发布给授权的软件用户。
根据本发明的一个方面,软件调用解密后的代码段中的功能函数,执行完功能函数后擦除内存数据并释放内存。
根据本发明的一个方面,功能函数中包含对软件保护装置的进一步调用,同时调用的参数是由软件保护装置在返回被存储的代码段数据时动态设定的。
上述过程与软件的功能无关,可对可执行程序中任意的代码段进行转移存储,易于实现自动化的软件保护方法,降低了软件保护的技术难度和开发成本。同时受保护的代码功能不是在软件保护装置中而是在PC上运行,因此对软件的执行效率影响很小。而使用基于硬件的软件保护装置,保证了被存储代码的私密性,提高了保护的安全性。
附图说明
图2为本发明实施例中使用软件保护装置存储程序代码实现软件保护的方法的流程示意图。
具体实施方式
图2为本发明实施例中基加密数据文件实现软件保护方法的流程示意图。
步骤201,软件开发商选取受保护软件的若干段代码,标记代码的起始和结束位置并计算其长度,将代码段数据和起始地址存储到软件保护装置中,擦除代码段内容,并在代码段起始处写入调用软件保护装置的指令。
步骤202,软件开发商将上述受保护软件和软件保护装置发布给授权的软件用户。
步骤203,软件运行时,当执行到某个被转移存储的代码段时,执行预设的调用软件保护装置指令,将该代码段的起始地址发送给软件保护装置,后者从根据该地址找到相应的代码段数据,用会话密钥加密后发送回软件。
步骤204,软件分配一块内存存储接收到的加密代码段数据,并用会话密钥进行解密。
步骤205,软件调用解密后的代码段中的功能函数,完成后擦除内存数据并释放内存。
在步骤205中,功能函数里可以包含对软件保护装置的进一步调用,同时调用的输入参数可以是由软件保护装置在返回被存储代码段数据时动态设定的。这样可以有效的增加软件和软件保护装置的相互依赖性,使得破解者难以分析和复制输入输出数据。
综上所见,本发明提供了一种统一而便捷的利用软件保护装置进行软件保护的方法,极大的降低了一般的代码移植方法的技术难度和软件局限性,具有易于实施、执行效率高和高安全强度的优点。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。