CN101084478B - 为计算机程序代码加水印 - Google Patents

为计算机程序代码加水印 Download PDF

Info

Publication number
CN101084478B
CN101084478B CN2005800440674A CN200580044067A CN101084478B CN 101084478 B CN101084478 B CN 101084478B CN 2005800440674 A CN2005800440674 A CN 2005800440674A CN 200580044067 A CN200580044067 A CN 200580044067A CN 101084478 B CN101084478 B CN 101084478B
Authority
CN
China
Prior art keywords
statement
condition
code
program
computer program
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
Application number
CN2005800440674A
Other languages
English (en)
Other versions
CN101084478A (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.)
Telefonaktiebolaget LM Ericsson AB
Original Assignee
Telefonaktiebolaget LM Ericsson AB
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 Telefonaktiebolaget LM Ericsson AB filed Critical Telefonaktiebolaget LM Ericsson AB
Publication of CN101084478A publication Critical patent/CN101084478A/zh
Application granted granted Critical
Publication of CN101084478B publication Critical patent/CN101084478B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Landscapes

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

Abstract

本发明涉及为计算机程序代码加水印。提供了一种在包括多个程序语句的计算机程序代码中嵌入信息的方法。该方法包括以下步骤:将条件程序语句插入所述计算机程序代码中,所述条件程序语句包括一个条件和多个可选程序语句,所述条件程序语句适于使数据处理系统评价所述条件,并响应于所述评价步骤的结果而选择性地执行所述多个可选程序语句之一;其中所述条件表示所述信息的至少一部分;并且其中所述多个可选程序语句适于使所述计算机程序代码不管所述可选程序语句中的哪一个被执行都产生相同的程序输出。

Description

