一种用于代码溯源的程序水印嵌入和提取方法及系统技术方案

技术编号:39050570 阅读:12 留言:0更新日期:2023-10-12 19:43
本发明专利技术公开了一种用于代码溯源的程序水印嵌入和提取方法及系统,包括:由源代码构建函数调用图;按照逆拓扑排序遍历函数调用图,将存在调用关系的函数划分为一个代码块并对每一个代码块进行信息流分析得到代码块中的信息流关系;构建源程序的代码属性图;根据代码块中的信息流关系和代码属性图形成程序联合属性图;对程序联合属性图中变量节点的关系边数进行计算并选取关键节点;根据关键节点和用户身份信息嵌入水印;将关键节点作为依据进行双向程序切片,并根据水印提取规则提取水印。本发明专利技术不仅可减小水印损失的风险,还可加强水印与源代码间的依赖并提高隐蔽性,降低在静态分析中被发现的风险,无需依赖源代码也能提取到水印信息。提取到水印信息。提取到水印信息。

【技术实现步骤摘要】
一种用于代码溯源的程序水印嵌入和提取方法及系统


[0001]本专利技术涉及代码溯源的
,尤其涉及一种用于代码溯源的程序水印嵌入和提取方法及系统。

技术介绍

[0002]随着计算机行业的飞速发展,人们的生活发生了巨大的变化。计算机科学技术已经在各个行业广泛使用,各种各样用于娱乐、工作、学习、生活的软件层出不穷。然而,在带了便利的的同时,软件的广泛使用也带了许多版权问题。大量软件被克隆、分析等方式盗用并非法传播,许多靠盗版软件盈利和窃取用户信息的行为越来越猖狂,因此如何保护软件的版权成为了一个亟待解决的问题。
[0003]随着软件版权问题的日益严重,软件水印这一软件保护方法成为了研究的热点。一直以来,软件水印研究领域,在国内外的专家和研究学者的努力之下,在软件水印技术方面的研究已取得一定的研究成果,各种软件水印保护技术已逐步运用到软件行业当中。
[0004]软件水印保护技术作为解决软件版权保护问题的热门方法,目前仍处于研究中的探索阶段,在实际应用中存在一些问题:很多方法都是对被保护软件进行整体分析,忽略了软件中局部代码被复用的情况;动态水印方法需要执行代码来实现软件保护,有些甚至需要多次执行,不适用于执行代价较大的程序;一些方法添加与源代码完全无关的自由变量来添加语句,隐蔽性差,水印信息容易被篡改;而基于特征的水印方法需要依赖源代码才能获取特征作对比。
[0005]针对以上问题,本专利技术提出一种通过关键节点建立水印与源程序之间的依赖关系的程序水印嵌入和提取方法。对于现实中可能存在的代码泄漏被重复利用的问题,本方法可以在源代码中通过关键节点嵌入用户信息,提高隐蔽性,将用户信息与源代码建立依赖关系,若后续存在代码泄漏的情况,可以通过水印提取,追溯到泄漏的源头,找到被泄露代码对应的用户,不需要依赖源代码。

技术实现思路

