主权项 |
1.一种源码和目标码联合嵌入的软件水印方法,将混沌系统、输入监控模块、水印解码模块、反逆向工程模块、水印信息嵌入到软件当中,其特征在于,包括以下步骤:a)混沌系统以给定的密钥K<sub>1</sub>,迭代产生混沌序列,并列用该序列对水印信息W<sub>1</sub>进行编码,得到编码后的水印信息W<sub>2</sub>,使其更适合于嵌入到程序当中,记W<sub>2</sub>的长度为N<sub>0</sub>字节,所述混沌系统包括主混沌系统和影子混沌两个混沌系统,其中主混沌系统为一维PWLCM混沌映射:<maths num="0001"><![CDATA[<math><mrow><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mfrac><mrow><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><mi>ip</mi><mo>/</mo><mi>l</mi></mrow><mrow><mi>p</mi><mo>/</mo><mi>l</mi></mrow></mfrac><mo>;</mo></mtd><mtd><mfrac><mi>ip</mi><mi>l</mi></mfrac><mo>≤</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>≤</mo><mfrac><mrow><mrow><mo>(</mo><mi>i</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mi>p</mi></mrow><mi>l</mi></mfrac></mtd></mtr><mtr><mtd><mfrac><mrow><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><mi>p</mi><mo>+</mo><mi>i</mi><mrow><mo>(</mo><mn>0.5</mn><mo>-</mo><mi>p</mi><mo>)</mo></mrow><mo>/</mo><mi>l</mi><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mn>0.5</mn><mo>-</mo><mi>p</mi><mo>)</mo></mrow><mo>/</mo><mi>l</mi></mrow></mfrac><mo>;</mo></mtd><mtd><mi>p</mi><mo>+</mo><mfrac><mrow><mi>i</mi><mrow><mo>(</mo><mn>0.5</mn><mo>-</mo><mi>p</mi><mo>)</mo></mrow></mrow><mi>l</mi></mfrac><mo>≤</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>≤</mo><mi>p</mi><mo>+</mo><mfrac><mrow><mrow><mo>(</mo><mi>i</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow><mrow><mo>(</mo><mn>0.5</mn><mo>-</mo><mi>p</mi><mo>)</mo></mrow></mrow><mi>l</mi></mfrac></mtd></mtr><mtr><mtd><mn>0</mn><mo>;</mo></mtd><mtd><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mn>0.5</mn></mtd></mtr><mtr><mtd><mi>F</mi><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>p</mi><mo>)</mo></mrow><mo>;</mo></mtd><mtd><mn>0.5</mn><mo><</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo><</mo><mn>1.0</mn></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,l∈Z<sup>+</sup>是的映射的分段参数,i∈{0,1,2,…,l-1};影子混沌系统为Logistic映射,其方程为下式,其中b∈(3.6,4]为Logistic的参数:x(t+1)=bx(1-x)所述混沌系统采用一维PWLCM混沌映射与Logistic映射互相扰动,生成混沌序列,其中,一维PWLCM混沌映射对Logistic映射的扰动方法如下式:x′<sub>L</sub>=(x<sub>L</sub>+x<sub>Y</sub>10<sup>-5</sup>)mod1其中x<sub>L</sub>是Logistic映射的当前状态,x<sub>Y</sub>是一维PWLCM混沌映射的当前状态,x′<sub>L</sub>是扰动之后的Logistic映射的状态;Logistic映射对一维PWLCM混沌映射的扰动方案如下式:x′<sub>Y</sub>=(x<sub>Y</sub>+x<sub>L</sub>10<sup>-3</sup>)mod1其中x<sub>Y</sub>是Logistic映射的当前状态,x<sub>L</sub>是一维PWLCM混沌映射的当前状态,x′<sub>Y</sub>是扰动之后的Logistic映射的状态;b)在用户配置信息的控制下,模块生成器生成混沌系统模块、水印解码模块、反逆向工程模块,将这三个模块的长度分别记为N<sub>1</sub>,N<sub>2</sub>,N<sub>3</sub>字节;c)所述模块生成器利用密钥K<sub>2</sub>生成输入监控模块,该监控模块中具有K<sub>2</sub>的相关信息,可以判断用户的输入是否为密钥K<sub>2</sub>,将该模块的长度记为N<sub>4</sub>字节;d)对于待嵌入水印信息的程序所给定的程序源码P<sub>1</sub>,将其送入冗余嵌入器,冗余嵌入器在程序源码中加入5块冗余代码,确保这5块冗余代码在编译后的目标码中的长度分别为N<sub>0</sub>,N<sub>1</sub>,N<sub>2</sub>,N<sub>3</sub>,N<sub>4</sub>字节,并且做好识别标记,确保从目标码中可以准确找到这5块冗余空间,记嵌入冗余空间的源代码为P<sub>2</sub>;e)将P<sub>2</sub>送入到编译器,经过编译器的编译,可得到目标码O<sub>1</sub>,该目标码中具有5块冗余代码,且5块冗余代码的长度分别为N<sub>0</sub>,N<sub>1</sub>,N<sub>2</sub>,N<sub>3</sub>,N<sub>4</sub>,分别称这5块冗余代码为第0,1,2,3,4块冗余代码;f)利用混沌替换,将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到目标码O<sub>1</sub>的非冗余代码中,并将嵌入后需要保存的信息保存到第1,2,3,4块冗余代码,即将第1,2,3,4块冗余代码覆盖;g)利用混沌系统生成的混沌序列,将编码后的水印信息W<sub>2</sub>,利用混沌散列嵌入到除第0,1,2,3,4冗余代码和混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块的嵌入位置以外的所有代码部分,并将嵌入水印后需要保存的信息保存到第0块冗余代码,即将第0块冗余代码覆盖;h)修改执行文件的头部信息,使可执行代码的开始执行位置为输入监控模块,此时得到的目标码O<sub>2</sub>即为嵌入水印后的目标码;其中步骤d)中的冗余代码的嵌入,采用在代码中直接写入特殊值,以精确控制大小,并从目标码中找到冗余块;其中步骤f)中采用的混沌替换将混沌系统模块、水印解码模块、反逆向工程模块、输入监控模块嵌入到软件当中,并保存被覆盖后的代码以备恢复代码时使用;c,i是8-bit的整数,G是步骤a)中的数字化混沌系统,替换之后原来存储i的位置存储c,并保存s以备恢复i,其计算s的过程为:<img file="FSB00000394207800021.GIF" wi="858" he="125" />其中,x∈[0,1)为混沌系统的当前状态,G<sup>(c)</sup>(x)表示混沌系统以x为初值,迭代c次之后的混沌系统的状态,<img file="FSB00000394207800022.GIF" wi="37" he="37" />为模2加;其中,混沌替换方法的逆过程是用c和s恢复i:<img file="FSB00000394207800023.GIF" wi="282" he="55" /><maths num="0002"><![CDATA[<math><mrow><mi>i</mi><mo>=</mo><mo>∂</mo><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>c</mi><mo>,</mo><mi>G</mi><mo>)</mo></mrow><mo>=</mo><mi>s</mi><mo>⊕</mo><munderover><mi>Σ</mi><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mn>8</mn></munderover><msub><mi>y</mi><mi>k</mi></msub></mrow></math>]]></maths><img file="FSB00000394207800025.GIF" wi="480" he="71" />x为混沌系统的当前状态,G<sup>(c)</sup>(x)表示混沌系统以x为初值,迭代c次之后的混沌系统的状态;对于集合A={a<sub>1</sub>,a<sub>2</sub>,…,a<sub>k</sub>}使用混沌替换方法替换B={b<sub>1</sub>,b<sub>2</sub>,…,b<sub>k</sub>},得:<maths num="0003"><![CDATA[<math><mrow><mi>R</mi><mo>=</mo><mo>{</mo><msub><mi>r</mi><mi>j</mi></msub><mo>}</mo><mo>=</mo><mo>∂</mo><mrow><mo>(</mo><mi>B</mi><mo>,</mo><mi>A</mi><mo>,</mo><mi>G</mi><mo>)</mo></mrow><mo>=</mo><mo>{</mo><mo>∂</mo><mrow><mo>(</mo><msub><mi>b</mi><mi>j</mi></msub><mo>,</mo><msub><mi>a</mi><mi>j</mi></msub><mo>,</mo><mi>G</mi><mo>)</mo></mrow><mo>}</mo></mrow></math>]]></maths>其中j=1,2,…,k。其逆过程记为:<maths num="0004"><![CDATA[<math><mrow><mi>B</mi><mo>=</mo><msup><mo>∂</mo><mrow><mo>-</mo><mn>1</mn></mrow></msup><mrow><mo>(</mo><mi>R</mi><mo>,</mo><mi>A</mi><mo>,</mo><mi>G</mi><mo>)</mo></mrow><mo>.</mo></mrow></math>]]></maths> |