为计算机程序代码加水印
技术领域
本发明涉及将信息(具体地为数字水印)嵌入计算机程序代码(例如源代码或目标代码)中并对其进行检测。
背景技术
软件制造商和/或发行商通常希望控制该软件的发行,尤其希望能够保护软件不被盗窃,建立/证明软件的所有权,验证软件和/或识别/追踪所发行软件的拷贝。因此,需要为计算机软件(尤其是源代码或部标代码)加水印的有效技术。这种加水印技术的目的是例如通过操纵/更改或添加程序代码而在软件中添加信息(水印或仅仅是标记)。出于识别的目的,例如为了识别软件的购买者等,可将所述信息用作版权通告。通常希望以如下方式嵌入信息:该信息不能被购买者去除,但是可以使用与将标记置入软件的处理有关的知识从该软件中提取出该信息。具体地说,如果水印是不容易检测的(例如通过统计分析),则该水印被认为是秘密的。如果水印能够经受得住诸如代码迷惑(code obfuscation)或代码优化的保留语义的变换并且/或者能够经受得住冲突攻击(collision attack),则该水印被认为是有弹性的。
通常,水印会经受不同的攻击,从而使标记无法识别。各种攻击的示例包括:
-加性攻击:将新水印添加到代码中,从而使得无法再提取原始标记,或者使得无法确定哪一个是原始标记。
-扭曲攻击:使代码经受诸如代码迷惑或代码优化的保留语义的变换,以期望水印被扭曲而无法识别。
-减性攻击:确定水印的位置并使标记从程序中暴露出来(cropout)。
-共谋攻击:使用不同的被标记程序来确定标记的位置。
因此,一般的问题是提供例如由软件的购买者生成在这些攻击下健壮的标记的加水印技术。
当所嵌入的水印是可检测的时,可将该水印从程序中去除(暴露出来)或者用等价表达式来代替,这很可能会破坏原始标记。在现有方案中,嵌入物通常相对易于识别,因而会被暴露出来。
由Christian Collberg等人发表于IEEE Transact.On softw.Eng.,Vol.28,No.8,p735-746的文章“Watermarking,tamper-Proofing,andObfuscation-Tools for software Protection”描述了为程序代码加水印的方法。
迷惑处理是一种用于使代码复杂化的技术,即,将程序代码变换成具有相同的可观测行为但是程序代码更难以理解的程序代码的技术。使用该技术是为了使软件对逆向工程师更难。迷惑处理通常包括重命名、重排序、分散/合并、循环变换等。因此,迷惑处理使得在代码被反编译时更难理解,但是迷惑处理通常对代码的功能没有影响。US 6,668,325公开了可以在加水印时使用的多种代码迷惑技术。
然而,虽然以上现有技术的方法提供了为计算机程序代码加水印的方法,但是仍然存在这样的问题,即,提供一种在研究被标记的软件时导致水印更加难以检测的加水印技术。
具体地说,通过在程序代码中的简单迷惑变化(例如,通过变量重命名、指令重排序、循环变换等)而嵌入水印,涉及水印不够有弹性的问题,这是因为迷惑技术通常就是改变这些属性,从而使水印易于受到迷惑攻击。
此外,还存在这样的问题,即,提供一种允许以健壮的方式对软件的特定拷贝的起源进行识别的加水印技术。
发明内容
以上和其他的问题是通过一种在计算机程序代码中嵌入信息的方法解决的,所述计算机程序代码包括多个程序语句并且适于在被数据处理系统执行时使所述数据处理系统产生程序输出,所述方法包括以下步骤:将一个或更多个条件程序语句插入所述计算机程序代码中,所述条件程序语句各包括各自条件和多个可选程序语句,所述条件程序语句适于使数据处理系统评价所述条件,并响应于所述评价步骤的结果而选择性地执行所述多个可选程序语句之一;其中所述多个可选程序语句适于使所述计算机程序代码不管所述可选程序语句中的哪一个被执行都产生相同的程序输出,其中所述条件表示所述信息的至少一部分;其中按照一个或更多个码字对所述信息进行编码,每个码字对应于一个或更多个预定条件;并且在所述一个或更多个条件程序语句的各自条件中嵌入有数字水印,所述信息包括所述数字水印。
在此描述的方法的一个优点是它提供了具有合理开销的、秘密的、有弹性的标记。
具体地说,在加性攻击中,将其他条件语句插入所述代码。然而,包括水印信息的原始条件代码在所述代码中所处的位置仅为插入者/提取者所知。因此,位于不同位置的条件语句不会使提取者困惑。此外,前面是无法成功解码成信息的条件语句(例如在码字列表中没有对应条目的条件)的条件语句将不会被视为加水印语句。
另外的优点是,在此描述的方法提供了针对如下攻击者的增强的保护,该攻击者为了掩饰未授权拷贝的起源而将代码迷惑成新的拷贝以防止软件所有者识别被迷惑的拷贝。
在此描述的方法的另外的优点是:对诸如迷惑、优化和反编译/重编译的大多数自动攻击具有弹性。
在此描述的方法的其他优点是:不会增加任何显著的开销,即,不会显著地增加带水印的程序代码的大小和/或执行时间。执行时间的增加仅仅是由于对插入条件的评价。大小的增加对应于插入的条件程序代码语句的大小。对于通常的软件应用,这些影响与全部代码的大小相比很小。
在此使用的术语“程序语句”旨在包括构成编程语言的单元,具体地说是这种构成的最小单元。各种语句的示例包括定义、声明、赋值、条件语句、循环和函数/过程调用。
在此使用的术语“条件”旨在包括编程语言中的适于产生并返回结果(即值)的表达式。在条件程序语句中,程序流程根据对条件进行评价而得到的值,在多个可选程序语句之一处继续。例如,一个条件可以是被评价为真(TRUE)或假(FALSE)的布尔表达式。通常,这种条件是在IF...THEN条件程序语句中以及在循环的每次循环反复之前进行评价;当所述条件评价为假时,所述循环退出。条件语句的其他示例包括“switch”语句,其测试控制表达式的等式。switch语句后跟多个“case”子句,每个case子句指定一个可能的测试值并且每个case子句具有与其相关联的程序语句;当所述控制表达式满足一case子句的对应测试值时,执行该case子句的程序语句。
在此使用的编程语言中的术语“表达式”旨在包括值、变量、函数等的组合,其中所述组合根据特定编程语言的优先和关联的具体规则进行解释,该组合适于产生并返回结果,即值。代数表达式产生数值结果,即具有数值数据类型的结果,例如浮点数据类型或整数数据类型。
在此使用的术语“程序输出”旨在包括在程序的执行期间的任何可观测到的行为,例如可被用户、其他计算机程序、其他设备等观测到/注意到的任何程序行为。程序输出的示例包括数值输出、文本输出、二进制输出、输出信号、例如图形输出的可视输出、可听输出等,这些程序输出可以通过诸如计算机屏幕、打印机、存储介质、通信接口等的任何合适的输出设备经由数据接口等进行输出。具体地说,当可选程序语句对应于不同的程序行为从而使得在程序的执行期间不能观测到程序行为的差异时,攻击者要识别水印就变得更加困难。
当所述方法还包括例如通过本领域已知的任何合适的代码迷惑技术对所述多个可选程序语句中的至少一个进行迷惑时,所嵌入信息变得更加秘密。具体地说,为了进行减性攻击,攻击者必须识别出可选程序语句导致了相同的程序行为,随后改变/去除该条件。迷惑一个或更多个可选程序语句提供了这样的可选语句,使得在计算上难以识别出两个可选语句导致了相同的程序行为。
在一个实施例中,各可选程序语句适于更新一个或更多个程序对象,例如变量、数据结构等;并且对于所述程序对象,所述程序输出仅依赖于所述程序对象的一个或更多个预定函数,其中所述一个或更多个函数中的每一个所产生的结果与所述可选程序语句中的哪一个被执行无关。因此,这样一组可选执令能够被容易地实现,并提供了秘密的水印。
当所述方法还包括把要嵌入的信息编码为一个或更多个码字,每个码字对应于一个或更多个对应的预定条件时,提供了一种用于嵌入各种各样的附加信息的有效编码方案。
当对所述信息进行编码包括使用纠错码对所述信息进行编码时,进一步增加了所嵌入信息的弹性。
本发明涉及不同的方面,包括以上所描述的方法和下面的对应设备和计算机程序,每个都生成结合上述方法所描述的一个或更多个益处和优点,并且每个都具有与结合上述方法所描述的实施例相对应的一个或更多个实施例。
具体地说,一种检测嵌入计算机程序代码中的信息的方法,所述计算机程序代码包括多个程序语句并且适于在被数据处理系统执行时使所述数据处理系统产生程序输出,所述方法包括以下步骤:
-对所述计算机程序代码进行解析以识别至少一个条件程序语句,所述条件程序语句包括一个条件程序和多个可选程序语句,所述条件程序语句适于使数据处理系统评价所述条件,并响应于所述评价步骤的结果而选择性地执行所述多个可选程序语句之一;其中所述多个可选程序语句适于使所述计算机程序代码不管所述可选程序语句中的哪一个被执行都产生相同的程序输出;
-从所述至少一个条件中提取所述嵌入计算机程序代码中的信息的至少一部分,其中所述信息是按照一个或更多个码字被编码的,每个码字对应于一个或更多个预定条件;其中,在所述至少一个条件程序语句中包括的所述条件中嵌入有数字水印,所述信息包括所述数字水印。
要注意到,上述和下面的方法的特征可以以软件实现,并且通过执行诸如计算机可执行指令的程序代码手段而使所述特征在数据处理设备或其他处理装置上执行。在这里以及下面,术语“处理装置”包括适于执行上述功能的任何电路和/或设备。具体地说,上述术语包括通用或专用的可编程微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑阵列(PLA)、场可编程门阵列(FPGA)、专用电路等,或其组合。具体地说,在一些实施例中,把要将信息嵌入其中的计算机程序代码或者要检测所嵌入信息的计算机程序代码加载到计算机的存储器中,并且在此描述的嵌入或检测信息的方法中的步骤由所述计算机自动执行。
例如,可将所述程序代码手段从存储介质或经由网络从其他计算机加载到诸如RAM(随机存取存储器)的存储器中。另选的是,所述特征可由硬件电路而不是软件来实现,或者由硬件电路与软件的组合来实现。
根据一方面,提供了一种数据处理系统,该数据处理系统适于被配置为执行以上和后面所描述的方法的步骤。
根据另一方面,提供了一种计算机程序产品,该计算机程序产品包括计算机可执行指令,该计算机可执行指令适于当在数据处理系统上执行时使所述数据处理系统执行以上和后面所描述的方法。
在一些实施例中,将所述计算机程序产品实现为其上存储有计算机可执行指令的计算机可读介质。例如,所述计算机可读介质可以为其上存储有所述计算机可执行指令的压缩盘(CD)、光盘、磁盘、磁存储介质、记忆棒等。例如,所述计算机可读介质在其上可存储有用于嵌入水印的软件应用和用于检测程序代码中的水印的软件应用。可将所述软件应用实现为分立的应用或组合成单个应用。在其他实施例中,将所述计算机程序产品实现为数据信号,例如适当调制的载波信号。例如,可以提供所述计算机可执行指令以供通过计算机网络从服务器计算机下载。
在一些实施例中,所述计算机程序产品包括软件编译器,该软件编译器包括适于使所述数据处理系统执行以上和后面所描述的方法的功能,作为由所述编译器执行的多次编译中的一次。因此,提供了一种用于编译和水印嵌入的集成软件工具。此外,由于在此描述的水印嵌入涉及传统编译器用来分析源代码的一些相同代码分析技术,所以可以重用对应的软件功能,从而提供了一种有效的软件实现方式。
在又一方面中,提供了一种计算机程序,该计算机程序包括通过在此描述的方法而嵌入其中的嵌入信息。在一些实施例中,将所述计算机程序实现为其上存储有计算机程序的计算机可读介质。在其他实施例中,将所述计算机程序实现为数据信号,例如适当调制的载波信号。
出于当前描述的目的,术语“存储装置”和“计算机可读介质”旨在包括任何适合的存储介质、设备或电路,例如只读存储器(ROM)、随机存取存储器(RAM)、闪速存储器、可擦除可编程只读存储器(EPROM)、易失性或非易失性存储器、光存储设备、磁存储设备、磁盘、CD、硬盘等。
附图说明
根据下面参照附图所描述的实施例,以上和其他方面将变得明了和清楚,其中:
图1示出了水印嵌入处理的示意性框图。
图2示出了水印提取处理的示意性框图。
图3示出了将用于对水印进行编码的码字与对应的数学变换相关联的表。
图4示意性地示出了插入条件语句的示例。
图5示出了要加水印的代码片段和对应的带水印的代码片段的示例。
图6示意性地示出了插入条件语句的示例。
图7示意性地示出了修改计算机程序的控制流程以便于插入条件语句的示例。
具体实施方式
图1示出了水印嵌入处理的示意性框图。所述处理接收源代码101和要被嵌入该源代码的数字水印102。
源代码101通常为程序员通常以诸如C、C++、Java等的形式编程语言书写的计算机程序的形式。源代码可以自动地被编译器编译成目标代码或机器代码,或者被解释器执行。
源代码101可被表示为一个或更多个文本文档或任何其他合适的数字表示。另选的是,加水印处理可处理不同类型的、其中的程序语句能够被识别的输入代码,例如目标代码。
数字水印102可以是要嵌入的水印信息的任何合适的数字表示,例如,用于识别源代码接受者、源代码作者的信息,用于识别源代码的标识符,数字证书,伪随机数,密钥和/或其他任何合适的信息。例如,可将水印表示为位(bit)序列。
将源代码送入解析器模块103。该解析器模块对源代码进行解析,并且在源代码中识别可用于插入如在本文中所述的条件程序语句的合适的程序语句或者其他合适的位置。例如,所识别的程序语句可以是特别适合作为对代码迷惑技术的输入的程序语句。下面将参照图6和图7来例示合适位置的示例。解析器模块可以使用本领域已知的用于解析源代码的任何合适的技术,例如传统编译器在解析源代码以识别对应编程语言的结构组件(诸如变量定义、常量定义、函数、程序语句、条件、循环、赋值、表达式等)时所使用的技术的子集。从在源代码中识别的所有程序语句/位置之中,解析器可进一步选择合适语句/位置的预定子集。解析器模块向代码变换模块105转发所识别语句/位置104,或者至少转发指向它们在源代码中的对应位置的指针。任选的是,解析器模块可将例如与关于程序代码接受者的信息、要嵌入的水印、原始程序代码的拷贝等相关的所识别的位置存储在库(repository)中。
将数字水印102送入编码器模块106。该编码器模块根据预定代码对该数字水印进行编码。例如,代码107可包括使各码字由特定条件(例如由等式或不等式的特定测试)进行表示的一组码字。当代码107是纠错码(具有一定冗余度的代码)等时,对所嵌入水印的后续检测变得更加可靠。任选的是,该编码器模块还从解析器模块103接收信息110,例如,与检测到的合适语句/位置的数量有关的信息。在一些实施例中,该信息允许编码器使编码适于所识别的语句/位置的数量。例如,可基于所找到的合适语句/位置的数量来控制编码时使用的冗余度。所识别的合适语句/位置越多,在经编码的水印中可包括的冗余越高。另外或另选的是,该编码器模块可将控制信息发送至解析器模块,例如用以指示解析器模块识别某最小数量的适当语句/位置。例如,该编码器模块可基于期望冗余度和/或水印的大小和/或其他参数来确定该最小数量。
在一些实施例中,每个码字使自身与多个可选条件相关联,各可选条件指示对应码字,并且编码器例如可以随机地、基于所识别语句的类型、基于先前的选择等,来选择这些可选条件中的一个。
图3示出了使对水印进行编码的码字与对应条件相关的数据结构。在图3的示例中,码字和条件之间的关系存储在表示码本(code book)的数据结构中。具体地说,在该示例中,码本由一维数组的列表(总体上被指定为300)表示。列表300中的每个条目(即每个数组)对应于用于对水印进行编码的代码中的指定为CW1、CW2、...、CWN的码字之一。各数组中的每个单元标识了要用于具体码字的指定为C11、C12、C13、...、CNK的特定条件。
例如,一个条件可以是特定多项式或其他函数与零的比较,另一条件可以是特定不等式测试等。此外,对于每种类型的条件,可以有一个或更多个子类型,例如,涉及单变量多项式、双变量多项式的条件,包括等式的条件,包括不等式的条件等。另外或另选的是,可以根据解析器可在程序代码中检测到的任何附加信息(例如对表达式中所包括的变量的限制,例如变量仅可取正值等),将表达式的类型进一步细分。因此,对于给定的码字,编码器进程可以选择多个可能条件中的一个,例如,每次出现码字时选择不同的条件,根据要插入条件的所识别程序语句选择单变量条件或双变量条件等。
应当理解,上述表达式的子类型和/或附加信息另选地可以实现为生成特定条件的对应函数的输入参数。例如,列表300的每个单元可包括指向这种函数的指针,并且此外,输入参数可包括在条件中要使用的变量名等。在又一实施例中,列表300可被表示为更高维的数组,例如由码字、条件类型、以及可选地由附加信息来确定索引的二维或三维数组。
还应当理解,所述水印可由任何其他合适的代码进行编码,例如并不基于码本的代码(如根据基于规则进行编码的代码)。
再次参照图1,将由编码器模块106生成的编码水印108(例如条件序列、条件语句序列等)送入变换模块105。变换模块105接收来自解析器模块103的所识别的程序语句/位置104以及来自编码器模块106的编码水印108。该变换模块接着根据所接收的编码水印插入包括对应条件的对应条件语句。下面将更详细地描述这种条件语句的示例。将条件表达式插入源代码中,例如代替原始的所识别语句,从而得到带水印的源代码109。该带水印的源代码接着可被进一步处理,例如进行编译、压缩、编码等。
图2示出了水印检测/提取处理的示意性框图。该水印提取处理接收带水印的源代码209,或如上所述的其他类型的带水印的输入代码。将带水印的源代码209送入与上述水印嵌入处理的解析器模块103相似的解析器模块203。解析器模块203识别所有的潜在候选条件语句。例如,该解析器模块可识别包括出现在代码数据结构207(例如,结合图3所描述的数据结构)中的条件的所有条件语句,所述代码数据结构207包括代码所使用的所有可能条件。另选的是,该解析器模块还可接收原始的(即未标记的)程序代码,并且识别没有出现在该未标记代码中的所有条件语句。作为又一示例,该解析器模块还可接收程序代码中的出现包括水印信息的条件语句的位置的列表。这种列表例如可以在嵌入处理期间进行存储并且存储在水印库中。因此,可以针对特定客户检索条件语句的存储位置,从而减少了例如借助调试器来识别对水印信息进行编码的条件语句的计算花费。将所识别的候选条件语句204送入语句解析模块205。该语句解析模块对各个所识别的条件语句进行解析,以识别在所识别条件语句中使用的各个条件。语句解析模块205由此生成所识别条件的序列208,该序列208被送入解码器模块206。
解码器模块206接收所识别条件的序列208,并且基于在嵌入处理中使用的已知代码207对该序列进行解码。当所述解码还包括检错甚至包括纠错时,检测可靠性得以提高。该解码器由此生成解码的水印202。在一些实施例中,为了识别所嵌入的信息,随后将该解码的水印与基准水印或基准水印的列表比较。
图4示意性地示出了插入条件语句的示例。
具体地说,图4a示出了要加水印的原始源代码的片段的程序流程。总体上被指定为400的该片段包括三个程序语句X、A和Y(分别被指定为401、402和403)的序列。在原始程序流程中,语句X、A和Y按此顺序执行。应该明白,语句X、A和Y中的每一个可包括单个语句或多个单独的语句。
图4b示出了对应的带水印的代码片段的程序流程的示例。在该示例中,程序语句A被“克隆”,即添加了又一可选程序语句A’(被指定为404),其中A’导致与A相同的程序行为,但是使用不同的实现方式。例如,可以根据同样已知的任何合适的代码迷惑技术从A生成A’,所述技术例如为在US 6,668,325与奥克兰大学1997年的技术报告148“Ataxonomy of obfuscating transformations”中所描述的技术。程序语句A由此被条件语句405所代替,该条件语句405可表示为“if C then A else A’”(如果C那么A否则A’),其中C是确定要执行A还是A’的条件。条件C包含与水印有关的信息。如上所述,所述条件可以从私有码本中选择或借助任何其他合适的编码方案来选择。由于可选语句A和A’被生成为等价的,即导致相同的程序输出和整体上相同的程序行为,所以条件C是否为真无关紧要。
图4c示出了对应的带水印的代码片段的程序流程的另一示例。该示例示出了更为普遍的方法,其中原始语句A被分支406代替,分支406具有条件C和可选语句A’和A”(分别指定为407和408)。在该示例中,两个可选语句A’和A”都是根据原始语句A得出的。
例如,可以通过两种不同的迷惑处理根据A得到A’和A”,例如,使A’和A”具有相同的行为,即,使条件语句406之外的程序行为与执行语句A’和A”中的哪一个无关。
另选的是,可将语句A’和A”生成为使其不必具有相同的行为,但是要使得无论执行A’还是A”都与整体程序行为无关,尤其是与程序输出无关。下面将参照图5通过示例来说明这一点,在该示例中,一个变量被两个辅助变量代替,所述两个辅助变量的每一个在可选语句中的一个对应语句中进行更新。然而,在条件语句之外,程序行为仅取决于这两个变量的预定函数,从而在该条件语句中更新这两个变量中的哪一个(即,执行可选语句中的哪一个)无关紧要。
具体地说,图5示出了要加水印的代码片段的示例。
图5a示出了要加水印的代码片段。具体地说,该代码片段实现了对0和10之间的偶数进行计数的功能。该代码片段包括被指定为502的语句“z++”,该语句使计数变量z增加。该代码片段中的变量z用于从0到10进行计数,并且测试每个数是否能够被2整除。
图5b示出了对应的带水印的代码片段,其中语句“z++”被条件语句506代替。该条件语句包括两个可选语句507和508,其中的一个语句(507)使新辅助变量x增加,而另一语句(508)使第二个新辅助变量y增加。在其中变量z在初始化之后被更新或者对z进行求值的剩余代码的所有语句中,用和(x+y)(即x和y的不管是增加x还是y都会得出相同值的函数)来代替变量z。条件语句506还包括被指定为509的条件C,其对水印的至少一部分进行编码。由于程序行为不依赖于执行了语句507和508中的哪一个,所以所引入的条件是真还是假对于程序流程无关紧要。具体地说,程序输出(在此为偶数的数量/计数“NbrOfEven”)不依赖于执行了哪一个可选语句。
因此,以上是通过令A’和A”不同地更新对象(在上述示例中是元组(x,y))而创建的结构的示例,但是在其中程序行为仅取决于该对象的函数,从而在执行A’或A”的情况下均得出相同的结果。这种结构使所得到的嵌入标记甚至更为秘密。
再次参考图4,图4d示出了对应的带水印的代码片段的程序流程的又一示例。在该示例中,原始语句被包括条件C的“switch”语句410形式的条件语句所代替。例如,可将该条件C表示为控制表达式,在程序执行期间对该控制表达式求值以得到一测试值。根据该测试值,程序流程在多个可选语句之一处继续。在图4d的示例中,switch语句410包括三个可选语句411、412和413。然而,应当理解,switch语句可包括任意数量的可选语句。为此,switch语句跟随有多个“case”子句411、412、413,其中每个case子句与一个可能的测试值相关联。因此,在执行期间,与满足所述控制表达式的测试值的case子句相关联的语句被执行。
对根据在此描述的方法而插入的水印的一种可能的攻击是要去除插入的对水印进行编码的可选程序语句和条件。可以通过适当地选择可选语句的插入位置来降低这种攻击成功的风险。例如,当将条件语句插入现有条件语句而得出修改的条件语句(例如使所插入的可选语句插入所述现有条件语句的现有可选语句中作为可选语句)时,攻击者无法在不改变代码功能的情况下简单地去除该修改的条件语句。图6示出了这种修改的一个示例。
图6示意性地示出了插入条件语句的示例。具体地说,图6a示出了要加水印的原始源代码片段的程序流程。总体上被指定为600的片段包括分别被指定为601、610和603的三个程序语句的序列。语句610是一条件语句,其包括被指定为602的条件C1和分别被指定为611、612、613和614的可选语句A、B、C和D,从而使条件C1确定执行这些可选语句中的哪一个。
图6b示出了对应的带水印的代码片段的程序流程的示例。在该示例中,将条件语句610修改为使得所述可选语句之一(即程序语句A)被“克隆”,即添加了被指定为604的又一可选程序语句A’,其中A’导致与A相同的程序行为,但是使用不同的实现方式,如此处所描述的。程序语句A由此被可表示为“if C2then A else A’”的条件语句所代替,其中C2(616)为确定是执行A还是A’的条件。条件C2包含与水印有关的信息。如上所述,所述条件可以从私有码本中选择或借助任何其他合适的编码方案来选择。由于可选语句A和A’被生成为等价的,即导致相同的程序输出和整体上相同的程序行为,所以条件C2是否为真无关紧要。
图6c示出了对应的带水印的代码片段的程序流程的另一示例。除了以下方面图6c的示例与图6b的示例相同:在图6c的示例中,条件C1和条件C2组合为组合条件C1’,从而使得攻击者难以去除所插入的可选语句A’和条件C2。
要注意到,可以使其他控制流程也为图6a的形式,从而增加了非常合适的水印插入位置的数量。图7示意性地示出了修改计算机程序的控制流程以便于插入条件语句的示例。
图7a示出了要加水印的原始源代码片段的程序流程。总体上被指定为700的片段包括分别被指定为701、710和703的三个程序语句的序列。语句710包括被指定为711的语句A,该语句A根据被指定为722的条件C1被重复一次或更多次。在语句A之后,代码片段700包括一条件语句,该条件语句具有分别被指定为712和713的两个可选语句B和C以及被指定为723的条件C2,该条件C2确定是执行语句C还是D。在该条件语句之后,代码片段700包括被指定为714的语句D,语句D后面跟着语句703。
图7b示出了图7a的控制流程的修改结果,其中修改的控制流程包括一条件语句,该条件语句具有四个可选语句711、712、713、714和被指定为702的对应条件C2’。该条件语句根据条件C1’(733)被重复一次或多次。应当理解,条件C1’和C2’是基于原始条件C1和C2而修改的,以确保条件语句的重复仅有语句A根据图7a的原始流程被执行。
因此,该修改的控制流程现在包括图6a中例示的形式的条件语句,从而使得可以如结合图6所述地插入水印。
因此,以上公开了水印技术的实施例,其中将水印嵌入代码中所插入的分支语句的条件中。将各分支的语句调整为等价的,从而使得无论如何评价该条件(即,执行分支语句中的哪一个)都无关紧要。为了使得难以察觉所述分支语句是等价的,可以对其进行迷惑。
在此描述的方法提供了一种产生难以被诸如迷惑和代码优化的自动工具去除的水印的加水印处理。此外,对代码进行人工分析并替换回原始表达式将需要令人望而却步的气力。
虽然已经详细描述和示出了一些实施例,但是本发明并不限于这些实施例,而是也可以以在所附权利要求所限定主题的范围内的其他方式来实现。
具体地说,这些实施例主要是结合数字水印的嵌入而描述的。然而,应当理解,在此描述的方法可以等同地应用于任何其他类型信息的嵌入。
在此描述的方法、产品装置和设备能够借助包括多个不同部件的硬件并且借助适当编程的微处理器来实现。在列举了多个装置的设备权利要求中,可将这些装置中的多个实现为同一个硬件,例如适当编程的微处理器、一个或更多个数字信号处理器等。在相互不同的从属权利要求中引用了或在不同的实施例中描述了某些手段这一事实并不意味着不能使用这些手段的组合来实现益处。
应当强调的是,当术语“包括(comprises/comprising)”在本说明书中使用时,是要指定所描述的特征、整数、步骤或部件的存在,但是并不排除一个或更多个其他特征、整数、步骤、部件或其集合的存在和增加。

