APP下载

软件特征和软件水印在软件保护中的应用研究

2018-12-13李冬冬庞岩梅

计算机应用与软件 2018年12期
关键词:指令集胎记特征值

范 洁 李冬冬 庞岩梅

(北京电子科技学院网络空间安全系 北京 100070)

0 引 言

随着计算机和网络技术的飞速发展,软件也从传统的计算机软件发展到智能手机APP,这给人们的生活带来了无穷的便利。同时,软件盗版、软件篡改、软件攻击等事件频频发生,严重地影响着软件生产者和使用者的利益。软件保护技术日益受到政府、企业和研究者的重视。本文综合运用软件水印术和软件特征技术,提出了一种基于静态水印和软件指令集的软件特征值提取方法,并设计了软件特征值在软件保护中的具体应用方案。将提取出软件特征值经软件开发者对称加密后随软件一起打包发售给使用者,可在软件运行不正常时,鉴定软件是否遭受破坏,或在软件发生盗版时追溯盗版源头。

1 软件特征

软件特征是程序本身所拥有的软件属性。软件特征源自于程序的所有相关信息,包括程序代码、API调用频率、类继承关系、线程执行序列、数据流等。

软件胎记(Software Birthmark)是在软件变化时,该软件特征保持不变的、可用于标识该软件的属性。通过对比两个软件胎记特征的相似性,来判断软件的相似性,从而检测出软件是否存在拷贝或盗版。软件胎记可分为软件静态胎记和动态软件胎记[1,9]。

定义1软件静态胎记(software static Birthmark):设P是软件的程序集合,Extract是从P中提取特征的一种方法,得到程序P在非执行状态下的静态特征集合B,则有Extract(P)→B。

定义2软件动态胎记(software dynamic Birthmark):设P是软件的程序集合,I表示对P的一个合法输入,Extract是从P中提取特征的一种方法,若P运行且I不为空集,则称此时B为动态胎记,记Extract(P,I)→B。

2 软件水印

软件水印通过向软件程序中嵌入隐藏信息来实现软件版权保护。在软件开发时可以将含有版权保护的信息嵌入到程序的代码区、数据区及程序的执行过程中。在发生软件版权纠纷时,嵌入到程序的隐藏信息可以被提取出用于判断软件的拥有者或者开发者,协助鉴定软件版权。

静态软件水印是指水印在软件开发时被添加到软件的数据区或者代码区,但不在程序的可执行流程中,是一种与软件运行状态无关的水印。动态软件水印与静态软件相反,将水印信息隐藏在程序的执行过程中,但只有程序在特定的输入序列下运行时,才能提取出的软件的水印信息[1,9]。

3 软件特征值提取方法

软件反编译的结果可以作为软件的特征。本文使用静态水印和软件反编译得到的指令集作为软件特征值提取的来源。首先对嵌入在软件中的字符串水印信息进行摘要值计算得到的摘要值为W;再对软件进行反编译得到的软件指令集合进行统计,得到指令统计结果的集合为P;最后将P和W作为哈希算法的输入计算出摘要值作为该软件的特征值。提取流程如图1所示。

图1 软件特征值提取流程图

3.1 嵌入静态数据水印

数据水印是将水印嵌入到软件中的最简单的方法。这种方法将包含数据水印的信息插入软件中指定的位置。假设软件的版权者为电科院,软件出售给A公司使用,可以在软件代码中插入版权信息如下:

字符串水印=“版权&电科院&使用者&A公司”

采用此种方法插入的水印信息虽然简单,但可以被用来识别软件的开发者和使用者。这种简单的嵌入与识别水印的方法可以非常容易地应用到软件中,水印信息由软件开发方事先嵌入在软件中。本文提出的基于静态水印和软件指令集的软件特征值提取方法,需要使用水印的摘要值作为提取特征值的输入之一。本文开发的测试程序在开发过程中嵌入静态数据水印,水印字符串取值为“电科院”代表软件的开发者,采用MD5算法对水印值进行哈希计算,得到水印的摘要值。结果如图2所示。

图2 静态数据水印摘要值计算结果

3.2 反编译并提取软件的指令集

软件反编译指的是把二进制代码翻译成汇编助记符。目前有很多专业的反汇编工具,如IDA Pro(Interactive Disassembly Pro)、W32Dasm等。 .NET中自带的反编译工具Ildasm.exe可以对基于.NET平台开发的软件进行反汇编。

本文使用反编译工具Ildasm.exe对在.NET环境下使用C#语言开发的测试程序test.exe进行反编译,并将反编译结果存储在test.il文件中,并在软件指令提取模块编程实现了test.il文件的打开。结果如图3所示。

图3 中间码文件打开结果

由图3可知,可执行程序经过反编译得到了指令集,接下来需要对指令集进行统计分析,得出每个指令出现的次数。采用正则表达公式进行多次组合和实验,找到满足规律的公式,这也是特征指令提取的关键所在。编程完成特征指令的提取及特征指令的统计,结果如图4所示。

图4 特征指令提取及统计结果

至此,得到由test.exe反编译提取出的特征指令集P:

nop:2;

ldstr:1;

call:3;

pop:1;

ret:2;

ldarg:1;

3.3 基于静态水印和软件指令集的软件特征值提取

3.1节详细阐述了水印的赋值及水印的摘要值W的获取方法,3.2节详细阐述了软件指令集的求取过程。将水印摘要值W和软件指令集P合成后,再次进行摘要计算将得到的摘要值作为软件的特征值。本文采用MD5算法作为求取软件特征值的哈希算法,最终以128比特的哈希值作为软件的特征值,具体结果如图5所示。