[0006]本部分的目的在于概述本专利技术的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和专利技术名称中可能会做些简化或省略以避免使本部分、说明书摘要和专利技术名称的目的模糊,而这种简化或省略不能用于限制本专利技术的范围。
[0007]鉴于上述现有存在的问题,提出了本专利技术。
[0008]因此,本专利技术目的是提供一种用于代码溯源的程序水印嵌入和提取方法,解决目前软件水印保护技术在实际运用中忽略了软件中局部代码被复用的情况、不适用于执行代价较大的程序、隐蔽性差、水印信息容易被篡改以及无法摆脱源代码获取特征作对比的问题。
[0009]为解决上述技术问题,本专利技术提供如下技术方案:
[0010]第一方面,本专利技术实施例提供了一种用于代码溯源的程序水印嵌入和提取方法方
法,包括:
[0011]将源代码以函数为单位,构建函数调用图;
[0012]按照逆拓扑排序遍历所述函数调用图,将存在调用关系的函数划分为一个代码块并对所述每一个代码块进行信息流分析得到所述代码块中的信息流关系;
[0013]基于代码块的抽象语法树、控制流图以及程序依赖图构建源程序的代码属性图;
[0014]根据所述代码块中的信息流关系和所述代码属性图形成程序联合属性图;
[0015]对所述程序联合属性图中变量节点的关系边数进行计算并选取关键节点;
[0016]根据所述关键节点和用户身份信息嵌入水印;
[0017]将所述关键节点作为依据进行前向程序切片和后向程序的双向程序切片,并根据水印提取规则提取水印。
[0018]作为本专利技术所述的一种用于代码溯源的程序水印嵌入和提取方法方法,其中:对所述每一个代码块进行信息流分析得到所述代码块中的信息流关系包括,
[0019]获取变量与变量、变量与表达式、表达式与变量的关系;
[0020]其中,设定G(S)为语句S的控制流图,v、v1和v2为变量,e为表达式;
[0021]则变量与变量的关系λ如下:
[0022]若v1在G(S)的入口的值,参与计算G(S)中e的值,且e的值用于确定v2在G(S)的出口的值,则称v1和v2具有λ关系,设定v1λv2=1;
[0023]若v1在G(S)的入口的值不参与v2在G(S)的出口的值的计算,则设定v1λv2=0;
[0024]变量与表达式的关系ρ如下:
[0025]若v在G(S)入口处的值,参与计算G(S)中e的值,则称v和e具有ρ关系,设定vρe=1;
[0026]若v在G(S)入口处的值,不参与计算G(S)中e的值,则设定vρe=0;
[0027]表达式与变量的关系μ如下:
[0028]若e参与v在G(S)出口处值的计算,则e和v具有关系μ,设定eμv=1;
[0029]若e不参与v在G(S)出口处值的计算,则设定eμv=0。
[0030]作为本专利技术所述的一种用于代码溯源的程序水印嵌入和提取方法方法,其中:根据所述代码块中的信息流关系和所述代码属性图形成程序联合属性图包括在所述代码属性图上增加表示信息流关系的边和函数调用边,构成程序联合属性图。
[0031]作为本专利技术所述的一种用于代码溯源的程序水印嵌入和提取方法方法,其中:对所述程序联合属性图中变量节点的关系边数进行计算并选取边关系最多的节点作为关键节点包括,
[0032]将图中变量节点的关系边数作为重要度imp(a)的度量标准,计算所述程序联合属性图中每个变量节点的关系边数sume(a),得到imp(a)=sume(a);
[0033]选取边关系最多的节点作为关键节点key;
[0034]其中,若存在多个节点重要度相等的情况,则检查几个节点之间是否存在λ关系;
[0035]若存在存在λ关系,则根据所述λ关系选取关键节点;
[0036]否则选取程序中最先出现的节点作为关键节点。
[0037]作为本专利技术所述的一种用于代码溯源的程序水印嵌入和提取方法方法,其中:根据所述关键节点和用户身份信息嵌入水印包括,
[0038]采用二进制身份码表示分发到的用户身份;
[0039]根据所述关键节点的控制流关系表示水印开始,数据流关系表示水印结束和身份码;
[0040]通过不影响程序的控制流和数据流语句与所述关键节点建立依赖关系表示水印信息,保证进行水印提取时通过程序切片提取到水印信息;
[0041]在水印中添加水印开始与结束的标志,便于水印提取;
[0042]选取合适的位置嵌入水印信息:
[0043]遍历代码块寻找关键节点;
[0044]在所述关键节点之后嵌入水印信息;
[0045]寻找分支语句,并避开循环体减少程序运行时不必要的消耗。
[0046]作为本专利技术所述的一种用于代码溯源的程序水印嵌入和提取方法方法,其中:寻找分支语句,并避开循环体减少程序运行时不必要的消耗包括,
[0047]若有分支语句,则将水印嵌入分支语句中;
[0048]否则,构造一个分支语句嵌入水印;
[0049]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于代码溯源的程序水印嵌入和提取方法,其特征在于:包括,将源代码以函数为单位,构建函数调用图;按照逆拓扑排序遍历所述函数调用图,将存在调用关系的函数划分为一个代码块并对所述每一个代码块进行信息流分析得到所述代码块中的信息流关系;基于代码块的抽象语法树、控制流图以及程序依赖图构建源程序的代码属性图;根据所述代码块中的信息流关系和所述代码属性图形成程序联合属性图;对所述程序联合属性图中变量节点的关系边数进行计算并选取关键节点;根据所述关键节点和用户身份信息嵌入水印;将所述关键节点作为依据进行前向程序切片和后向程序的双向程序切片,并根据水印提取规则提取水印。2.如权利要求1所述的用于代码溯源的程序水印嵌入和提取方法,其特征在于:对所述每一个代码块进行信息流分析得到所述代码块中的信息流关系包括,获取变量与变量、变量与表达式、表达式与变量的关系;其中,设定G(S)为语句S的控制流图,v、v1和v2为变量,e为表达式;则变量与变量的关系λ如下:若v1在G(S)的入口的值,参与G(S)中e的计算,且e的值用于确定v2在G(S)的出口的值,则称v1和v2具有λ关系,设定v1λv2=1;若v1在G(S)的入口的值,不参与v2在G(S)的出口的值的计算,则设定v1λv2=0;变量与表达式的关系ρ如下:若v在G(S)入口处的值,参与G(S)中e的计算,则称v和e具有ρ关系,设定vρe=1;若v在G(S)入口处的值,不参与G(S)中e的计算,则设定vρe=0;表达式与变量的关系μ如下:若e参与v在G(S)出口处值的计算,则e和v具有关系μ,设定eμv=1;若e不参与v在G(S)出口处值的计算,则设定eμv=0。3.如权利要求2所述的用于代码溯源的程序水印嵌入和提取方法,其特征在于:根据所述代码块中的信息流关系和所述代码属性图形成程序联合属性图包括在所述代码属性图上增加表示信息流关系的边和函数调用边,构成程序联合属性图。4.如权利要求2或3所述的用于代码溯源的程序水印嵌入和提取方法,其特征在于:对所述程序联合属性图中变量节点的关系边数进行计算并选取边关系最多的节点作为关键节点包括,将图中变量节点的关系边数作为重要度imp(a)的度量标准,计算所述程序联合属性图中每个变量节点的关系边数sume(a),得到imp(a)=sume(a);选取边关系最多的节点作为关键节点key;其中,若存在多个节点重要度相等的情况,则检查几个节点之间是否存在λ关系;若存在存在λ关系,则根据所述λ关系选取关键节点;否则选取程序中最先出现的节点作为关键节点。5.如权利要求1所述的用于代码溯源的程序水印嵌入和提取方法,其特征在于:根据所述关键节点和用户身份信息嵌入水印包...

【专利技术属性】
技术研发人员:张迎周潘世文白瑶瑶薛渝川谢金言李涵
申请(专利权)人:南京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1