Claims (9)

1.一种在计算机程序代码(101,400)中嵌入信息(102)的方法,所述计算机程序代码包括多个程序语句(401-403)并且适于在被数据处理系统执行时使所述数据处理系统产生程序输出,所述方法包括以下步骤:将一个或更多个条件程序语句(405,406,410,506)插入(105)所述计算机程序代码中,所述条件程序语句各包括各自条件(509,617)和多个可选程序语句(402,404;407,408;411-413;507,508;604,611),所述条件程序语句适于使数据处理系统评价所述条件,并响应于所述评价步骤的结果而选择性地执行所述多个可选程序语句之一;其中所述多个可选程序语句适于使所述计算机程序代码不管所述可选程序语句中的哪一个被执行都产生相同的程序输出;
其特征在于,所述条件表示所述信息的至少一部分;其中按照一个或更多个码字(107)对所述信息进行编码,每个码字对应于一个或更多个预定条件;并且在所述一个或更多个条件程序语句(405,406,410,506)的各自条件(509,617)中嵌入有数字水印(102),所述信息包括所述数字水印(102)。
2.根据权利要求1所述的方法,该方法还包括对所述多个可选程序语句中的至少一个进行迷惑处理。
3.根据权利要求1或2所述的方法,其中各个所述可选程序语句适于更新一个或更多个程序对象;并且其中所述程序输出仅依赖于针对所述程序对象的一个或更多个预定函数,其中所述一个或更多个函数中的每一个所产生的结果与所述可选程序语句中的哪一个被执行无关。
4.根据权利要求1或2所述的方法,其中对所述信息进行编码的步骤包括使用纠错码(107)对所述信息进行编码。
5.根据权利要求1所述的方法,其中所述计算机程序代码包括源代码和目标代码中的至少一个。
6.根据权利要求1所述的方法,该方法还包括将所述计算机程序代码加载到计算机的存储器中。
7.一种检测嵌入计算机程序代码(209)中的信息的方法,所述计算机程序代码包括多个程序语句并且适于在被数据处理系统执行时使所述数据处理系统产生程序输出,所述方法包括以下步骤:
-对所述计算机程序代码进行解析(203,205)以识别至少一个条件程序语句(405,406,410,506),所述条件程序语句包括一个条件(509,617)和多个可选程序语句(402,404;407,408;411-413;507,508;604,611),所述条件程序语句适于使数据处理系统评价所述条件,并响应于所述评价步骤的结果而选择性地执行所述多个可选程序语句之一;其中所述多个可选程序语句适于使所述计算机程序代码不管所述可选程序语句中的哪一个被执行都产生相同的程序输出;
-从所述至少一个条件中提取(206)所述嵌入计算机程序代码中的信息的至少一部分;其中所述信息是按照一个或更多个码字(207)被编码的,每个码字对应于一个或更多个预定条件;
其特征在于,在所述至少一个条件程序语句(405,406,410,506)中包括的所述条件(509,617)中嵌入有数字水印(202),所述信息包括所述数字水印(202)。
8.根据权利要求7所述的方法,其中所述计算机程序代码包括源代码和目标代码中的至少一个。
9.根据权利要求7所述的方法,该方法还包括将所述计算机程序代码加载到计算机的存储器中。
CN2005800440674A 2004-12-22 2005-11-24 为计算机程序代码加水印 Active CN101084478B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US63885904P 2004-12-22 2004-12-22
US60/638,859 2004-12-22
EP05388097.7 2005-11-15
EP05388097A EP1674966B1 (en) 2004-12-22 2005-11-15 Watermarking computer program code
PCT/EP2005/012821 WO2006066699A1 (en) 2004-12-22 2005-11-24 Watermarking computer program code

