CN100557618C - 一种在计算机程序中嵌入和提取水印的方法 - Google Patents
一种在计算机程序中嵌入和提取水印的方法 Download PDFInfo
- Publication number
- CN100557618C CN100557618C CNB2008101193580A CN200810119358A CN100557618C CN 100557618 C CN100557618 C CN 100557618C CN B2008101193580 A CNB2008101193580 A CN B2008101193580A CN 200810119358 A CN200810119358 A CN 200810119358A CN 100557618 C CN100557618 C CN 100557618C
- Authority
- CN
- China
- Prior art keywords
- cutpoint
- watermark
- fundamental block
- embedded
- mapping relations
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Editing Of Facsimile Originals (AREA)
Abstract
本发明涉及一种在计算机程序中嵌入和提取水印的方法,属于软件版权保护技术领域。本发明方法中,嵌入水印的过程为:将水印和密钥分别转化为大整数w和k,并将w和k分别转换成具有n个元素的单调非递减的整数数组W[]和K[],在W[]和K[]的每一对相应的元素之间建立m个映射关系,然后从计算机程序中选择待嵌入水印的方法,创建映射关系代码并分别嵌入到与选定的待嵌入水印的方法控制流图的割点处;提取水印的过程为:依次读入计算机程序中的每一个方法控制流图中的割点并进行判断,若满足提取条件,则从该割点处提取出映射关系代码,根据提取出来的所有映射关系代码创建一个提取辅助类,读入提取密钥,运行提取辅助类,显示提取结果。
Description
技术领域
本发明涉及一种在计算机程序中嵌入和提取水印的方法,尤其涉及一种在Java二进制代码程序中嵌入和提取水印的方法,属于软件版权保护技术领域。
背景技术
随着计算机网络、分布式***以及网络化的嵌入式设备的发展,对软件的平台无关性和可移植性有了比以往更高、更迫切的要求,但也带来了安全方面的问题,其中,软件知识产权保护问题一直是个热点问题。研究软件版权保护技术,对于保护计算机软件著作权人的权益、鼓励计算机软件的开发与应用、促进软件产业和国民经济信息化的发展都有着非常重要的意义。
软件水印是指不被感知地嵌入在软件中的一段具有标识意义的信息,可用于证明软件的知识产权归属。在一些特定情形下,软件水印也能用于跟踪非法盗用。软件水印技术属于一种典型的软件版权保护技术。
发明内容
本发明的目的是提出一种在计算机程序中嵌入和提取水印的方法,该方法基于计算机程序控制流图的特征点——割点以及程序的语义。不同于以往的水印方法,在本方法中,通过在水印和密钥之间建立设定个数的映射关系,并将这些映射关系以代码的形式嵌入在与程序控制流图割点相对应的基本块处。
本发明提出的在计算机程序中嵌入和提取水印的方法,包括以下步骤:
嵌入水印的过程为:
(1)将计算机程序版权人的版权信息和密钥信息分别转化为一个整型数字字符串,分别记为w和k,w和k是大整数;
(2)将上述w和k分别转换成具有n个元素的单调非递减的整数数组W[]和K[],n是水印嵌入者设定的整数,1≤i≤n-1,具体的转换过程为:
(2-1)任意设定一个大于1的整数q,求出满足不等式 的整数l,以及满足不等式 的整数p;
(2-2)根据等式 分别求出系数v0,v1,...,vn-2和u0,u1,...,un-2,其中,对于0≤j≤n-2,系数vj为整数且满足:0≤vj<ql,系数uj为整数且满足:0≤uj<qp;
(2-3)令W[0]=l-1,K[0]=p-1,对1≤i≤n-1,得到W[i]=W[i-1]+vi-1,K[i]=K[i-1]+ui-1;
(3)在上述转换得到的版权信息整数数组W[]与密钥信息整数数组K[]的每一对相对应的元素之间建立m个映射关系,m是水印嵌入者设定的另一整数,得到一个具有m×n个映射关系的集合;
(4)从计算机程序中选择待嵌入水印的方法,其过程为:
(4-1)建立一个待嵌入水印的方法集合,从计算机程序中读入一个方法;
(4-1-1)根据读入的方法的控制流构建该读入的方法的控制流图,并得到控制流图的基本图,求出该基本图中所有割点的集合;
(4-1-2)对割点集合进行判断,若为空集,则转入步骤(4-1-5),若不为空集,则读取上述割点集合中的一个割点;
(4-1-3)对读取的割点进行判断,若符合:与该读取的割点对应的控制流图中的基本块能被拆分成两个基本块,且在两个基本块之间***一个新的基本块之后,两个基本块在新的控制流图中成为相邻割点,则该读取的割点为可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,并将上述读入的方法加入到待嵌入水印的方法集合中,转入步骤(4-1-5),若不符合,转入步骤(4-1-4);
(4-1-4)对上述割点集合进行判断,若该割点集合的所有割点遍历结束,则转入步骤(4-1-5),否则,读取该割点集合中的下一个割点,转入步骤(4-1-3);
(4-1-5)若计算机程序中的所有方法遍历结束,则转入步骤(4-2),否则,读入计算机程序中的下一方法,重复步骤(4-1-1)至步骤(4-1-4),直至遍历计算机程序中的所有方法;
(4-2)判断可嵌入水印的割点个数,若少于m×n,则从计算机程序中任意选择一个不在待嵌入水印的方法集合中的方法,在与所选择的方法相对应的控制流图中添加新的分支,使得添加了新的分支的控制流图含有可嵌入水印的割点,记录与由于添加了新的分支而含有的可嵌入水印的割点相对应的基本块的入口位置,并将修改后的该所选择的方法加入到上述待嵌入水印的方法集合中,重复本步骤中以上部分直至遍历计算机程序中所有不在待嵌入水印的方法集合中的方法;
(4-3)判断可嵌入水印的割点个数,若仍然少于m×n,则从上述待嵌入水印的方法集合中随机选择一个方法,按照上述步骤(4-1)中的过程读入另一割点,找到一个可嵌入水印的割点,并记录与找到的可嵌入水印的割点相对应的基本块的入口位置,若没有找到可嵌入水印的割点,则在随机选择的方法体中添加改变该随机选择的方法的控制流的辅助代码,使得该随机选择的方法的控制流图中含有新的可嵌入水印的割点,并记录与该新的可嵌入水印的割点相对应的基本块的入口位置,重复本步骤中以上部分,直至可嵌入水印的割点个数达到m×n;
(5)将映射关系嵌入到选定的待嵌入水印的方法中,其过程为:
(5-1)从映射关系集合中选择一个映射关系,从上述待嵌入水印的方法集合中选择一个待嵌入水印的方法,并读取待嵌入水印的方法中的一个可嵌入水印的割点;
(5-2)为待嵌入水印的方法增加多个整型局部变量,使新增加的局部变量中编号最小的局部变量对应于映射关系中的自变量,编号最大的局部变量对应于映射关系中的因变量,创建局部变量初始化指令以及与映射关系相关的操作指令,并将操作指令与局部变量相关联,得到映射关系代码;
(5-3)将与从待嵌入水印的方法中读取的割点相对应的基本块拆分成两个基本块b1、b2,并将构建的映射关系代码以一个基本块b3***到b1和b2之间,使得基本块b1、b2、b3满足:基本块b1跳向基本块b2和b3,基本块b3跳向基本块b2;
(5-4)读取下一个映射关系,判断待嵌入水印的方法中是否有新的可嵌入水印的割点,若有,则读取待嵌入水印的方法中下一个可嵌入水印的割点,并重复步骤(5-2)和步骤(5-3),完成映射关系代码的嵌入;若没有,则读取下一个待嵌入水印的方法,读取该下一个待嵌入水印的方法中一个可嵌入水印的割点,并重复以上步骤(5-2)和(5-3),完成映射关系代码的嵌入;
(5-5)重复步骤(5-4),直至所有映射关系代码嵌入到计算机程序中;
提取水印的过程为:
(6)建立一个待提取水印的方法集合;
(7)读取计算机程序中的一个方法,根据读取的方法的控制流构建与该读取的方法相对应的控制流图,得到相应的基本图,求出基本图的所有割点,得到一个割点集合,依次读取割点集合中的割点并进行判断,若与读取割点相对应的控制流图中的基本块b4满足:b4的跳转目标为两个基本块b5和b6,且基本块b5也为割点而b6不为割点,同时基本块b5为基本块b6的跳转目标,或基本块b6也为割点而b5不为割点,同时基本块b6为基本块b5的跳转目标,则对不为割点基本块作进一步判断,若满足:该不为割点基本块中含有的局部变量个数和类型与构建的映射关系代码中局部变量个数和类型相一致,则从计算机程序中提取该不为割点基本块中包含的操作指令以及所有局部变量的初始值,并根据操作指令和局部变量的初始值构建一个新的方法,具体构建过程如下:对按大小次序编号的上述不为割点基本块中的局部变量重新从0开始编号,使编号最小的局部变量为新方法的输入参数,编号最大的局部变量的值为新方法的返回值,使提取的操作指令作为新方法的操作指令;
(8)将上述新方法加入到上述待提取水印的方法集合中;
(9)重复上述步骤(7)和(8),直至计算机程序中的所有方法遍历结束;
(10)根据上述待提取水印的方法集合,创建提取辅助类,提取密钥,并解析出版权信息;
(11)使用与上述步骤(1)和(2)相同的方法,将用户的密钥信息转换成具有n个元素的单调非递减的整数数组g[];
(12)依次读取上述整数数组g[]中的每个整数,并分别将读取的整数作为上述提取辅助类中每个方法的输入,获得提取辅助类中每一个方法运行的返回值,若相同返回值的个数小于m,则提取密钥有误,提取失败,若相同返回值的个数大于或等于m,则将该相同返回值加入到整数数组h[]中;
(13)判断整数数组h[]是否为单调非递减,若不是,则显示提取失败,若是,则令上述l=h[0]+1,对0≤j≤n-2,令vj=h[j+1]-h[j],根据公式 得到一个大整数w,将大整数w作为一个整型数字字符串,还原成原始的字符串,显示版权信息并提示提取成功。
本发明提出的在计算机程序中嵌入和提取水印的方法,具有以下优点:
(1)在本发明提出的方法中,既不嵌入水印信息,也不嵌入密钥信息,而是将两者之间的映射关系嵌入到计算机程序中,从而在水印和密钥之间建立了一种新颖的依赖关系,赋予了密钥在水印领域中新的含义、功能和使用方式;
(2)本发明提出的方法是一种新颖的基于图理论的软件水印方法,代码的嵌入和提取都是基于控制流图的特征结点——割点,嵌入过程中不需要对嵌入的代码进行刻意的标记,并且提取效率也非常高;
(3)本发明提出的方法中,映射关系代码的嵌入参与程序的运行,因而映射关系代码的隐蔽性比较好,能够抵抗动态分析攻击;同时,映射关系代码的嵌入与计算机程序中类、方法、字段的名称等信息无关,因而用本发明提出的方法例来嵌入水印,能够抵抗词法混淆攻击;
(4)在本发明提出的方法中,映射关系代码的嵌入不会引起程序体积的大幅增加,也不会引起程序运行性能的明显下降,隐蔽性好,提取方便,尤其适合大型程序的版权保护。
附图说明
图1是嵌入水印过程中初步选择可嵌入水印割点的流程框图。
图2是嵌入水印过程中进一步选择可嵌入水印割点的流程框图。
图3是嵌入水印过程中嵌入映射关系代码的流程框图。
图4是在方法控制流图的割点处嵌入映射关系代码的示意图。
图5是给一个没有割点的控制流图添加分支使之含有割点的示意图。
图6是提取水印过程中提取映射关系代码的流程框图。
图7是提取水印过程中解析版权信息的流程框图。
具体实施方式
在本发明提出的方法中,其嵌入水印的过程主要包括拆分版权信息和密钥信息、构建映射关系、选择可嵌入水印的割点位置以及嵌入映射关系代码四个步骤。
(1)将计算机程序版权人的版权信息和密钥信息分别转化为一个整型数字字符串,分别记为w和k,w和k是大整数。在本实施例中,拆分版权信息和密钥信息的过程,如图1所示。首先自定义一个数字集合,该集合能包括任意一个常用字符,包括数字、字母等。例如,定义数字集合:{10,11,…,36,37,38,…,61,…,90,91,…,99},该数字集合能分别表示字符集合{a,b,...,z,A,B,...,Z,...,0,1,...,9}中的每一个元素,其中数字集合中的元素10表示字符集合中的元素a,数字集合中的元素11表示字符集合中的元素b,其他类推。然后根据上述定义,将版权信息和密钥信息分别转换成数字字符串,即把版权信息和密钥信息中的每一个字符分别转换成数字集合中的相应的元素。例如,版权信息为abc,密钥信息为123,则经过这种转换后,版权信息对应的数字字符串为101112,密钥信息对应的数字字符串为919293,将这个数字字符串分别记为w和k,即w=101112,k=919293。
(2)将上述w和k分别转换成具有n个元素的单调非递减的整数数组W[]和K[],这里n是水印嵌入者设定的整数值,用以表示整数数组中元素的个数,具体的转换过程为:
(2-1)任意设定q为一个大于1的整数,求出满足不等式: 即满足w≤q(n-1)l-1的一个整数l,并求出满足不等式: 即满足k≤q(n-1)p-1的一个整数p;
(2-2)根据等式 分别求出系数v0,v1,...,vn-2和u0,u1,...,un-2,其中,对于0≤j≤n-2,系数vj为整数且满足:0≤vj<ql,系数uj为整数且满足:0≤uj<qp;
(2-3)令W[0]=l-1,K[0]=p-1;(4)对1≤i≤n-1,令W[i]=W[i-1]+vi-1,K[i]=K[i-1]+ui-1。
在本实施例中,假设n=10,q=2,则对于w=101112,根根不等式 求出整数l≥2,l取最小值2,并令W[0]=l-1=1,根据等式 求出系数分别为v0,v1,...,v8分别为:0,2,3,3,2,2,0,2,1,由于对1≤i≤n-1,有W[i]=W[i-1]+vi-1,于是便可得到版权信息转换为的整数数组为:{1,1,3,6,9,11,13,13,15,16},同样地,k=919293被转换为的整数数组为:{2,7,14,17,20,20,24,27,27,27}。
(3)在上述转换得到的版权信息整数数组W[]与密钥信息整数数组K[]的每一对相对应的元素之间建立m个映射关系,这里m是水印嵌入者设定的另一整数,用以在水印提取过程中判断程序是否被篡改,得到一个具有m×n个映射关系的集合。在本实施例中,构建映射关系的过程为:(3-1)创建一个映射关系模板库H,H={f(x)=arxr+ar-1xr-1+...+a1x1+a0,r∈N,aj∈Z,0≤j≤r},其中,r表示设定的模板库基数,满足r≥log2m即可,模板库H定义了构建的映射关系的模板形式,在本实施例中,指定m=3,则r=2即可满足条件,创建模板库H={f(x)=a2x2+a1x+a0,a2×a1≠0}∪{f(x)=a2x2+a0,a2≠0}∪{f(x)=a1x+a0,a1≠0},H中共有3种模板,分别表示3种不同的映射关系;(3-2)对于1≤i≤n,在每一对元素K[i]和W[i]之间构造m个映射关系,每一个映射关系都取自不同的映射关系模板,记h(f)表示映射关系f的模板形式,并记F={fij|W[i]=fij(K[i]),1≤i≤n,1≤j≤m,h(fij)∈H}表示构造出来的m×n个映射关系的集合。在本实施例中,构建具体的映射关系时,在K[i]和W[i]之间构造的m个映射关系分别取自模板库中的m个不同的模板,并指定自变量为K[i],因变量为W[i],然后将x=K[i]和f(x)=W[i]分别代入模板库中的各个模板的表达式,求出各个模板中相应的系数aj,具体的求解过程如下:ar=[f(x)/x],如果ar=0,则令ar取一个一定范围内的随机数;对1≤j≤r-1,aj=[(f(x)-arxr-ar-1xr-1-...-aj+1xj+1)/x],如果ar=0,则令ar取一个一定范围内的随机数;a0=f(x)-arxr-ar-1xr-1-...-a1x1。
例如K[0]=2,W[0]=1,于是有x=K[0],f(x)=W[0],代入模板f(x)=a1x+a0,求得a1=[W[0]/K[0]]=[1/2]=0,获得一个一定范围内的随机数赋给a1,这里假设a1=1,a0=W[0]-a1×K[0]=1-1×2=-1,于是构造的第一个映射关系为f1(x)=x-1,同样可以求出f2(x)=x2-3,f3(x)=x2+x-5,这三个映射关系的模板形式分别是{f(x)=a1x+b,a1≠0},{f(x)=a2x2+b,a2≠0},{f(x)=a2x2+a1x+b,a1≠0,a2≠0};
选择可嵌入水印的割点位置的示意图如图1和图2所示。割点,也叫关节点,对于连通的无向图G=(V,E),如果存在一组不同的结点e1,e2,e3满足从e1到e3的所有路径都经过结点e2,那么结点e2就称为图G的割点,换言之,如果e2是割点,那么从图G中删除结点e2后,G将变成两个或者更多个连通分支。一个结点是否为割点可以通过如下定理来判断:假设G=(V,E)是无向连通图,S=(V,T)是图G的深度优先搜索生成树,则结点e2是G的一个割点,当且仅当下述条件成立:结点e2是S的根节点且有多于一个儿子结点,或者结点e2不是根节点,其某棵子树的根和该子树中的其它结点均没有指向结点e2的祖先结点的回边。
(4)从计算机程序中选择待嵌入水印的方法,并求出该方法控制流图中可嵌入水印的割点,具体的过程为:
(4-1)从计算机程序中读入一个方法;
(4-1-1)根据该方法的控制流构建该方法的控制流图,并得到其基本图(忽略该控制流图中边的方向性得到的无向图),求出该基本图中所有割点的集合;
(4-1-2)对上述割点集合进行判断,若为空,则转入步骤(4-1-5),若不为空,则读取上述割点集合中的一个割点;
(4-1-3)对上述读取的割点进行判断,若符合:与该割点对应的控制流图中的基本块能被拆分成两个基本块,且在两个基本块之间***一个新的基本块之后,两个基本块在新的控制流图中成为相邻割点,则该读取的割点为可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,并将上述读入的方法加入到待嵌入水印的方法集合中,转入步骤(4-1-5),若不符合,转入步骤(4-1-4);
(4-1-4)对上述割点集合进行判断,若该割点集合的所有割点遍历结束,则转入步骤(4-1-5),否则,读取该割点集合中的下一个割点,转入步骤(4-1-3);
(4-1-5)若计算机程序中的所有方法遍历结束,则转入步骤(4-2),否则,读入计算机程序中的下一方法,重复步骤(4-1-1)至步骤(4-1-4),直至遍历计算机程序中的所有方法;
(4-2)判断上述记录的可嵌入水印的割点个数,若少于m×n,则从计算机程序中任意选择一个不在待嵌入水印的方法集合中的方法,如图2所示,然后在与该选择方法相对应的控制流图中添加新的分支,使得该控制流图含有可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,并将该修改后的选择方法加入到上述待嵌入水印的方法集合中,重复以上步骤直至遍历计算机程序中所有不在待嵌入水印的方法集合中的方法;
在本实施例中,添加新的分支的具体过程如图4所示。在图4中,首先将结点d对应的基本块拆分成两个基本块d1和d2,然后添加两个新的基本块w1和w2,使得d1的跳转目标是w1和w2,w1和w2的跳转目标都是d2,d2的跳转目标是原结点d对应的基本块的跳转目标。经过这样的调整之后,结点d1就变成一个可嵌入水印的控制流图割点了。
(4-3)判断上述可嵌入水印的割点个数,若仍然少于m×n,则从上述待嵌入水印的方法集合中随机选择一个方法,读取该方法控制流图的基本图中的割点集合,读取该割点集合中的一个尚未被记录的割点,对该割点进行判断,若符合:与该割点对应的控制流图中的基本块能被拆分成两个基本块,且在两个基本块之间***一个新的基本块之后,两个基本块在新的控制流图中成为相邻割点,则该读取的割点为可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,若不符合,则读取割点集合中的下一个尚未被记录的割点,并对该割点进行同样的判断,直至在该割点集合中找到一个新的可嵌入水印的割点或该割点集合中的割点遍历结束,若在该割点集合遍历结束时也没有找到可嵌入水印的割点,则在该方法体中添加可以改变该方法控制流的辅助代码,使得该方法的控制流图中含有新的可嵌入水印的割点,并记录与该新的可嵌入水印的割点相对应的基本块的入口位置,重复以上步骤,直至可嵌入水印的割点个数达到m×n;
(5)将上述映射关系嵌入到上述选定的待嵌入水印的方法中,其过程如图3所示,包括以下步骤:
(5-1)从上述映射关系集合中选择一个映射关系,从上述待嵌入水印的方法集合中选择一个方法,并读取方法中的一个可嵌入水印的割点;
(5-2)为上述选择方法增加多个整型局部变量,使新增加的局部变量中编号最小的局部变量对应于映射关系中的自变量,编号最大的局部变量对应于映射关系中的变量,创建局部变量初始化指令以及与映射关系相关的操作指令,并将操作指令与局部变量相关联,从而得到映射关系代码。在本实施例中,以Java程序为例,假设当前选择方法的最大局部变量编号为n,则对于映射关系f1(x)=x-1,需要给该方法新增加4个局部变量,其变号分别为n,n+1,n+2,n+3,其中编号为n的局部变量对应于映射关系中的x,编号为n+1的局部变量对应于映射关系中的一次项系数1,编号为n+2的局部变量对应于映射关系中的常数项-1,编号为n+3的局部变量对应于映射关系中的f1(x),为该映射关系创建的初始化代码为:
iconst_0
istore n
iconst_1
istore n+1
iconst_m1
istore n+2
为该映射关系创建的映射关系代码如下:
iload n
iload n+1
imul
iload n+2
iadd
istore n+3
(5-3)将与上述读取的割点相对应的基本块拆分成两个基本块b1、b2,并将构建的映射关系代码以一个基本块b3***到b1和b2之间,使得基本块b1、b2、b3满足:基本块b1跳向基本块b2和b3,基本块b3跳向基本块b2。在本实施例中,创建好局部变量初始化指令以及映射关系代码后,首先将上述初始化代码***到方法体的头部,然后读取该方法中的一个上述记录的可嵌入水印的割点,将上述映射关系代码以一个基本块的形式嵌入到该割点处,映射关系代码的嵌入过程如图5所示,在图5中,结点f是该控制流图中可嵌入水印的割点,将割点f对应的基本块拆分成两个基本块f1和f2,并将含有映射关系代码的基本块w添加在两者之间,使得f1的跳转目标是w和f2,w的跳转目标是f2,f2的跳转目标是割点f对应的基本块的跳转目标,原本跳转目标为割点f对应的基本块的基本块的跳转目标更新为f1。这样在嵌入映射关系代码后的方法控制流图中,基本块f1和f2都是割点,并且两者相邻,即其中一个是另一个的跳转目标。
(5-4)读取下一个映射关系,并判断该方法中是否还有新的可嵌入水印的割点,若有,则读取该方法中下一个可嵌入水印的割点,并重复步骤(5-2)和步骤(5-3),完成映射关系代码的嵌入;若没有,则读取下一个待嵌入水印的方法,读取该方法中的一个可嵌入水印的割点,并重复步骤(5-2)和步骤(5-3),完成映射关系代码的嵌入。
(5-5)重复步骤(5-4),直至所有映射关系均已嵌入到计算机程序中。
在本发明提出的方法中,提取水印的过程是嵌入水印过程的逆过程,主要包括映射关系代码的提取(如图6)以及根据提取密钥解析版权信息(如图7)两个步骤。
(6)建立一个待提取水印的方法集合,读入计算机程序中的一个方法,根据该方法的控制流构建与该方法相对应的控制流图,得到相应的基本图,求出基本图的所有割点,得到一个割点集合,依次读取割点集合中的割点并进行判断,若与读取割点相对应的控制流图中的基本块b4满足:b4的跳转目标为两个基本块b5和b6,且基本块b5也为割点而b6不为割点,同时基本块b5为基本块b6的跳转目标,或基本块b6也为割点而b5不为割点,同时基本块b6为基本块b5的跳转目标,则对不为割点基本块作进一步判断,若该不为割点的基本块满足:该基本块中含有的局部变量个数和类型均与上述构建的映射关系代码中局部变量个数和类型相一致,则从计算机程序中提取该基本块中包含的操作指令以及所有局部变量的初始值,并根据操作指令和局部变量的初始值构建一个新的方法,该方法能够读入一个整数参数并返回一个整数值,具体构建过程如下:对按大小次序编号的局部变量重新从0开始编号,使编号最小的局部变量为新方法的输入参数,编号最大的局部变量的值为新方法的返回值,提取的操作指令作为新方法的操作指令;
(7)将上述新生成的方法加到待提取水印的方法集合中,
(8)重复上述步骤(6)和步骤(7),直至计算机程序中的所有方法遍历结束。
(9)根据上述待提取水印的方法,提取密钥,并解析出版权信息。在本发明的一个实施例中,首先使用阿帕奇软件基金会发布的字节码工程库(以下简称Apache BCEL)创建一个空的提取辅助类,然后将上述所有待提取水印的方法都作为该类中的方法,最后创建一个主方法,该主方法能调用上述所有待提取水印的方法。
(10)按照上述步骤(1)和(2)的方法,将用户的提取密钥转换成具有n个元素的单调非递减的整数数组g[]。例如,用户输入的提取密钥为123,则根据步骤(1)中的方法将其转换为整型数字字符串为919293,将其看作大整数k,即k=919293,然后根据步骤(2)中的方法,将k转换为整数数组g[]={2,7,14,17,20,20,24,27,27,27}。
(11)依次读取上述整数数组g[]中的每个整数,并分别将读取的整数作为提取辅助类中每个方法的输入,获得提取辅助类中每一个方法的返回值,若相同返回值的个数小于m,则提取密钥有误,提取失败;若相同返回值的个数大于或等于m,则将该相同返回值加入到整数数组h[]中。例如,整数数组g[]={2,7,14,17,20,20,24,27,27,27}时,对于数组中的第一个元素2,将其作为提取辅助类中每个方法的输入,则嵌入的映射关系中至少有三个映射关系f1(x)=x-1,f2(x)=x2-3,f3(x)=x2+x-5对应的方法返回值都为1,于是得到整数数组h[]中的第一个元素的值为1,同样的方法可分别求数组h[]中其他元素的值,最终得到的整数数组为h[]={1,1,3,6,9,11,13,13,15,16}。
Claims (1)
1、一种在计算机程序中嵌入和提取水印的方法,其特征在于该方法包括以下步骤:
嵌入水印的过程为:
(1)将计算机程序版权人的版权信息和密钥信息分别转化为一个整型数字字符串,分别记为w和k,w和k是大整数;
(2)将上述w和k分别转换成具有n个元素的单调非递减的整数数组W[]和K[],n是水印嵌入者设定的整数,1≤i≤n-1,具体的转换过程为:
(2-1)任意设定一个大于1的整数q,求出满足不等式 的整数l,以及满足不等式 的整数p;
(2-2)根据等式 分别求出系数v0,v1,...,vn-2和u0,u1,...,un-2,其中,对于0≤j≤n-2,系数vj为整数且满足:0≤vj<ql,系数uj为整数且满足:0≤uj<qp;
(2-3)令W[0]=l-1,K[0]=p-1,对1≤i≤n-1,得到W[i]=W[i-1]+vi-1,K[i]=K[i-1]+ui-1;
(3)在上述转换得到的版权信息整数数组W[]与密钥信息整数数组K[]的每一对相对应的元素之间建立m个映射关系,m是水印嵌入者设定的另一整数,得到一个具有m×n个映射关系的集合;
(4)从计算机程序中选择待嵌入水印的方法,其过程为:
(4-1)建立一个待嵌入水印的方法集合,从计算机程序中读入一个方法;
(4-1-1)根据读入的方法的控制流构建该读入的方法的控制流图,并得到控制流图的基本图,求出该基本图中所有割点的集合;
(4-1-2)对割点集合进行判断,若为空集,则转入步骤(4-1-5),若不为空集,则读取上述割点集合中的一个割点;
(4-1-3)对读取的割点进行判断,若符合:与该读取的割点对应的控制流图中的基本块能被拆分成两个基本块,且在两个基本块之间***一个新的基本块之后,两个基本块在新的控制流图中成为相邻割点,则该读取的割点为可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,并将上述读入的方法加入到待嵌入水印的方法集合中,转入步骤(4-1-5),若不符合,转入步骤(4-1-4);
(4-1-4)对上述割点集合进行判断,若该割点集合的所有割点遍历结束,则转入步骤(4-1-5),否则,读取该割点集合中的下一个割点,转入步骤(4-1-3);
(4-1-5)若计算机程序中的所有方法遍历结束,则转入步骤(4-2),否则,读入计算机程序中的下一方法,重复步骤(4-1-1)至步骤(4-1-4),直至遍历计算机程序中的所有方法;
(4-2)判断可嵌入水印的割点个数,若少于m×n,则从计算机程序中任意选择一个不在待嵌入水印的方法集合中的方法,在与所选择的方法相对应的控制流图中添加新的分支,使得添加了新的分支的控制流图含有可嵌入水印的割点,记录与由于添加了新的分支而含有的可嵌入水印的割点相对应的基本块的入口位置,并将修改后的该所选择的方法加入到上述待嵌入水印的方法集合中,重复本步骤中以上部分直至遍历计算机程序中所有不在待嵌入水印的方法集合中的方法;
(4-3)判断可嵌入水印的割点个数,若仍然少于m×n,则从上述待嵌入水印的方法集合中随机选择一个方法,按照上述步骤(4-1)中的过程读入另一割点,找到一个可嵌入水印的割点,并记录与找到的可嵌入水印的割点相对应的基本块的入口位置,若没有找到可嵌入水印的割点,则在随机选择的方法体中添加改变该随机选择的方法的控制流的辅助代码,使得该随机选择的方法的控制流图中含有新的可嵌入水印的割点,并记录与该新的可嵌入水印的割点相对应的基本块的入口位置,重复本步骤中以上部分,直至可嵌入水印的割点个数达到m×n;
(5)将映射关系嵌入到选定的待嵌入水印的方法中,其过程为:
(5-1)从映射关系集合中选择一个映射关系,从上述待嵌入水印的方法集合中选择一个待嵌入水印的方法,并读取待嵌入水印的方法中的一个可嵌入水印的割点;
(5-2)为待嵌入水印的方法增加多个整型局部变量,使新增加的局部变量中编号最小的局部变量对应于映射关系中的自变量,编号最大的局部变量对应于映射关系中的因变量,创建局部变量初始化指令以及与映射关系相关的操作指令,并将操作指令与局部变量相关联,得到映射关系代码;
(5-3)将与从待嵌入水印的方法中读取的割点相对应的基本块拆分成两个基本块b1、b2,并将构建的映射关系代码以一个基本块b3***到b1和b2之间,使得基本块b1、b2、b3满足:基本块b1跳向基本块b2和b3,基本块b3跳向基本块b2;
(5-4)读取下一个映射关系,判断待嵌入水印的方法中是否有新的可嵌入水印的割点,若有,则读取待嵌入水印的方法中下一个可嵌入水印的割点,并重复步骤(5-2)和步骤(5-3),完成映射关系代码的嵌入;若没有,则读取下一个待嵌入水印的方法,读取该下一个待嵌入水印的方法中一个可嵌入水印的割点,并重复以上步骤(5-2)和(5-3),完成映射关系代码的嵌入;
(5-5)重复步骤(5-4),直至所有映射关系代码嵌入到计算机程序中;
提取水印的过程为:
(6)建立一个待提取水印的方法集合;
(7)读取计算机程序中的一个方法,根据读取的方法的控制流构建与该读取的方法相对应的控制流图,得到相应的基本图,求出基本图的所有割点,得到一个割点集合,依次读取割点集合中的割点并进行判断,若与读取割点相对应的控制流图中的基本块b4满足:b4的跳转目标为两个基本块b5和b6,且基本块b5也为割点而b6不为割点,同时基本块b5为基本块b6的跳转目标,或基本块b6也为割点而b5不为割点,同时基本块b6为基本块b5的跳转目标,则对不为割点基本块作进一步判断,若满足:该不为割点基本块中含有的局部变量个数和类型与构建的映射关系代码中局部变量个数和类型相一致,则从计算机程序中提取该不为割点基本块中包含的操作指令以及所有局部变量的初始值,并根据操作指令和局部变量的初始值构建一个新的方法,具体构建过程如下:对按大小次序编号的上述不为割点基本块中的局部变量重新从0开始编号,使编号最小的局部变量为新方法的输入参数,编号最大的局部变量的值为新方法的返回值,使提取的操作指令作为新方法的操作指令;
(8)将上述新方法加入到上述待提取水印的方法集合中;
(9)重复上述步骤(7)和(8),直至计算机程序中的所有方法遍历结束;
(10)根据上述待提取水印的方法集合,创建提取辅助类,提取密钥,并解析出版权信息;
(11)使用与上述步骤(1)和(2)相同的方法,将用户的密钥信息转换成具有n个元素的单调非递减的整数数组g[];
(12)依次读取上述整数数组g[]中的每个整数,并分别将读取的整数作为上述提取辅助类中每个方法的输入,获得提取辅助类中每一个方法运行的返回值,若相同返回值的个数小于m,则提取密钥有误,提取失败,若相同返回值的个数大于或等于m,则将该相同返回值加入到整数数组h[]中;
(13)判断整数数组h[]是否为单调非递减,若不是,则显示提取失败,若是,则令上述l=h[0]+1,对0≤j≤n-2,令vj=h[j+1]-h[j],根据公式 得到一个大整数w,将大整数w作为一个整型数字字符串,还原成原始的字符串,显示版权信息并提示提取成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2008101193580A CN100557618C (zh) | 2008-09-05 | 2008-09-05 | 一种在计算机程序中嵌入和提取水印的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2008101193580A CN100557618C (zh) | 2008-09-05 | 2008-09-05 | 一种在计算机程序中嵌入和提取水印的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101350055A CN101350055A (zh) | 2009-01-21 |
CN100557618C true CN100557618C (zh) | 2009-11-04 |
Family
ID=40268842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2008101193580A Active CN100557618C (zh) | 2008-09-05 | 2008-09-05 | 一种在计算机程序中嵌入和提取水印的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100557618C (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8812855B2 (en) * | 2009-03-02 | 2014-08-19 | Nxp B.V. | Software protection |
CN101866410A (zh) * | 2010-04-30 | 2010-10-20 | 湖南大学 | 在Java软件中嵌入和提取水印的方法 |
MX2012015274A (es) * | 2010-06-30 | 2013-02-07 | Koninkl Philips Electronics Nv | Analisis interactivo de imagenes. |
CN102122335B (zh) * | 2010-12-24 | 2012-11-14 | 清华大学 | 一种利用软件水印限制非法java软件运行的方法 |
CN102867286A (zh) * | 2011-07-08 | 2013-01-09 | 索尼公司 | 数字水印生成、嵌入、检测方法和装置 |
CN103093155B (zh) * | 2012-12-07 | 2016-04-27 | 中北大学 | 基于源码修改的信息隐藏方法 |
WO2014153679A1 (en) * | 2013-03-27 | 2014-10-02 | Irdeto B.V. | Watermarking executable files |
CN103530536B (zh) * | 2013-09-30 | 2017-01-25 | 南通大学 | 一种Java软件水印的嵌入方法 |
CN112465088A (zh) * | 2020-12-07 | 2021-03-09 | 合肥维天运通信息科技股份有限公司 | 一种二维码位置生成方法 |
-
2008
- 2008-09-05 CN CNB2008101193580A patent/CN100557618C/zh active Active
Non-Patent Citations (1)
Title |
---|
基于内容的英文文本数字水印算法设计与实现. 肖湘蓉,孙星明.计算机工程,第31卷第22期. 2005 * |
Also Published As
Publication number | Publication date |
---|---|
CN101350055A (zh) | 2009-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100557618C (zh) | 一种在计算机程序中嵌入和提取水印的方法 | |
CN101458810B (zh) | 一种基于对象属性特征的矢量地图水印方法 | |
CN101944094B (zh) | 网页信息提取方法和装置 | |
Collberg et al. | Software watermarking: Models and dynamic embeddings | |
Leung et al. | CanTree: a tree structure for efficient incremental mining of frequent patterns | |
CN101299217B (zh) | 一种地图信息处理的方法、装置和*** | |
CN101452570B (zh) | 基于网格的矢量空间数据数字水印方法 | |
CN110765753A (zh) | 文案生成方法、***、计算机设备和存储介质 | |
CN101968769A (zh) | 一种基于行为模型的软件安全性测试用例生成方法 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN102375847A (zh) | 形成用于生成文档模板的合并树的方法以及装置 | |
Alkhafaji et al. | Payload capacity scheme for quran text watermarking based on vowels with kashida | |
US11429819B2 (en) | Packer classification apparatus and method using PE section information | |
CN100437560C (zh) | 一种向关系数据库嵌入和提取数字水印的方法 | |
CN100461214C (zh) | 基于反馈混沌***和邻域辅助的图像认证方法 | |
Hong et al. | An efficient algorithm of frequent connected subgraph extraction | |
Valero et al. | Tree-structured representation of melodies for comparison and retrieval | |
CN106296024A (zh) | 一种水资源***模拟和调控管理方法 | |
Yongping et al. | The infinite-dimensional widths and optimal recovery of generalized Besov classes | |
Kim et al. | An efficient index data structure with the capabilities of suffix trees and suffix arrays for alphabets of non-negligible size | |
Dury | Perspectives on Geomorphic Processes. Resource Paper No. 3. | |
Daage et al. | Climate change impacts on precipitation extremes, flows and flash floods in Mediterranean mesoscale catchments | |
Zhang et al. | A new skeleton feature extraction method for terrain model using profile recognition and morphological simplification | |
Potvin et al. | Digital Humanities Data Speculations | |
Huang et al. | A comparative framework for EB systems development methodologies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |