CN101477610A - 源码和目标码联合嵌入的软件水印方法 - Google Patents

源码和目标码联合嵌入的软件水印方法 Download PDF

Info

Publication number
CN101477610A
CN101477610A CN 200810188310 CN200810188310A CN101477610A CN 101477610 A CN101477610 A CN 101477610A CN 200810188310 CN200810188310 CN 200810188310 CN 200810188310 A CN200810188310 A CN 200810188310A CN 101477610 A CN101477610 A CN 101477610A
Authority
CN
China
Prior art keywords
module
watermark
code
chaos
software
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
CN 200810188310
Other languages
English (en)
Other versions
CN101477610B (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.)
PLA Information Engineering University
Original Assignee
PLA Information Engineering 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 PLA Information Engineering University filed Critical PLA Information Engineering University
Priority to CN 200810188310 priority Critical patent/CN101477610B/zh
Publication of CN101477610A publication Critical patent/CN101477610A/zh
Application granted granted Critical
Publication of CN101477610B publication Critical patent/CN101477610B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明属于软件保护领域,是将数字水印的技术思想应用于软件保护领域而产生的一种可对软件的版权实施保护的技术方案。该发明针对Windows系统中的PE文件格式而设计,充分利用软件本身可执行的特点,将水印的提取器嵌入在软件当中,采用源码和目标码联合嵌入的策略,将软件的版权信息,用户的指纹信息嵌入到软件当中,为软件提供版权申明的功能,一旦发生盗版可以追查盗版源。该技术方案通过引入反逆向工程技术,以抵抗水印的抗逆向工程攻击能力;通过引入混沌系统,把水印信息散列编码到整个代码当中,以保护全部代码。

Description

源码和目标码联合嵌入的软件水印方法
技术领域
本发明属软件保护领域,具体是一种基于源码和目标码联合嵌入的软件水印方法。
背景技术
软件水印是嵌入到程序当中的秘密消息,这些消息应能方便可靠地提取出来,以证明软件的所有权,并且具有在保证程序功能的情况下不能或难以去除该消息的功能。该技术可提供所有者鉴别、所有权验证、操作跟踪、拷贝控制等服务,是密码学、软件工程、图论等学科的交叉研究领域。简单地说,软件水印是用水印的思想实施软件保护。
依据嵌入到软件当中的信息的不同,软件水印可以具有不同的功能,如,嵌入的信息是标识软件所有者的身份信息,则这类水印可以用于证明软件产品的版权归属;嵌入的信息是标识软件产品的序列号或者购买者的身份信息,则一旦发生盗版,可通过该信息追查盗版源,为盗版取证提供必要的技术支持。一般而言,软件水印具有以下一些应用:
(1)软件版权申明(Authorship):通过软件水印申明软件的版权,软件中的水印信息可以被任何合法的用户(公开水印密钥)提取。软件用户可以通过该水印判断所使用的软件是否为正版软件。
(2)软件版权证明(Authentication):通过软件水印证明软件的版权,软件中的水印信息仅能被软件开发者(拥有水印密钥)提取,该水印信息可以证明软件的所有权。当两个公司都称某软件是自己公司的软件时,软件版权证明水印可以证明软件的所有权,从而揭穿盗版者的谎言。
(3)盗版源的跟踪:在分发给不同使用者的软件中嵌入的水印信息各不相同(不同的信息是软件的指纹),当盗版行为发生时,可以根据软件的指纹寻找盗版软件是从哪个使用者流传出去的,从而定位盗版源。
(4)非法复用软件模块的发现:如果整个软件被盗用,常常是容易发现的;但当仅有某个模块给非法复用时,常常是难以发现的,软件水印可以用于发现与检测这种情况下的盗版行为。
(5)盗版自报告:Easter Egg软件水印利用了软件可运行的特点,把水印检测器嵌入到软件当中,当检测器运行时,可以通过检查软件的生存环境(例如主机IP等),判断该软件的生存环境是否构成盗版行为,进而在可能的情况下,通过网络主动报告盗版行为。
(6)盗版自发现:随着计算机网络的迅速发展,通过网络分发软件成为软件分发的一种重要手段。这就给软件盗版的自发现提供了可能,利用网络爬虫技术搜索Internet网上的软件,并检测这些软件当中的水印信息,从而自动地发现盗版行为。
根据软件水印嵌入和提取的时机分类,软件水印大致可分为:静态水印和动态水印。
静态水印就是把嵌入载体(程序)看作静态对象,水印嵌入到静态的数据或代码当中。静态水印生成灵活,使用简单,是使用最广泛的软件水印,但安全性不高。静态水印又可以进一步分为静态数据水印和静态代码水印。静态数据水印是将水印信息嵌入到软件的数据段当中,而静态代码水印是将水印信息嵌入在软件的代码段当中。
动态水印是把软件看作动态对象,把水印嵌入到程序动态运行的中间状态中,这类水印充分利用了软件本身可执行的特点,与静态水印相比,鲁棒性更高。具体而言,动态水印又可以划分为EasterEgg水印、动态数据结构水印、动态执行过程水印。Easter Egg水印又称复活节彩蛋水印,是直接把水印的检测器加入到软件代码当中,通过特定的输入序列,激活水印检测(提取)器,检测(提取)器在检测(提取)到水印后,把水印显示给用户。动态数据结构水印是把水印嵌入到软件运行时动态生成的数据结构当中,软件处于静态时(即不运行时)不包含水印信息,当软件接受到特定的输入序列后,水印信息编码在堆、栈或者全局变量等数据当中,通过检测(提取)软件中的相关状态来检测(提取)水印。动态执行过程水印通过对程序中指令的执行顺序或内存地址走向编码水印。
发明内容
本发明的目的是提供一种软件保护的实用性方法,其基本思想是:将源码级嵌入水印与目标码级嵌入水印的优点相融合,将软件的版权信息,用户的指纹信息嵌入到软件当中,为软件提供版权申明的功能,一旦发生盗版可以追查盗版源;通过引入反逆向工程技术,以提高方法的抗逆向工程攻击能力;通过引入混沌系统,把水印信息散列编码到整个代码当中,以保护全部代码。
在本水印方法中,嵌入到软件当中的信息包括:混沌系统、输入监控模块、水印解码模块、反逆向工程模块、水印信息5部分。其嵌入过程如下:
a).混沌系统S以给定的密钥K1,迭代产生混沌序列,并列用该序列对水印信息W1进行编码,得到编码后的水印信息W2,使其更适合于嵌入到程序当中,记W2的长度为N0字节。
b).在用户配置信息的控制下,“模块生成器”生成混沌系统模块、水印解码模块、反逆向工程模块。这里需要特别指出的是混沌系统模块必须与步骤1中的“混沌系统S”相匹配,记这三个模块的长度分别为N1,N2,N3字节。
c).在密钥K2的控制下,“模块生成器”生成“输入监控模块”,该监控模块中具有K2的相关信息,可以判断用户的输入是否为密钥K2,记该模块的长度为N4字节。
d).对于给定的程序源码P1(该程序为待嵌入水印信息的程序),将其送入“冗余嵌入器”。“冗余嵌入器”在程序源码中加入5块冗余代码,确保这5块冗余代码在编译后的目标码中的长度分别为N0,N1,N2,N3,N4字节;并且做好识别标记,确保从目标码中可以准确找到这5块冗余空间,记嵌入冗余空间的源代码为P2
e).将P2送入到编译器,经过编译器的编译,可得到目标码O1,该目标码中具有5块冗余代码,且5块冗余代码的长度分别为N0,N1,N2,N3,N4,分别称这5块冗余代码为第0,1,2,3,4块冗余代码。
f).利用“混沌替换方法”,将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到目标码O1的非冗余代码中,并将嵌入后需要保存的信息保存到第1,2,3,4块冗余代码(即将第1,2,3,4块冗余代码覆盖)。
g).利用“混沌散列方法”将水印信息W2嵌入到除第0,1,2,3,4冗余代码和混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块的嵌入位置以外的所有代码部分,并将嵌入水印后需要保存的信息保存到第0块冗余代码(即将第0块冗余代码覆盖)。
h).修改执行文件的头部信息,使可执行代码的开始执行位置为“输入监控模块”。此时得到的目标码O2即为嵌入水印后的目标码。
步骤a)中使用的混沌系统S为一维PWLCM混沌映射,鉴于混沌系统在数字设备上实现,不可避免地会发生退化现象。因此本发明引入另外一个混沌系统——logistic映射,使两个混沌系统互相扰动,生成混沌序列,可有效提高混沌系统的退化。
步骤b),c)中的“模块生成器”生成的混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块。这4个模块是目标码形式的代码,嵌入到软件当中可以直接运行。对于混沌系统模块的生成,必须与步骤a)中的“混沌系统S”相匹配,且其混沌系统的初时值和控制参数直接以硬编码的形式保存在该模块中;反逆向工程模块包括反静态分析模块和反动态调试两个模块,根据用户对反逆向工程强度的需要,可使用“用户配置信息”选择不同的反逆向工程技术生成反逆向工程模块;输入监控模块的功能是监控用户输入,当用户输入的密钥与K2相匹配时,该模块激活水印解码模块,从而提取水印信息。在本发明中,K2的单项散列值保存在该模块中,将用户的输入进行单项散列,如果值相同,则认为该输入与K2相匹配,进而调用水印解码模块解码水印信息;水印解码模块的主要任务就是解码水印信息,并以可视行为提交给用户。
步骤d)中需要嵌入冗余代码,嵌入的冗余代码除需精确控制大小外,还需能够从编译后的目标中方便可靠地找到这些冗余代码。本发明的方法是:在代码中直接写入特殊值,这样既可以保证精确控制大小,又可以方便地从目标码中找到冗余块。
步骤h)中采用“混沌散列方法”完成水印信息的嵌入。该嵌入过程可分为两步:①迭代混沌系统,生成混沌序列,利用该序列确定水印信息的嵌入位置,使这些嵌入位置均匀散列在所有待嵌水印的代码区域;②采用“混沌替换方法”,用水印信息替换第①步中确定的嵌入位置处的代码信息。
附图说明
图1本发明的水印嵌入框架图
图2混沌系统框架图
图3确定水印嵌入位置流程图
具体实施方式
本发明给出了一种源码和目标码联合嵌入的软件水印方法,该方法将源码级嵌入水印与目标码级嵌入水印相结合,将软件的版权信息,用户的指纹信息嵌入到软件当中,为软件提供版权申明的功能,一旦发生盗版可以追查盗版源;通过引入反逆向工程技术,以抵抗逆向工程攻击;通过引入混沌系统,把水印信息散列编码到整个代码当中,以保护全部代码。
在本水印方法中,嵌入到软件当中的信息包括:混沌系统、输入监控模块、水印解码模块、反逆向工程模块、水印信息5部分。图1所示是显示本发明的基本结构方块图,其嵌入过程如下:
1)混沌系统S以给定的密钥K1,迭代产生混沌序列,并列用该序列对水印信息W1进行编码,得到编码后的水印信息W2,使其更适合于嵌入到程序当中,记W2的长度为N0字节。
2)在用户配置信息的控制下,“模块生成器”生成混沌系统模块、水印解码模块、反逆向工程模块。这里需要特别指出的是混沌系统模块必须与步骤1中的“混沌系统S”相匹配,记这三个模块的长度分别为N1,N2,N3字节。
3)在密钥K2的控制下,“模块生成器”生成“输入监控模块”,该监控模块中具有K2的相关信息,可以判断用户的输入是否为密钥K2,记该模块的长度为N4字节。
4)对于给定的程序源码P1(该程序为待嵌入水印信息的程序),将其送入“冗余嵌入器”。“冗余嵌入器”在程序源码中加入5块冗余代码,确保这5块冗余代码在编译后的目标码中的长度分别为N0,N1,N2,N3,N4字节;并且做好识别标记,确保从目标码中可以准确找到这5块冗余空间,记嵌入冗余空间的源代码为P2
5)将P2送入到编译器,经过编译器的编译,可得到目标码O1,该目标码中具有5块冗余代码,且5块冗余代码的长度分别为N0,N1,N2,N3,N4,分别称这5块冗余代码为第0,1,2,3,4块冗余代码。
6)利用“混沌替换方法”,将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到目标码O1的非冗余代码中,并将嵌入后需要保存的信息保存到第1,2,3,4块冗余代码(即将第1,2,3,4块冗余代码覆盖)。
7)利用“混沌散列方法”将水印信息W2嵌入到除第0,1,2,3,4冗余代码和混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块的嵌入位置以外的所有代码部分,并将嵌入水印后需要保存的信息保存到第0块冗余代码(即将第0块冗余代码覆盖)。
8)修改执行文件的头部信息,使可执行代码的开始执行位置为“输入监控模块”。此时得到的目标码O2即为嵌入水印后的目标码。
1、混沌系统
本发明的水印信息编码、混沌散列方法、混沌替换方法中都用到了混沌系统,因此选择一个计算简单、混沌性质好的混沌系统尤为重要。众所周知,混沌系统在数字化设备上实现时,不可避免地带来其动力学特性退化的问题。一般来说,要解决这一问题,可以从两方面着手:①提高数字化设备的运算精度;②对混沌系统进行扰动,防止其进入短周期或不动点。
在本发明中,要求混沌系统在普通计算机上实现,如果要提高计算机的计算精度,必然带来巨大的运算量,因此本发明从对混沌系统增加扰动的角度来防止其动力学特性的退化。本发明使用双混沌相互扰动的策略实现数字化混沌,其基本框架如图2所示,该系统包括主混沌和影子混沌两个混沌系统。其中,主混沌系统为一维线性混沌映射,其方程式为(1)。
x ( t + 1 ) = x ( t ) - ip / l p / l ; ip l &le; x ( t ) &le; ( i + 1 ) p l x ( t ) - ( p + i ( 0.5 - p ) / l ) ( 0.5 - p ) / l ; p + i ( 0.5 - p ) l &le; x ( t ) &le; p + ( i + 1 ) ( 0.5 - p ) l 0 ; x ( t ) = 0.5 F ( 1 - x ( t ) , p ) ; 0.5 < x ( t ) < 1.0 - - - ( 1 )
其中,l∈Z+是的映射的分段参数,i∈{0,1,2,Λ,l-1}。
影子混沌系统为Logistic映射,其方程为式(2),其中b∈(3.6,4]为Logistic的参数。
x(t+1)=bx(1-x)                                    (2)
一维线性混沌映射对Logistic映射的扰动方法如式(3):
x L &prime; = ( x L + x Y 10 - 5 ) mod 1 - - - ( 3 )
其中xL是Logistic映射的当前状态,xY是一维线性混沌映射的当前状态,
Figure A200810188310D0009142918QIETU
是扰动之后的Logistic映射的状态。
Logistic映射对一维线性混沌映射的扰动方案如式(4):
x Y &prime; = ( x Y + x L 10 - 3 ) mod 1 - - - ( 4 )
其中xY是Logistic映射的当前状态,xL是一维线性混沌映射的当前状态,是扰动之后的Logistic映射的状态。
2、水印编码
本发明的水印信息经过编码后再嵌入到软件当中,该编码过程主要是为了是水印信息的0,1比例均匀。现给出该编码方法:
将水印信息按8bit分割,记分割后的水印信息为W=(w1,w2,Λ,wn),则wi∈{0,1,2,Λ,255};生成长度为n的混沌序列S=(s1,s2,Λ,sn),其中si∈(0,1),则该编码过程为:
3、模块生成器
模块生成器的主要功能是依据用户的配置文件,构造混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块,这4个模块是可执行代码形式的模块。本发明使用汇编语言直接编写这些模块,并将编译后的结果作为待嵌入信息嵌入到软件当中。但是,在使用汇编语言编写时遇到两个问题:
①当各模块被嵌入到不同的可执行文件中后,各模块代码及数据加载到内存的位置不同,代码在执行过程中无法找到代码及数据的正确位置,必须进行自定位。
②嵌入水印后代码不重新编译,故无法通过编译器、加载器自动找到各模块中使用的Windows API的地址,需要各模块自己获取Windows API的地址。
本文发明使用如下技术来解决这两个问题:
①代码及数据的自定位可通过call/pop/sub指令实现,具体代码(Win32汇编语言编写)如图3,ebx是实际加载地址与设计预期地址的偏差。数据或代码的设计预期地址与ebx之和就是其实际地址,即可实现自定位。
②Windows API的地址可通过如下方法获取:
首先,获得kernel32.dll的加载基址。Windows系统提供了线程之间独立的异常处理方法——结构化异常处理。系统把所有异常处理函数挂在一个链表上,链表的最后一个元素是系统默认异常处理函数,该函数在kernel32.dll模块中。通过遍历异常处理链表,得到系统默认异常处理函数的地址,从该地址的页边界对齐地址开始,以页粒度向低地址搜寻,便可找到kernel32.dll的加载基址。
其次,通过kernel32.dll的导出表获得Windows API函数GetProcAddress、LoadLibrary的地址。
最后,通过GetProcAddress、LoadLibrary得到任意DLL模块导出的任意函数的地址。
下面分别描述混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块:
混沌系统模块:
该模块用于水印提取时生成混沌序列,与图1中“混沌系统S”的功能相同。
水印解码模块:
该模块用于水印提取时对水印进行解码,是图1中“水印编码器”逆运算的实现。
反逆向工程模块:
该模块用于抵抗嵌入水印后的软件被逆向分析。该模块设计的原则是延长逆向工程所需的时间,使其在时间上不可行,或使攻击者在逆向工程上耗费的代价大于通过逆向工程所得到的利益。逆向工程技术可以分为静态分析和动态跟踪两类,因此该模块分为反静态分析模块和反动态跟踪模块。
静态分析的基础是反汇编,因此可以从扰乱反汇编入手抵抗静态分析。一般而言,程序的代码和数据是分离的,反汇编工具就是基于此设计的。基于冯.诺依曼体系的计算机不区分数据和指令,所以可以采用指令和数据混和的技术扰乱反汇编。在指令之间加入一些特定数据(花指令),就会扰乱正常反汇编,从而达到抵抗静态分析的目的。
本发明在实现中把花指令插入到输入监控模块、反逆向工程模块、水印解码模块当中。进一步完善的实现还可把代码加密、压缩等反静态分析技术运用到该模块当中,这将可以进一步增强其抗静态分析的能力。
动态跟踪高度依赖于调试工具。模仿杀毒软件杀毒的原理,寻找各调试工具的特征,基于此特征检测程序是否正在被调试,若正在被调试,把程序引导到错误的控制流上,阻止调试工具对程序的动态跟踪。本文在方法实现时基于SoftICE、Windbg、Ollydbg的特征实现了反跟踪,实验表明可以有效抵抗利用这些调试工具的跟踪。进一步完善的方法实现可以基于更多的调试器特征实现反动态跟踪。
i386体系的处理器集成了硬件寄存器专门提供对调试的支持,一些优秀的调试工具利用这些调试寄存器设计了逆向工程中实用的功能,如BPM功能,硬件断点等。本文在方法实现中通过修改调试寄存器而使调试器的BPM功能、硬件断点功能失效。此外,本文在方法实现中还加入了时间敏感代码(一般而言,程序被调试时执行的时间远远大于程序正常执行的时间,据此可以设计时间敏感代码实现反动态跟踪)、断点检测(检测代码中是否被设置断点,如果设置了断点可修改断点设置位置,使断点设置失败)的反动态跟踪技术。
本发明实现了一些反逆向工程技术,值得强调的是,该模块是开放模块,可以添加更多更有效的反逆向工程技术,从而不断提高水印对逆向工程攻击的抵抗性。
输入监控模块:
该模块通过Hook键盘消息监控用户的输入,对用户的输入计算散列值,如果散列值与K2的散列值相同,则启动水印解码模块。
4、冗余嵌入器
模块生成器需要嵌入冗余代码,嵌入的冗余代码除需精确控制大小外,还需能够从编译后的目标中方便可靠地寻找出这些冗余代码。在本发明的方法是:在代码中直接写入特殊值,这样既可以保证精确控制大小,又可以方便地从目标码中找到冗余块。
5、编译器
编译器采用可以编译源码P1的通用编译器。例如,如果是P1是C语言源码,则编译器可以采用任意可对C语言进行编译的编译器。
6、混沌替换方法
采用混沌替换方法完成嵌入水印提取器模块、反逆向工程模块、输入监控模块,并保存被覆盖后的代码以备恢复代码时使用。以c替换i为例说明其过程如下(c,i是8-bit的整数,G是步骤a)中的数字化混沌系统):
替换之后原来存储i的位置存储c,并保存s以备恢复i。则该过程既是计算s的过程,本文
不是一般性,设混沌系统的状态x∈(0,1),混沌替换方法见式(6)。
s = &PartialD; ( i , c , G ) = i &CirclePlus; &Sigma; k = 1 8 y k - - - ( 6 )
其中:
Figure A200810188310D00122
x为混沌系统的当前状态,G(c)(x)表示混沌系统以x为初值,迭代c次之后的混沌系统的状态。
混沌替换方法的逆过程是用c和s恢复i: i = &PartialD; - 1 ( s , c , G ) , 即:
i = &PartialD; ( i , c , G ) = s &CirclePlus; &Sigma; k = 1 8 y k - - - ( 8 )
一般地,对于集合A={a1,a2,Λ,ak}使用混沌替换方法替换B={b1,b2,Λ,bk},得:
R = { r j } = &PartialD; ( B , A , G ) = { &PartialD; ( b j , a j , G ) } - - - ( 9 )
其中j=1,2,Λ,k。其逆过程记为:
B = &PartialD; - 1 ( R , A , G ) - - - ( 10 )
7、混沌散列方法
采用“混沌散列”完成水印信息的潜入。该嵌入过程可分为两步:①迭代混沌系统,生成混沌序列,利用该序列确定水印信息的嵌入位置;②采用“混沌替换”,用水印信息替换第①步中确定的嵌入位置处的代码。
下面详述通过混沌序列确定水印嵌入位置的方法。为了方便描述,设水印信息的长度为L,代码区域的长度为N,则选择位置的过程即为从{1,2,…,N}中随即选择L个数,则该选择过程如下:
①初始化数组A,设置A的长度为N,且A[k]=k,其中k=1,2,3,…,N;
②置i←0;
③迭代混沌系统,得到其当前状态x;
④置
⑤交换A[i]和A[j];
⑥i←i+1;
⑦如果i≤N,转到③;
⑧数组A的前L个数即是所确定的水印的嵌入位置,即A[0],A[1],…,A[L-1]分别是L个水印分量的嵌入位置。
8、修改头部信息
修改执行文件的头部信息,使可执行代码的开始执行位置为“输入监控模块”。此时得到的目标码O2即为嵌入水印后的目标码。