Publications (2)

Publication Number Publication Date
CN101084478A CN101084478A (zh) 2007-12-05
CN101084478B true CN101084478B (zh) 2012-02-08

Family

ID=35883810

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005800440674A Active CN101084478B (zh) 2004-12-22 2005-11-24 为计算机程序代码加水印

Country Status (7)

Country Link
US (1) US8458476B2 (zh)
EP (1) EP1674966B1 (zh)
KR (1) KR20070086517A (zh)
CN (1) CN101084478B (zh)
AT (1) ATE425503T1 (zh)
DE (1) DE602005013178D1 (zh)
WO (1) WO2006066699A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8301890B2 (en) 2006-08-10 2012-10-30 Inside Secure Software execution randomization
US7613907B2 (en) 2006-08-11 2009-11-03 Atmel Corporation Embedded software camouflage against code reverse engineering
US7554865B2 (en) 2006-09-21 2009-06-30 Atmel Corporation Randomizing current consumption in memory devices
US8417948B2 (en) 2006-12-13 2013-04-09 Sony Corporation Computer scripting engine to extract and execute steganographically hidden scripts in carrier scripts
US20080209399A1 (en) * 2007-02-27 2008-08-28 Michael Bonnet Methods and systems for tracking and auditing intellectual property in packages of open source software
US7987380B2 (en) 2007-03-27 2011-07-26 Atmel Rousset S.A.S. Methods and apparatus to detect voltage class of a circuit
KR101048588B1 (ko) * 2009-04-13 2011-07-12 한양대학교 산학협력단 코드 제어 흐름 모호화 장치 및 방법
WO2011139302A2 (en) * 2009-12-11 2011-11-10 Probert Thomas H Steganographic messaging system using code invariants
US9230455B2 (en) 2009-12-11 2016-01-05 Digital Immunity Llc Steganographic embedding of executable code
KR101316697B1 (ko) * 2012-02-23 2013-10-10 숭실대학교산학협력단 소프트웨어 저작권 보호 장치 및 그 방법
CN103001944B (zh) * 2012-09-27 2016-04-13 深圳友讯达科技股份有限公司 微功率无线信息采集系统中的程序保护方法
CN103093155B (zh) * 2012-12-07 2016-04-27 中北大学 基于源码修改的信息隐藏方法
WO2014153679A1 (en) * 2013-03-27 2014-10-02 Irdeto B.V. Watermarking executable files
US9875515B1 (en) * 2015-12-15 2018-01-23 Amazon Technologies, Inc. Embedding debugging information via watermarks
KR102246797B1 (ko) * 2019-11-07 2021-04-30 국방과학연구소 명령 코드 생성을 위한 장치, 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999001815A1 (en) * 1997-06-09 1999-01-14 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7757097B2 (en) * 1999-09-03 2010-07-13 Purdue Research Foundation Method and system for tamperproofing software
WO2002006925A2 (en) * 2000-07-18 2002-01-24 Bitarts Limited Digital data protection arrangement
US7549147B2 (en) * 2002-04-15 2009-06-16 Core Sdi, Incorporated Security framework for protecting rights in computer software
JP2004362532A (ja) * 2002-10-25 2004-12-24 Matsushita Electric Ind Co Ltd 透かし挿入装置および透かし取出装置
US20050055312A1 (en) * 2003-08-18 2005-03-10 Wilson Kelce Steven Software control flow watermarking
NZ533028A (en) * 2004-05-19 2005-09-30 Auckland Uniservices Ltd Method of introducing digital signature into software