图5 软件特征值提取结果

3.4 软件特征值实验结果分析

本文提出的软件特征值提取方法对输入的变化非常敏感,软件特征值的提取主要依赖于数据水印值和软件反编译后得到的指令集。下面对不同的软件和不同的水印值产生的软件特征值进行比较分析。

从表1分析可以看出,相同的软件,不同的水印,产生的软件特征值不同;不同的软件,相同的水印,产生的特征值也不同。当嵌入到软件中的数据水印信息遭到暴力移出后,将对软件产生损害,由此产生的软件指令集与原先的指令集不同,最终产生的软件特征值与之前的软件特征值也不同。由软件特征值对输入的敏感性可知,结合软件水印信息和软件指令集的软件特征值方法可用于软件保护。

表1 软件特征值比较

4 应用方案

软件特征和软件水印均可用于软件的版权保护,但是软件特征技术用于软件版权保护时一般需要可信第三方的支持[5]。本文提出的基于静态水印和软件指令集的软件特征值提取方法结合对称加密技术,在不需要可信第三方支持的情况下,即可完成软件完整性鉴定和软件版权保护。软件特征值在软件保护中的具体应用方案如图6所示。由软件开发者使用加密口令和对称加密算法对软件特征值进行加密,然后将加密后的软件特征值文件与可执行程序一起打包发售。

图6 软件特征值在软件保护中的具体应用方案

由于加密后的软件特征值文件在后续的版权保护和软件完整性鉴定中非常重要,软件发行方应当以隐秘的方式将密文的特征值文件与可执行程序一起发行,且保证密文的软件特征值文件在用户计算机中隐密存储。加密密钥还需用于解密密文的软件特征值文件,软件开发者务必妥善保管。

软件开发者还需要在本地维护一个水印值与软件特征值映射关系表,以在未来发生版权纠纷或者软件遭受破坏时使用。软件发行之前,在软件中嵌入的数据水印值和计算产生的软件特征值均需填入表2。

表2 水印与软件特征值映射关系

4.1 在软件完整性鉴定中的应用

软件被发售并在使用者计算机上安装运行后,很容易遭受攻击而导致软件不能正常运行。本文设计的基于软件特征值的软件保护保护方案可以判断软件是否遭受到破坏。当怀疑软件遭受到破坏时,首先由软件发行者根据用户信息和水印生成规则,产生水印值,对用户使用的软件进行反编译求得软件指令集,再根据软件指令集和水印值产生新的软件特征值1。接着根据水印值检索软件开发者存储的软件跟特征值表,提取出表中存储的软件特征值,称为软件特征值2。比较软件特征值1和软件特征值2,如果二者相同,说明软件没有遭受到破坏;若二者不相同,说明软件已遭受到破坏。具体过程如图7所示。

图7 软件特征值和软件水印在软件完整性鉴定中的应用

4.2 在软件盗版追溯中的应用

设有软件开发商A公司将自己开发的软件A出售给使用者B使用,发售时A在发售软件中打包了加密后的软件特征值文件,也称密文的软件特征值的文件。B在使用过程中,不小心被C窃取了软件,并由在C使用,并且任意扩散D、E使用。

A公司发现C、D、E使用的软件可能是自己开发的软件的盗版版本时,首先从盗版软件中提取出隐藏的密文的软件特征值文件,用自己保管的对称密钥解密密文的软件特征值后,得出软件特征值。然后检索自己存储的软件特征值表,如找到对应的软件特征值,再找出对应的水印值,根据水印值中存储的使用者信息,找到软件被盗版的源头。如果C、D、E在盗版时对密文的软件特征值文件进行了删除或破坏,此时A公司可以从盗版软件中尝试进行水印提取。如能提取成功则根据水印信息判断软件的版权及使用者,确定是否是自己开发软件的盗版。具体过程如图8所示。

图8 软件特征值和软件水印在软件盗版追溯中的应用

5 结 语

软件特征是从软件本身提取出软件的特有属性作为识别软件的方法。软件水印是将软件的版权信息嵌入到软件中且不影响软件的正常使用的技术。本文在充分研究软件特征和软件水印技术的基础上,提出了一种基于静态水印和软件指令集的软件特征值提取方法。

该方法首先基于嵌入到软件中的静态数据水印计算水印摘要值;然后对软件进行反编译得出软件指令集并对指令集进行统计分析得到有效的指令集合;最后对水印摘要值和软件指令集进行摘要计算得到最终的软件特征值。本文对提取的软件特征值设计了在软件保护中的具体应用方案,软件特征值经由软件开发商对称加密后以密文的软件特征值文件的方式随软件一起打包发售。当软件运行不正常或在软件受到攻击时,可用于鉴定软件的完整性是否遭受到破坏。当软件发生盗版时,可供软件开发者使用追溯盗版源头。综上所述,本文提出的基于静态水印和软件指令集的软件特征值提取方法及其应用方案可用于软件保护,具有实际应用价值,可在软件保护领域推广使用。

猜你喜欢

指令集胎记特征值
基于Kubernetes的RISC-V异构集群云任务调度系统①
利用LMedS算法与特征值法的点云平面拟合方法
单圈图关联矩阵的特征值
宝宝胎记,不可忽视
3DNow指令集被Linux淘汰
凯莱图的单特征值
如果做梦是他人的事
基于Dais—CMX模型机的斐波那契数列指令集设计
求矩阵特征值的一个简单方法
什么是AMD64