Claims (9)

1、一种源码和目标码联合嵌入的软件水印方法,将混沌系统、输入监控模块、水印解码模块、反逆向工程模块、水印信息嵌入到软件当中,其特征在于,包括以下步骤:
a).混沌系统以给定的密钥K1,迭代产生混沌序列,并列用该序列对水印信息W1进行编码,得到编码后的水印信息W2,使其更适合于嵌入到程序当中,记W2的长度为N0字节;
b).在用户配置信息的控制下,模块生成器生成混沌系统模块、水印解码模块、反逆向工程模块,将这三个模块的长度分别记为N1,N2,N3字节;
c).所述模块生成器利用密钥K2生成输入监控模块,该监控模块中具有K2的相关信息,可以判断用户的输入是否为密钥K2,将该模块的长度记为N4字节;
d).对于待嵌入水印信息的程序所给定的程序源码P1,将其送入冗余嵌入器,冗余嵌入器在程序源码中加入5块冗余代码,确保这5块冗余代码在编译后的目标码中的长度分别为N0,N1,N2,N3,N4字节,并且做好识别标记,确保从目标码中可以准确找到这5块冗余空间,记嵌入冗余空间的源代码为P2
e).将P2送入到编译器,经过编译器的编译,可得到目标码O1,该目标码中具有5块冗余代码,且5块冗余代码的长度分别为N0,N1,N2,N3,N4,分别称这5块冗余代码为第0,1,2,3,4块冗余代码;
f).利用混沌替换,将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到目标码O1的非冗余代码中,并将嵌入后需要保存的信息保存到第1,2,3,4块冗余代码,即将第1,2,3,4块冗余代码覆盖;
g).利用混沌系统生成的混沌序列,将编码后的水印信息W2,利用混沌散列嵌入到除第0,1,2,3,4冗余代码和混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块的嵌入位置以外的所有代码部分,并将嵌入水印后需要保存的信息保存到第0块冗余代码,即将第0块冗余代码覆盖;
h).修改执行文件的头部信息,使可执行代码的开始执行位置为输入监控模块,此时得到的目标码O2即为嵌入水印后的目标码。
2、根据权利要求1所述的方法,其中步骤d)中所述的冗余代码的嵌入,采用在代码中直接写入特殊值,以精确控制大小,并从目标代码中找到冗余块。
3、根据权利要求1所述的方法,其中步骤f)中采用的混沌替换将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到软件当中,并保存被覆盖后的代码以备恢复代码时使用。
4、根据权利要求1、2或3所述的方法,c,i是8-bit的整数,G是步骤a)中的数字化混沌系统,替换之后原来存储i的位置存储c,并保存s以备恢复i,其计算s的过程为:
Figure A200810188310C00031
其中:x∈[0,1)为混沌系统的当前状态,G(c)(x)表示混沌系统以x为初值,迭代c次之后的混沌系统的状态,
Figure A200810188310C00032
为模2加。
5、根据权利要求1、2、3或4所述的方法,其中步骤h)中采用混沌散列完成水印信息的嵌入,该嵌入过程具体包括如下两步骤:
①迭代混沌系统,生成混沌序列,利用该序列确定水印信息的嵌入位置,使这些嵌入位置均匀散列在所有待嵌水印的代码区域;
②采用“混沌替换”,用水印信息替换第①步中确定的嵌入位置处的代码。
6、根据权利要求1、2、3或4所述的方法,其中处理步骤中包括主混沌和影子混沌,并且两个混沌系统互相扰动,生成混沌序列。
7、根据权利要求1、2、3或4所述的方法,其中水印信息的处理如下:
将水印信息按8bit分割,记分割后的水印信息为W=(w1,w2,Λ,wn),则wi∈{0,1,2,Λ,255};生成长度为n的混沌序列S=(s1,s2,Λ,sn),其中si∈(0,1),
Figure A200810188310C00033
8、根据权利要求1、2、3或4所述的方法,其中通过Hook键盘消息监控用户的输入,对用户的输入计算散列值,如果散列值与K2的散列值相同,则启动水印解码模块。
9、根据权利要求6所述的方法,其中主混沌系统为一维线性混沌,其方程式为:
x ( t + 1 ) = x ( t ) - ip / l p / l ; ip l &le; x ( t ) &le; ( i + 1 ) p l x ( t ) - ( p + i ( 0.5 - p ) / l ) ( 0.5 - p ) / l ; p + i ( 0.5 - p ) l &le; x ( t ) &le; p + ( i + 1 ) ( 0.5 - p ) l 0 ; x ( t ) = 0.5 F ( 1 - x ( t ) , p ) ; 0.5 < x ( t ) < 1.0
其中,l∈Z+是的映射的分段参数,i∈{0,1,2,Λ,l-1}。
CN 200810188310 2008-12-25 2008-12-25 源码和目标码联合嵌入的软件水印方法 Expired - Fee Related CN101477610B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200810188310 CN101477610B (zh) 2008-12-25 2008-12-25 源码和目标码联合嵌入的软件水印方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200810188310 CN101477610B (zh) 2008-12-25 2008-12-25 源码和目标码联合嵌入的软件水印方法