Also Published As

Publication number Publication date
CN101084478A (zh) 2007-12-05
US20090254752A1 (en) 2009-10-08
KR20070086517A (ko) 2007-08-27
EP1674966A1 (en) 2006-06-28
ATE425503T1 (de) 2009-03-15
DE602005013178D1 (de) 2009-04-23
US8458476B2 (en) 2013-06-04
EP1674966B1 (en) 2009-03-11
WO2006066699A1 (en) 2006-06-29

Similar Documents

Publication Publication Date Title
CN101084478B (zh) 为计算机程序代码加水印
CN109992935B (zh) 一种源代码保护方法及装置
CN101568927B (zh) 混淆计算机程序代码
CN100498712C (zh) 用于生成受保护可执行程序的设备、存储介质和方法
CN100533450C (zh) 通过等效数学表达式对计算机程序代码加水印的方法和系统
Palsberg et al. Experience with software watermarking
US8589897B2 (en) System and method for branch extraction obfuscation
US20140165210A1 (en) Software watermarking techniques
US8677149B2 (en) Method and system for protecting intellectual property in software
US8661559B2 (en) Software control flow watermarking
Hamilton et al. An evaluation of static java bytecode watermarking
CN108733990B (zh) 一种基于区块链的文件保护方法及终端设备
Collberg et al. Software watermarking in the frequency domain: implementation, analysis, and attacks
JP4517636B2 (ja) 実行プログラム作成方法、関数プログラム、及び関数プログラム実行方法
Andrey et al. A Technique for Analyzing Bytecode in a Java Project for the Purpose of an Automated Assessment of the Possibility and Effectiveness of the Hidden Investment of Information and its Volumes in a Java Project
CN108460253B (zh) 基于顺序、符号执行和单点逻辑的源代码加固方法及装置
CN114090965B (zh) java代码混淆方法、系统、计算机设备及存储介质
US20050055312A1 (en) Software control flow watermarking
KR101097104B1 (ko) 저작권 정보 삽입 시스템 및 방법
Hamilton et al. A survey of graph based software watermarking
KR101747767B1 (ko) 자바 자동 식별자 리네이밍 기법
CN116956245A (zh) 一种基于控制流平坦化混淆的软件水印实现方法及系统
KR101810765B1 (ko) 상수 인코딩을 이용한 정적 워터마킹 방법
Wang A Constant Encoding Algorithm Which Tamper-proofs the CT-Watermark
Hamilton An Empirical Evaluation of Java Decompilation and Intellectual Property Protection via Software Watermarking

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