CN103530536A - 一种Java软件水印的嵌入方法 - Google Patents

一种Java软件水印的嵌入方法 Download PDF

Info

Publication number
CN103530536A
CN103530536A CN201310464154.1A CN201310464154A CN103530536A CN 103530536 A CN103530536 A CN 103530536A CN 201310464154 A CN201310464154 A CN 201310464154A CN 103530536 A CN103530536 A CN 103530536A
Authority
CN
China
Prior art keywords
watermark
software
data
character string
embedding
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.)
Granted
Application number
CN201310464154.1A
Other languages
English (en)
Other versions
CN103530536B (zh
Inventor
陈建平
李奎
施佺
王杰华
邱建林
李桂森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nantong University Technology Transfer Center Co ltd
Original Assignee
Nantong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nantong University filed Critical Nantong University
Priority to CN201310464154.1A priority Critical patent/CN103530536B/zh
Publication of CN103530536A publication Critical patent/CN103530536A/zh
Application granted granted Critical
Publication of CN103530536B publication Critical patent/CN103530536B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/106Enforcing content protection by specific content processing
    • G06F21/1063Personalisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Editing Of Facsimile Originals (AREA)

Abstract

一种Java软件水印的嵌入方法,包括水印嵌入:将水印信息按设定的规则进行编码,形成水印字符串;调用软件中具备共同特征的n个数据,并对所述数据按1至n进行编号;将所述水印字符串分为n组,分别按所述编号顺序依次与所述n个数据一一建立唯一对应的映射关系,形成一个码本文件;和水印提取:调用软件中所述具备共同特征的n个数据;对照所述码本文件,将所述每个数据所对应的各组字符串取出,并按其编号顺序拼接成水印字符串;根据设定的规则将所述水印字符串译码,得到水印信息。有益效果为:该方法嵌入和提取水印的过程除程序中的方法名外不涉及任何具体的程序代码,隐蔽性强,可以抵抗多种常见的针对软件水印的攻击。

Description

一种Java软件水印的嵌入方法
技术领域
本发明涉及软件版权的保护,尤其涉及一种Java软件水印的嵌入方法。
背景技术
软件产业近年来迅猛发展,成为每年具有数千亿产值的重大产业。与此同时,软件产品的非法复制和盗用问题也变得非常严重,受到业内外广泛关注。如何保护软件产品的知识产权,防止软件被非法复制和盗用,是信息安全领域的一个重要研究课题。软件水印是近年来出现的保护软件产品知识产权的一项技术,它在不影响软件功能的前提下在软件作品中嵌入版权保护信息或身份认证信息(即水印),当程序遭到非法复制或盗用时,可以通过提取这些信息来证明软件作品的所有权。
目前,在各种软件产品中,用Java语言开发的软件占有很大的比重。Java语言具有跨平台的可移植性,使用便利,同时也带来程序容易被复制和盗用的问题。一些开发者可以在自己开发的程序中未经授权地使用他人开发的类文件,也可以通过反编译,从类文件获得源文件,学习他人解决某个问题的方法。因此,研究和开发用于Java语言软件版权保护的软件水印技术具有十分重要的现实意义和应用价值。
发明内容
本发明目的在于克服以上现有技术之不足,提供一种Java软件水印的嵌入方法,具体由以下技术方案实现:
   所述Java软件水印的嵌入方法包括水印的嵌入和水印的提取,其中: 
水印嵌入包括:
将水印信息按设定的规则进行编码,形成水印字符串;
调用软件中具备共同特征的n个数据,并对所述数据按1至n进行编号;
将所述水印字符串分为n组,分别按所述编号顺序依次与所述n个数据一一建立唯一对应的映射关系,形成一个码本文件;
水印提取包括:
调用软件中所述具备共同特征的n个数据;
对照所述码本文件,将所述每个数据所对应的各组字符串取出,并按其编号顺序拼接成水印字符串;
根据设定的规则将所述水印字符串译码,得到水印信息。
所述软件水印的嵌入及提取方法的进一步设计在于,所述设定的规则为:若水印信息为中文,将水印信息按GBK编码标准转变成连续的0、1字符串;若水印信息为英文,将水印信息按ASCII编码标准转变成连续的0、1字符串。
所述软件水印的嵌入及提取方法的进一步设计在于,所述具备共同特征的数据为软件中的函数方法名。
所述软件水印的嵌入及提取方法的进一步设计在于,所述调用具备共同特征的数据是利用Java反射机制解析出需要保护的程序中的所述函数方法名,并把所述方法名存储在一个数组中。
本发明提出的上述基于方法名编码的Java软件水印的嵌入及提取方法对所保护的程序不添加任何代码,具有绝对的隐蔽性,不会被察觉和发现,同时对原程序的运行不会产生丝毫影响。
该方法嵌入和提取水印的过程除程序中的方法名外不涉及任何具体的程序代码,可以抵抗多种常见的针对软件水印的攻击,包括语义变换攻击、代码增减攻击、统计分析攻击和单步跟踪调试攻击等。因为嵌入水印后程序并未发生任何变化,还是原来的程序,通过程序运行统计分析或单步跟踪调试,不可能发现水印的痕迹。在嵌有水印的程序中增加或减少代码对方法名没有影响,因而不会影响水印的提取。对程序进行语义变换有可能会改变程序中某些方法的先后顺序。对此,每个方法名对应的编码给一个编号,提取水印时按照编号顺序来拼接0、1串,不受获取的方法名顺序的影响。因此,语义变换攻击对本方法也不起作用。
具体实施方式
下面结合该实施例对本发明方案进行详细说明。
本发明提供的Java软件水印的嵌入方法,涉及 
水印的嵌入
包括:将水印信息按设定的规则进行编码,形成水印字符串。
调用软件中具备共同特征的数据n个,并对数据按1至n进行编号。
将水印字符串分为n组,并将其与对应编号的数据建立唯一对应的映射关系,形成一个码本文件。
水印的提取
包括:调用软件中具备共同特征的数据;
对照码本文件,将1至n号的数据所对应的字符串取出,并按其编号顺序拼接成水印字符串;
根据设定的规则将水印字符串译码,得到水印信息。
上述对水印信息编码过程中设定的规则为:若嵌入的水印信息为中文,将水印信息按GBK编码标准转变成连续的0、1字符串;若嵌入的水印信息为英文,将水印信息按ASCII编码标准转变成连续的0、1字符串。本实施例以嵌入中文水印信息为例,采用GBK编码标准。
按GBK编码标准将水印信息转变成连续的0、1串的实现代码如下:
String info = water_mark_info.getText().trim();    //info为水印信息
byte[] b = info.getBytes("GBK");              //将水印信息转换成GBK码
for (int i = 0, max = b.length; i < max; i++) {
    code_01 = Integer.toBinaryString(b[i]&0xff);
    sb.append(code_01);                     //sb即为生成的0、1码串
}
软件中具备共同特征的数据是指Java程序中的方法名,调用机制则是利用Java反射机制解析出需要保护的Java程序中的方法名,把获取的方法名存储在一个数组中。相应的实现代码如下:
Class<?> class = Class.forName("所要保护的Java程序类文件名");
Method []methods = class.getDeclaredMethods();  //methods即为方法名数组
为便于后续处理,对方法名数组进行遍历,取出其中的所有方法名,置于一集合(列表)中,相应代码如下:
 for(Method method : methods){
     if(!"<init>".equals(method.getName())){
     lst.add(method.getName());             //lst即为方法名的集合
 }
根据获取的方法名的个数n,把代表水印信息的0、1串分为n组,依次给每个方法名分配一组0、1码段,在方法名与0、1码段之间建立一一对应的映射关系,形成码本文件。对这一过程,例举一实例予以说明:
假设需要保护的Java程序中含有5个方法,方法名分别为func1、func2、func3、func4 func5。需要嵌入的水印信息为“南通大学版权所有”8个中文字。将“南通大学版权所有”用GBK码表示,如“南”的GBK码为c4cf(十六进制),转换成二进制为1100010011001111。每个字16位,得到一个128位的0、1串。将这一0、1串分成5段,前4段每段25位,最后一段28位,形成的码本如表1所示:
表1
方法名 编码 编号
func1 1100010011001111110011011 1
func2 0101000101101001111001111 2
func3 0100011010011110110000111 3
func4 0011011001000101010001100 4
func5 1011111110011101001111010000 5
实现这一过程的核心代码如下:
获取方法名个数和0、1串位数的代码:
str01_size = sb.length();              //str01_size为0、1串的位数   
count = str01_size/method_size;       // method_size为方法名的个数
count是为每个方法名分配的0、1码的位数。
为每个方法名分配一段0、1码的代码:
for(int x=0;x<method_size;x++){
if(x==method_size-1){    //为最后一个方法名分配0、1码(位数不同,单独处理)
         code_lst.add(lst.get(x)+"|"+ (x+1) +"_"+sb.substring(x*count, str01_size));
}else{                  //为前面的方法名分配0、1码(位数相同)
         if(x*count-1>0){
code_lst.add(lst.get(x)+"|"+ (x+1) +"_"+sb.substring(x*count, x*count+count));
         }else{
code_lst.add(lst.get(x)+"|"+ (x+1) +"_"+sb.substring(0, x*count+count));
           }
        }
}
其中,code_lst是为每个方法名分配的0、1码段,x为每个0、1码段的编号。符号“|”和“_”是在方法名与0、1码段及其编号之间设置的分隔符,用于提取水印时进行各部分的分割。
将上述得到的每一个方法名、对应的0、1码段及其编号整合拼接成字符串,写入到一个txt文件,即码本文件。至此,水印信息嵌入完成。
当需要提取水印时,运用Java的反射机制从需要检测水印的程序中获取所含的方法名,对照码本对这些方法名进行译码,最终得到嵌入的水印信息。
首先,运用Java反射机制解析出需要检测水印的Java类文件中的方法名,把获取的方法名存储在一个数组中。实现这一过程的代码与上面嵌入水印时的相同。
然后,打开嵌入水印时形成的码本文件,对照码本,对上述数组中的每一个方法名进行译码。即依次将数组中的每一个方法名与码本中的各个方法名进行比较,若一致,则将该方法名对应的0、1码段及其编号取出。将获取的各段0、1码按其编号顺序拼接起来,得到代表水印信息的0、1串。实现这一过程的代码如下:
打开并获取码本文件内容的代码:
StringBuffer sb = new StringBuffer();
InputStreamReader read = new InputStreamReader(
                       new FileInputStream(file_txt), encoding);
     BufferedReader bufferedReader = new BufferedReader(read);
     String s = bufferedReader.readLine();
     while(s != null){
          sb.append(s);
          s = bufferedReader.readLine();
 }
s = sb.toString();    //s即为包含码本内容的集合
分割出码本文件中的每一行(包含一个方法名及其对应的0、1码段和编号)的代码:
String[] str = s.split(“ ' ”);   //“'”为编码时在码本文件中设置的两行之间的分隔符 
  for(int i=0;i<str.length;i++){
        list1.add(str[i]);       //结果置于集合list1中
    }
分割出每一行中的方法名,与程序中检测出的方法名逐一进行比较,若一致,则取出对应的0、1码段及其编号。相关代码为:
for(int x=0;x<lst.size();x++){
        String test_lst = lst.get(x);
        for(int y=0;y<list1.size();y++){
            String test_list1 = list1.get(y);
             if(test_list1.startsWith(test_lst)){
        list2.add(test_list1.substring(test_list1.lastIndexOf("|")+1));
           }      //list2即为存放0、1码段及其编号的集合
          }
    }
将0、1码段与编号分割开来,根据编号顺序将码段拼接起来,得到代表水印信息的0、1串。相关代码为:
for(int y=0;y<lst.size();y++){
            String for1 = y+1+"_";
            for(int m=0;m<list2.size();m++){
                if(list2.get(m).startsWith(for1)){
                    abc += list2.get(m).substring(list2.get(m).lastIndexOf("_")+1);
                 }
            }
        }
        abc = abc.substring(4);    //abc即为最终得到的代表水印信息的0、1串
根据嵌入水印时所使用的中文GBK编码,将提取出的代表水印信息的0、1串转换成中文字符,得到嵌入的中文水印信息。相关代码如下:
byte b[] = new byte[1000];  
List<Integer> hex = StrToHex(a,b); 
for(int i=0;i<hex.size();i+=2){
    result += new String(new byte[]{((Integer) hex.get(i)).byteValue(),((Integer)
       hex.get(i+1)).byteValue()});
其中,StrToHex(a, b)为将二进制01码转变成十六进制码的函数,result中所含即为最终得到的中文水印信息。

Claims (4)

1.一种Java软件水印的嵌入方法,其特征在于包括水印的嵌入和水印的提取,其中 
所述水印嵌入包括:
将水印信息按设定的规则进行编码,形成水印字符串;
调用软件中具备共同特征的n个数据,并对所述数据按1至n进行编号;
将所述水印字符串分为n组,分别按所述编号顺序依次与所述n个数据一一建立唯一对应的映射关系,形成一个码本文件;
所述水印提取包括:
调用软件中所述具备共同特征的n个数据;
对照所述码本文件,将所述每个数据所对应的各组字符串取出,并按其编号顺序拼接成水印字符串;
根据设定的规则将所述水印字符串译码,得到水印信息。
2.根据权利要求1所述的一种Java软件水印的嵌入方法,其特征在于,所述设定的规则为:若软件水印信息为中文,将水印信息按GBK编码标准转变成连续的0、1字符串;若水印信息为英文,将水印信息按ASCII编码标准转变成连续的0、1字符串。
3.根据权利要求1所述的一种Java软件水印的嵌入方法,其特征在于,所述具备共同特征的数据为软件中的函数方法名。
4.根据权利要求2所述的一种Java软件水印的嵌入方法,其特征在于,所述调用具备共同特征的数据是利用Java反射机制解析出需要保护的程序中的所述函数方法名,并把所述方法名存储在一个数组中。
CN201310464154.1A 2013-09-30 2013-09-30 一种Java软件水印的嵌入方法 Active CN103530536B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310464154.1A CN103530536B (zh) 2013-09-30 2013-09-30 一种Java软件水印的嵌入方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310464154.1A CN103530536B (zh) 2013-09-30 2013-09-30 一种Java软件水印的嵌入方法

Publications (2)

Publication Number Publication Date
CN103530536A true CN103530536A (zh) 2014-01-22
CN103530536B CN103530536B (zh) 2017-01-25

Family

ID=49932541

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310464154.1A Active CN103530536B (zh) 2013-09-30 2013-09-30 一种Java软件水印的嵌入方法

Country Status (1)

Country Link
CN (1) CN103530536B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104462884A (zh) * 2014-12-22 2015-03-25 北京邮电大学 软件水印的嵌入和提取方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101350055A (zh) * 2008-09-05 2009-01-21 清华大学 一种在计算机程序中嵌入和提取水印的方法
CN101866410A (zh) * 2010-04-30 2010-10-20 湖南大学 在Java软件中嵌入和提取水印的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101350055A (zh) * 2008-09-05 2009-01-21 清华大学 一种在计算机程序中嵌入和提取水印的方法
CN101866410A (zh) * 2010-04-30 2010-10-20 湖南大学 在Java软件中嵌入和提取水印的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王春红 等: "基于字节码的Java软件水印的研究与实现", 《微电子学与计算机》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104462884A (zh) * 2014-12-22 2015-03-25 北京邮电大学 软件水印的嵌入和提取方法
CN104462884B (zh) * 2014-12-22 2017-09-29 北京邮电大学 软件水印的嵌入和提取方法

Also Published As

Publication number Publication date
CN103530536B (zh) 2017-01-25

Similar Documents

Publication Publication Date Title
CN103049682B (zh) 一种基于字符间距编码的双重水印嵌入的文本水印方法
CN100447812C (zh) 一种文档数字水印嵌入方法
CN110457873B (zh) 一种水印嵌入与检测方法及装置
CN102096787B (zh) 一种基于word2007文本切分的信息隐藏方法及其装置
CN101477610B (zh) 源码和目标码联合嵌入的软件水印方法
CN106095735A (zh) 一种基于深度神经网络检测学术文献抄袭的方法
CN101639828B (zh) 一种基于xml电子文档的水印隐藏和提取方法
CN102194081A (zh) 自然语言信息隐藏方法
US20230161879A1 (en) Malicious code detection method and apparatus based on assembly language model
CN101504709A (zh) 用于软件配置管理的脆弱软件水印方法
CN103176905B (zh) 一种缺陷关联方法及装置
CN112948776A (zh) 一种数字水印添加方法、装置、电子设备及存储介质
CN114356919A (zh) 一种结构化数据库的水印嵌入方法、溯源方法及装置
Mehta et al. A Novel approach as Multi-place Watermarking for Security in Database
CN103530536A (zh) 一种Java软件水印的嵌入方法
CN103714271A (zh) 一种Java软件水印植入虚方法的永假式构造方法
CN104376236A (zh) 基于伪装学的方案自适应数字水印嵌入方法及提取方法
CN104765986B (zh) 一种基于隐写术的代码保护及还原方法
CN101866410A (zh) 在Java软件中嵌入和提取水印的方法
CN102542183A (zh) 网络文学版权检测方法及系统
CN105404614B (zh) 一种基于主谓语编码的文本水印嵌入以及提取方法
CN104200139B (zh) 一种Java软件水印虚方法中指令代码的生成方法
CN103824006B (zh) 一种手机应用软件自动生成水印的方法和系统
Zhang et al. A fragile watermarking scheme based on hash function for web pages
CN109543369B (zh) 一种dex的保护方法

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
TR01 Transfer of patent right

Effective date of registration: 20201016

Address after: 226019 No.205, building 6, Nantong University, No.9, Siyuan Road, Nantong City, Jiangsu Province

Patentee after: Center for technology transfer, Nantong University

Address before: 226019 Jiangsu city of Nantong province sik Road No. 9 Institute of electronic and Information Engineering Nantong University

Patentee before: NANTONG University

TR01 Transfer of patent right
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140122

Assignee: Nantong Zhijia Intelligent Equipment Co.,Ltd.

Assignor: Center for technology transfer, Nantong University

Contract record no.: X2022320000351

Denomination of invention: An Embedding Method of Java Software Watermark

Granted publication date: 20170125

License type: Common License

Record date: 20221210

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 226001 No.9, Siyuan Road, Chongchuan District, Nantong City, Jiangsu Province

Patentee after: Nantong University Technology Transfer Center Co.,Ltd.

Address before: 226019 No.205, building 6, Nantong University, No.9, Siyuan Road, Nantong City, Jiangsu Province

Patentee before: Center for technology transfer, Nantong University

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140122

Assignee: Nantong Guanjun Automation Technology Co.,Ltd.

Assignor: Nantong University Technology Transfer Center Co.,Ltd.

Contract record no.: X2023980054513

Denomination of invention: A method for embedding Java software watermarks

Granted publication date: 20170125

License type: Common License

Record date: 20231229