Publications (2)

Publication Number Publication Date
CN101477610A true CN101477610A (zh) 2009-07-08
CN101477610B CN101477610B (zh) 2011-05-18

Family

ID=40838320

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200810188310 Expired - Fee Related CN101477610B (zh) 2008-12-25 2008-12-25 源码和目标码联合嵌入的软件水印方法

Country Status (1)

Country Link
CN (1) CN101477610B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866410A (zh) * 2010-04-30 2010-10-20 湖南大学 在Java软件中嵌入和提取水印的方法
CN102122335A (zh) * 2010-12-24 2011-07-13 清华大学 一种利用软件水印限制非法java软件运行的方法
CN103093155A (zh) * 2012-12-07 2013-05-08 中北大学 基于源码修改的信息隐藏方法
CN105224833A (zh) * 2014-06-30 2016-01-06 北京金山安全软件有限公司 利用数字水印识别应用程序是否是正版的方法及系统
CN105765896A (zh) * 2013-12-05 2016-07-13 皇家飞利浦有限公司 用于表格网络的迭代应用的计算设备
CN106126983A (zh) * 2016-08-30 2016-11-16 珠海金山网络游戏科技有限公司 一种防范预发布游戏盗版的数字指纹系统和方法
CN106599631A (zh) * 2016-12-14 2017-04-26 吉林大学 一种基于函数调用的软件水印信息处理方法
CN107659752A (zh) * 2017-09-19 2018-02-02 中国矿业大学 基于dna编码和混沌的多图像加密方法
CN108027731A (zh) * 2015-09-19 2018-05-11 微软技术许可有限责任公司 针对基于块的处理器的调试支持
CN104335219B (zh) * 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统
CN113486304A (zh) * 2021-07-07 2021-10-08 广州宇诚达信息科技有限公司 一种图像或视频防盗版系统及方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101866410A (zh) * 2010-04-30 2010-10-20 湖南大学 在Java软件中嵌入和提取水印的方法
CN102122335A (zh) * 2010-12-24 2011-07-13 清华大学 一种利用软件水印限制非法java软件运行的方法
CN104335219B (zh) * 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统
CN103093155A (zh) * 2012-12-07 2013-05-08 中北大学 基于源码修改的信息隐藏方法
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
CN105765896B (zh) * 2013-12-05 2020-02-07 皇家飞利浦有限公司 用于表格网络的迭代应用的计算设备
CN105765896A (zh) * 2013-12-05 2016-07-13 皇家飞利浦有限公司 用于表格网络的迭代应用的计算设备
WO2016000557A1 (zh) * 2014-06-30 2016-01-07 北京金山安全软件有限公司 利用数字水印识别应用程序是否是正版的方法及系统
CN105224833B (zh) * 2014-06-30 2018-03-30 北京金山安全软件有限公司 利用数字水印识别应用程序是否是正版的方法及系统
CN105224833A (zh) * 2014-06-30 2016-01-06 北京金山安全软件有限公司 利用数字水印识别应用程序是否是正版的方法及系统
CN108027731A (zh) * 2015-09-19 2018-05-11 微软技术许可有限责任公司 针对基于块的处理器的调试支持
CN108027731B (zh) * 2015-09-19 2021-05-25 微软技术许可有限责任公司 针对基于块的处理器的调试支持
CN106126983A (zh) * 2016-08-30 2016-11-16 珠海金山网络游戏科技有限公司 一种防范预发布游戏盗版的数字指纹系统和方法
CN106126983B (zh) * 2016-08-30 2019-05-03 珠海金山网络游戏科技有限公司 一种防范预发布游戏盗版的数字指纹系统和方法
CN106599631A (zh) * 2016-12-14 2017-04-26 吉林大学 一种基于函数调用的软件水印信息处理方法
CN107659752A (zh) * 2017-09-19 2018-02-02 中国矿业大学 基于dna编码和混沌的多图像加密方法
CN107659752B (zh) * 2017-09-19 2020-01-14 中国矿业大学 基于dna编码和混沌的多图像加密方法
CN113486304A (zh) * 2021-07-07 2021-10-08 广州宇诚达信息科技有限公司 一种图像或视频防盗版系统及方法

Also Published As

Publication number Publication date
CN101477610B (zh) 2011-05-18

Similar Documents

Publication Publication Date Title
CN101477610B (zh) 源码和目标码联合嵌入的软件水印方法
Schrittwieser et al. Protecting software through obfuscation: Can it keep pace with progress in code analysis?
Tian et al. Software plagiarism detection with birthmarks based on dynamic key instruction sequences
Zhang et al. A first step towards algorithm plagiarism detection
Zhou et al. AppInk: watermarking android apps for repackaging deterrence
Myles et al. Software watermarking through register allocation: Implementation, analysis, and attacks
Caselden et al. Hi-cfg: Construction by binary analysis and application to attack polymorphism
TW200841209A (en) Obfuscating computer program code
TW200837604A (en) Obfuscating computer program code
Yadegari et al. Bit-level taint analysis
Tian et al. DKISB: Dynamic key instruction sequence birthmark for software plagiarism detection
Collberg et al. More on graph theoretic software watermarks: Implementation, analysis, and attacks
CN105653905A (zh) 一种基于api安全属性隐藏与攻击威胁监控的软件保护方法
Balachandran et al. Software code obfuscation by hiding control flow information in stack
Lu et al. A software birthmark based on dynamic opcode n-gram
Bars et al. Fuzztruction: using fault injection-based fuzzing to leverage implicit domain knowledge
Chen et al. Semantic-integrated software watermarking with tamper-proofing
Dalai et al. A code obfuscation technique to prevent reverse engineering
Zhu et al. Protection against indirect overflow attacks on pointers
CN110520860B (zh) 用于防护软件代码的方法
US20100095376A1 (en) Software watermarking
Chen et al. Software watermarking for java program based on method name encoding
Li et al. Chosen-instruction attack against commercial code virtualization obfuscators
Al-Saleh et al. On information flow for intrusion detection: What if accurate full-system dynamic information flow tracking was possible?
Co et al. Double Helix and RAVEN: a system for cyber fault tolerance and recovery

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110518

Termination date: 20121225