CN100533450C - 通过等效数学表达式对计算机程序代码加水印的方法和系统 - Google Patents

通过等效数学表达式对计算机程序代码加水印的方法和系统 Download PDF

Info

Publication number
CN100533450C
CN100533450C CNB2005800444247A CN200580044424A CN100533450C CN 100533450 C CN100533450 C CN 100533450C CN B2005800444247 A CNB2005800444247 A CN B2005800444247A CN 200580044424 A CN200580044424 A CN 200580044424A CN 100533450 C CN100533450 C CN 100533450C
Authority
CN
China
Prior art keywords
mathematic
representation
expression
conversion
code
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.)
Expired - Fee Related
Application number
CNB2005800444247A
Other languages
English (en)
Other versions
CN101088095A (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 CN101088095A publication Critical patent/CN101088095A/zh
Application granted granted Critical
Publication of CN100533450C publication Critical patent/CN100533450C/zh
Expired - Fee Related 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/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

Landscapes

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

Abstract

本发明提供了通过等效数学表达式对计算机程序代码加水印的方法。一种在包括多个程序语句的计算机程序代码中嵌入信息的方法,该方法包括:解析所述计算机程序代码以识别包括第一数学表达式的至少一个程序语句,其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;通过对所述第一数学表达式执行预定的转换来生成经修改的数学表达式,其中所述经修改的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得所述经修改的数学表达式适于产生与所述第一数学表达式相同的结果,并且其中所述经修改的数学表达式表示所述信息的至少一部分;由所述经修改的数学表达式来替换所识别的程序语句中的所述第一数学表达式。

Description

通过等效数学表达式对计算机程序代码加水印的方法和系统
技术领域
本发明涉及计算机程序代码(例如源代码或目标代码)中的信息(尤其是数字水印)的嵌入与检测。
背景技术
对于软件的制造商和/或销售商来说,通常希望控制对该软件的销售,特别是能够保护软件不被盗版、建立/证明软件的所有权、验证软件和/或识别/跟踪所销售软件的拷贝。因此,需要用于对计算机软件(特别是源代码或目标代码)加水印的有效技术。这种加水印技术的目的是例如通过操纵/改变或添加程序代码而在软件中添加信息(水印或仅仅是标记)。该信息可用作用于识别目的的版权标记(copyright notice),以识别软件的购买者,等等。通常希望的是,嵌入该信息,以使得该信息不能被购买者去除,但是可以利用与将标记加入到软件中的处理有关的知识而从软件中提取该信息。具体地说,如果不容易检测到水印(例如,通过统计分析),则水印可以说是秘密的。如果水印能够经受得住诸如代码迷乱(obfuscation)或代码优化的语义保持变换和/或能够经受得住冲突攻击(collision attack),则水印可以说是有适应力的(resilient)。
通常,水印可能受到不同的攻击以使水印不可识别。各种攻击的示例包括:
加性攻击(additive attack):将新水印添加到代码中,使得原始标记不再能够被提取,或使得不可能确定哪一个是原始标记。
变形性攻击(distortive attack):对代码进行诸如代码迷乱或代码优化的语义保持变换,希望水印将被变形并且不能被识别。
减性攻击(subtractive attack):确定水印的位置,并从程序中裁减掉该标记。
因此,总的问题在于提供加水印技术,这些加水印技术所产生的标记例如在软件的购买者的这些攻击下是鲁棒的。
当可检测到所嵌入的水印时,可以将其从程序中去除(裁减掉)或由等效表达式来替代,这很可能破坏原始标记。在现有的解决方案中,往往太容易识别嵌入部分,并因此可能被裁减掉。
迷乱是用于使代码变复杂的技术。当对代码进行反编译时迷乱使得代码更加难以理解,但是迷乱通常对代码的功能没有影响。通过使程序对于反向工程师来说更加困难,而可以使用迷乱程序来保护程序。US6668325公开了多个代码迷乱技术,这些技术可以在加水印的情况下使用。
然而,即使上述现有技术的方法提供了对计算机程序代码的加水印,也仍然存在以下问题:提供了导致在研究进行了标记的软件时更加难以检测的水印的加水印技术。
具体地说,通过程序代码中的简单的迷乱变化(例如,通过重命名变量、对指令重新排序、循环转换等)而进行的水印嵌入涉及以下问题:水印不具有充分的适应力,因为迷乱技术通常完全改变了这些特性,从而使得水印容易受到迷乱攻击。
发明内容
通过一种在计算机程序代码中嵌入信息的方法来解决上述和其他问题,该计算机程序代码包括多个程序语句,该方法包括:
-解析所述计算机程序代码以识别包括第一数学表达式在内的至少一个程序语句,所述程序语句适于使数据处理系统对数学表达式进行求值(evaluate)以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-通过对所述第一数学表达式执行预定的转换而生成经修改的数学表达式,其中所述经修改的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得所述经修改的数学表达式适于产生与所述第一数学表达式相同的结果,并且其中所述经修改的数学表达式表示所述信息的至少一部分;
-在所述经识别的程序语句中由所述经修改的数学表达式替换所述第一数学表达式。
通过识别程序代码中的数学表达式并将它们替换为可以简化为原始表达式的等效表达式,提供了更加难以检测的水印。被包括到代码中的等效表达式对待嵌入的信息(例如,水印)进行编码。有利的是可以将这些数学表达式转换为等效的、但明显更复杂的表达式,从而使得难以发现和/或难以简化这些表达式。
这里使用的术语“程序语句”旨在包括构成编程语言的单位、特别是这种构成的最小单位。各种语句的示例包括定义、声明、赋值、条件语句、循环和函数/过程调用。
这里使用的编程语言中的术语“表达式”旨在包括值、变量和函数的组合,其中根据对于具体编程语言的具体优先规则和关联的规则来解释该组合,其中组合适于产生和返回结果(即,值)。代数表达式产生数值结果,即,具有数值数据类型的结果,例如浮点数据类型或整数数据类型。
在一些实施例中,该方法包括通过将从第一代数表达式得到的代数表达式与辅助代数表达式进行组合来生成经转换的代数表达式,其中该辅助代数表达式是表示所述信息的至少一部分。结果,提供了嵌入信息的简单机制,因为可以存储不同辅助代数表达式的库/表,其中各个表达式对相应的信息进行编码。
当该方法包括对所述第一代数表达式进行解析,以识别至少第一变量,以及由至少两个变量的组合(例如,线性组合)来代替所述第一变量时,使得经转换的表达式的后续简化变得更加困难,从而使得水印更具有适应力。
在一些实施例中,所述第一代数表达式包括至少一个具有整数数据类型的变量;并且其中所述经修改的数学表达式适于仅针对与所述整数数据类型一致的所述至少一个变量的值而产生与所述第一数学表达式相同的结果。具体地说,通过修改表达式的多个部分(例如,多项式的系数),使其仅针对数值的特定子集产生相同的结果,可以使得所得到的数学表达式更加难以简化,从而提供更有适应力的水印。当在程序执行过程中已知该表达式仅针对值的该子集而被求值时,该修改不影响程序的执行。
在另一实施例中,经识别的程序语句适于将所述第一数学表达式求值为整数数据类型;并且其中所述经修改的数学表达式适于产生浮点结果,只有在被转换为整数数据类型时该浮点结果才导致与第一数学结果的求值相同的数值结果。
当该方法还包括将待嵌入的信息编码为一个或更多个码字,并且各码字与数学表达式的一个或更多个相应的预定转换相对应时,提供了用于嵌入多种附加信息的有效编码方案。
当对信息的编码包括使用纠错码对信息进行编码时,进一步提高了嵌入信息的适应力。
在一个实施例中,所述第一数学表达式包括第一和第二代数表达式的比较,该比较适于使数据处理系统对所述第一和第二代数表达式的结果进行比较;并且生成经修改的数学表达式的步骤包括由相应的第一和第二经转换的代数表达式来替代所述第一和第二代数表达式中的至少一个。
在另一实施例中,所述第一数学表达式包括和第一多项式与零的比较等效的第一条件;并且其中生成经修改的数学表达式的步骤包括由经转换的多项式与零的比较来替代所述第一条件,其中经转换的多项式可化简为至少所述第一多项式与第二多项式的乘积。
如果一多项式在相同域上可以因式分解为非平凡的多个多项式,则可以说该多项式是可化简的。例如,在有理多项式的域中(即,具有有理系数的多项式f(x)),如果对于x,存在具有有理系数的两个非常数多项式g(x)和h(x)使得f(x)=g(x)h(x),则可以说f(x)是可化简的。
在一个实施例中,所述第一数学表达式包括和第一多项式与零的比较等效的第一条件;并且其中生成经修改的数学表达式的步骤包括由经转换的多项式与零的比较来替代所述第一条件,其中经转换的多项式包括具有由预定的隐性谓词(opaque predicate)确定的对应的隐性值的辅助变量,并且其中仅当该辅助变量由其隐性值置换时,经转换的多项式可化简为至少所述第一多项式与第二多项式的乘积。结果,进一步降低了替换攻击的风险。例如,隐性谓词可以是从隐性谓词的集合中选择的,该隐性谓词的集合是预先构建和存储的,以使得该集合的隐性谓词的值在加水印时是已知的。
这里使用的术语“在加水印时”旨在表示嵌入系统嵌入水印时。因此,当将一特性描述为在加水印时为已知、可使用或可控制时,所述特性对于嵌入水印的水印嵌入处理是已知/可使用的,或是可由嵌入水印的水印嵌入处理进行控制。
这里,术语隐性谓词指的是其结果在加水印时是已知的、但对于对手难以分解的谓词,即,布尔表达式(其求值为与“1”或“0”相对应的TRUE或FALSE)。因此,术语隐性值是指隐性谓词的真值。
具体地说,当所述第二多项式没有实根时,经转换的多项式与零的比较保证始终产生与第一条件相同的结果。因此,程序流没有被水印的引入而改变。
本发明涉及包括了上述方法和下面的对应装置和计算机程序的不同方面,这些方面分别产生了结合上述方法描述的一个或更多个益处和优点,这些方面分别具有与结合上述方法描述的实施例相对应的一个或更多个实施例。
具体地说,一种对嵌入在计算机程序代码(该计算机程序代码包括多个程序语句)中的信息进行检测的方法,该方法包括以下步骤:
-解析计算机程序代码,以识别包括第一数学表达式在内的至少一个程序语句,该程序语句适于使数据处理系统对所述第一数学表达式进行求值以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-至少执行所述第一数学表达式的预定的转换集合中的第一转换,其中该转换包括使用与所述第一代数表达式不同的经转换的代数表达式来替代所述第一代数表达式;
-确定所述第一转换是否导致了产生与所述第一数学表达式相同的结果的经转换的数学表达式;以及
-根据所述确定从所述第一转换提取所述嵌入信息的至少一部分。
在一些实施例中,所述第一数学表达式是程序语句的至少一部分,当在数据处理系统上执行时,该程序语句使数据处理系统生成至少一个具有数值数据类型或布尔数据类型的结果。在一个实施例中,该数值数据类型可以是浮点数据类型或整数类型。
在一些实施例中,所述第一代数表达式包括多项式。
应该注意,上述和下文中的方法的特征可以以软件实现,并在数据处理装置上执行或在由诸如计算机可执行指令的程序代码手段(means)的执行所产生的其他处理装置上执行。在这里和在下文中,术语处理装置包括适于执行上述功能的任何电路和/或装置。具体来说,上述术语包括通用或专用的可编程微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)、专用电子电路等,或它们的组合。具体地说,在一些实施例中,待嵌入信息的计算机程序代码或待检测嵌入信息的计算机程序代码被载入到计算机的存储器中,嵌入或检测此处描述的信息的方法的步骤由所述计算机自动地执行。
例如,程序代码手段可从存储介质或经由计算机网络从另一计算机载入到诸如RAM(随机存取存储器)的存储器中。作为另一种选择,所描述的特征可以由硬连线电路而不是软件来实现,或者由硬连线电路与软件的组合来实现。
根据一个方面,一种数据处理系统包括:
-用于解析所述计算机程序代码以识别包括第一数学表达式的至少一个程序语句的模块,所述程序语句适于使数据处理系统对所述数学表达式进行求值以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-用于通过对所述第一数学表达式执行预定的转换来生成经修改的数学表达式的模块,其中所述经修改的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得所述经修改的数学表达式适于产生与所述第一数学表达式相同的结果;
-用于由所述经修改的数学表达式替换所识别的程序语句中的所述第一数学表达式的模块;
其特征在于,所述经修改的数学表达式表示所述信息的至少一部分;并且所述系统还包括:用于将待嵌入的信息编码为一个或更多个码字的模块,各个码字都与数学表达式的一个或更多个相应的预定转换相对应;并且通过执行所述第一数学表达式的预定转换来生成所述经修改的数学表达式的步骤基于所述一个或更多个码字。
在一些实施例中,所述计算机程序产品是作为计算机可读介质而嵌入的,该计算机可读介质上存储有计算机可执行指令。例如,该计算机可读介质可以是其上存储有计算机可执行指令的只读光盘(CD)、光盘、磁盘、磁存储介质、存储棒等。例如,该计算机可读介质上可以存储用于嵌入水印的软件应用程序和用于检测程序代码中的水印的软件应用程序。这些软件应用程序可以实现为独立的应用程序,组合在单个应用程序中。在其他实施例中,该计算机程序产品是作为数据信号(例如,适当调制的载波信号)而实现的。例如,可以提供计算机可执行指令,以经由计算机网络从服务器计算机进行下载。
在一些实施例中,该计算机程序产品包括软件编译器,该软件编译器包括适于使数据处理系统执行上述和下文中的方法,作为由该编译器执行的许多编译途径之一的功能。因此,提供了用于编译和水印嵌入的集成软件工具。此外,由于这里描述的水印嵌入涉及作为常规编译器应用的用于分析源代码的一些相同的代码分析技术,因此可以重新使用相应的软件功能,从而提供有效的软件实现。
在又一方面中,计算机程序包括通过此处描述的方法嵌入其中的嵌入信息。在一些实施例中,计算机程序被实现为其上存储有计算机程序的计算机可读介质。在其他实施例中,计算机程序被实现为数据信号(例如,经适当调制的载波信号)。
为了进行描述,术语存储装置和计算机可读介质旨在包括任何适当的存储介质、装置或电路,例如只读存储器(ROM)、随机存取存储器(RAM)、闪存、可擦可编程只读存储器(EPROM)、易失性或非易失性存储器、光存储装置、磁存储装置、磁盘、光盘、硬盘等。
附图说明
参照附图根据下面描述的实施例,上述和其它方面将变得明了并得到说明,在附图中:
图1示出了水印嵌入处理的示意性框图。
图2示出了水印提取处理的示意性框图。
图3例示了将用于对水印进行编码的码字与相应的数学转换相关联的表。
图4例示了在与几何表示相关的表达式中嵌入水印的示例。
具体实施方式
图1示出了水印嵌入处理的示意性框图。该处理接收源代码101和要嵌入在源代码中的数字水印102。
源代码101通常是由程序员已编写的计算机程序的形式,通常是用正式的编程语言(例如C、C++、Java等)来编写。可以通过编译器自动地将源代码编译为目标代码或机器代码,或者由解释程序来执行源代码。
源代码101可以表示为一个或更多个文本文件或任意其他适当的数字表示。作为另一种选择,加水印处理可接收不同类型的输入代码(例如目标代码),在该输入代码中可以识别数学表达式。
数字水印102可以是待嵌入的水印信息的任意适当的数字表示,该水印信息例如为识别源代码的接收者的信息、源代码的作者、识别源代码的标识符、数字证书、伪随机数、密钥和/或任意其他适当的信息。例如,水印可以表示为位序列。
将源代码输入到解析器模块103。该解析器模块解析源代码并识别适当的数学表达式。解析器模块可以使用现有技术中已知的用于解析源代码的任意适当的技术,例如当解析源代码以识别对应编程语言的构成部分(例如变量定义、常量定义、函数、程序语句、条件、循环、赋值、表达式等)时,由常规编译器使用的技术的子集。根据在源代码中识别的所有数学表达式,解析器还可以选择表达式的预定子集作为适当的表达式。哪些表达式合适取决于此处描述的加水印方案的具体实现。例如,在一个实施例中,解析器模块可识别包括多项式在内的所有数学表达式,或者可以重新表达以包括多项式的所有数学表达式。在一个实施例中,解析器可以识别其中相互比较两个代数表达式的所有比较。在另一实施例中,解析器模块可识别表示特定类型的几何问题的所有表达式。下面将更详细地描述适当数学表达式的一些具体示例。还应该理解,在一些实施例中,解析器可识别一种以上类型的数学表达式。解析器模块将所识别的表达式104或至少针对它们在源代码中的相应位置的指针转发给代码转换模块105。
将数字水印102输入到编码器模块106中。该编码器模块根据预定代码对数字水印进行编码。例如,代码107可包括一组码字,各个码字都由特定的数学转换、由特定的数学表达式等来表示。例如,在一个实施例中,各个码字都与不可化简的多项式或多项式的预定组合相对应。当代码107是纠错码、具有特定冗余度的代码等时,随后的嵌入水印的检测变得更可靠。可选的是,该编码器模块还从解析器模块103接收信息110(例如,与检测到的适当表达式的数量相关的信息)。在一些实施例中,该信息使得编码器能够对所识别的表达式、所识别的表达式的数量等调整编码。例如,可以基于所找到的适当表达式的数量来控制在编码中使用的冗余级别。识别到的适当表达式越多,可以包括在经编码的水印中的冗余度越高。
在一些实施例中,各个码字与分别表示对应码字的多个另选的转换相关联,并且编码器可以根据所识别的数学表达式的类型来选择另选的转换中的一个。例如,如果所识别的表达式涉及多项式与零的比较,则编码器可以选择该多项式与没有实根的多项式的乘法。在其他类型的表达式中,该转换可涉及与一个或更多个具有其他特性的多项式的乘法和/或除法,如下面将更详细描述的。
图3例示了将用于对水印进行编码的码字与相应的数学转换相关联的表。在图3的示例中,码字与数学转换之间的关系由总体上被指定为300的表或二维阵列来表示。表中的每一行对应于码字中的一个,将这些码字指定为用于对水印进行编码的代码的CW1、CW2、...、CWN。表中的每一列对应于被指定为E1、E2、...、EK的表达式类型。表300中的各个单元表示被指定为TF11、TF12、TF13、...、TFNK的特定转换,这些转换用于特定的码字和特定类型的表达式。例如,各个单元可包括指向实现对应转换的特定函数的指针、一个或更多个多项式的系数等。
例如,一种类型的表达式可以是多项式与零的比较,另一类型可以是利用多项式对变量进行赋值等等。此外,对于各种类型的表达式,可以存在一个或更多个的子类型,例如一个变量中的多项式、两个变量中的多项式、包含等式的条件、包含不等式的条件等。另选的或另外的是,表达式的类型还可以根据解析器可以在程序代码中检测到的任何附加信息而进行细分,这些附加信息例如为表达式中所涉及的对一个或更多个变量的限制,例如这些变量只可以取正值等。下面将描述这种附加信息的示例。
要理解的是,表达式的上述子类型和/或附加信息可以另选地实现为针对实现这些转换的相应函数的附加输入参数。在另一实施例中,表300可以表示为更高维度的阵列,例如具有由码字、表达式类型和通过附加信息确定的指数的三维阵列。
再参照图1,将编码器模块106生成的经编码的水印108(例如,数学转换的序列、多项式的序列等)输入到转换模块105中。
转换模块105从解析器模块103接收所识别的数学表达式104并从编码器模块106接收经编码的水印108。接着,该转换模块根据所接收的经编码的水印对所识别的数学表达式进行转换。下面更详细地描述由该转换模块执行的转换的示例。这些转换产生了插入到源代码中的加了水印的数学表达式,而不是原始识别的表达式,由此产生加了水印的源代码109。随后可以对该加了水印的源代码进行进一步的处理,例如编译、压缩、编码等等。
图2示出水印检测/提取处理的示意性框图。水印提取处理接收加了水印的源代码209或如上所述的另一类型的加了水印的输入代码。将加了水印的源代码209输入到解析器模块203中,解析器模块203与上述水印嵌入处理的解析器模块103相似。解析器模块203识别所有可能的候选数学表达式,例如包括多项式的所有表达式。如上所述,该解析器模块检测哪些类型的表达式取决于加水印处理的具体实现。作为另一种选择,解析器模块203还可以接收原始的(即,未标记的)程序代码,并识别与该未标记的代码不同的所有表达式。作为另一示例,解析器模块203还接收程序代码中的已执行表示水印信息的转换的位置的列表。这种列表例如可以在嵌入处理过程中被存储,并存储在水印库中。将所识别的候选表达式204输入到逆转换模块205中。该逆转换模块试图执行多个预定的候选数学转换,例如通过试图进行将所识别的各个多项式除以在水印的编码中使用的代码的各个多项式的多项式除法,来对多项式进行化简。如果逆转换模块不能执行任何预定的候选转换的集合,则所识别的候选表达式被忽略为没有加水印。如果这些候选转换中的一个成功,则将对应的转换添加到所识别的转换的列表中。因此,在处理了所有候选表达式之后,逆转换模块生成了被输入到解码器模块206中的所识别的转换208的序列。
解码器模块206接收所识别的转换208的序列,并根据在嵌入处理中使用的已知代码207对该序列进行解码。当该解码还包括检错或者甚至纠错时,提高了检测可靠性。因此,该解码器生成经解码的水印202。在一些实施例中,随后将经解码的水印与基准水印或基准水印的列表进行比较,以识别嵌入的信息。
下面,更详细地描述用于嵌入水印的适当数学表达式的不同示例以及对应转换的示例。
多项式:
作为第一示例,考虑多项式。
在水印嵌入处理中,在源代码中识别包含多项式的多个指令。适当表达式的示例包括简单语句,例如“ifx=2”、“while(x>2)”,等等。其他示例可包括更复杂的表达式,例如“y=x3+4x2+3x+2”。然后,由用于对一些水印信息进行编码的等效的扩展表达式来代替所识别的多项式。
例如,可以如下执行上述示例语句的转换:
if(x=2) <->if(x-2=0) <->if((x-2)(x2+x+4)=0) <->if
         (x3-x2+2x-8=0)
因此,在该示例中,表达式“if(x=2)”首先被转换为规范形式,即,使该等式成为具有多项式f(x)的形式f(x)=0。随后,将多项式f(x)与多项式g(x)相乘,其中g(x)与如上所述的对水印进行编码的一组码字中的一个相对应。在该示例中,代码可由分别与对应的多项式相对应的多个码字组成,以使得所有的码字多项式是没有实根的不可化简的多项式。在上述示例中,假设码字多项式是(x2+x+4)。最后,这些多项式彼此相乘,得到加了水印的表达式“ifx3-x2+2x-8=0”。
在所识别的指令“while(x>2)”的示例中,例如可以根据以下的处理来执行基于码字多项式(例如(x2+x+4))的类似转换处理:
while(x>2)<->while(x-2>0)<->while((x-2)(x2+x+4)>0)<->
          while(x3-x2+2x-8>0)。
因此,在上述两个示例中,在展开时使用的表达式(即(x2+x+4))对水印信息(的一部分)进行编码。
如果所识别的表达式与变量赋值(其中使用多项式(例如“y=x-2”)对变量进行赋值)相对应,该转换可包括例如根据以下的处理与一个或更多个对应的码字多项式的乘法或除法,以使得所赋的值不变:
y=x-2<->y=(x-2)(x+1)/(x+1)<->y=(x2-x-2)/(x+1)
因此,在该示例中,该码字多项式为x+1。
在更复杂的示例中,该转换可包括以下处理:
y=x-2=(x-2)(x+1)(x+2)(x+3)/[(x+1)(x+2)(x+3)]
      =(x-2)(x+1)(x+2)(x+2)/[(x+1)(x+2)(x+3)]
        +(x-2)(x+1)(x+2)/[(x+1)(x+2)(x+3)]
      =(x-2)(x+2)(x+2)/(x+2)(x+3)
        +(x-2)(x+1)/(x+1)(x+3)
      =(x3+2x2-4x-8)/(x2+5x+6)
        +(x2-x-2)/(x2+4x+3)
因此,在该示例中,表达式“y=x-2”由加了水印的表达式“y=(x3+2x2-4x-8)/(x2+5x+6)+(x2-x-2)/(x2+4x+3)”替代,并且对水印信息(的一部分)进行编码的码字多项式为(x+1)(x+2)(x+3)。
作为另一示例,我们考虑程序代码段
while(X<10){
     X++;
}
该段包括两个表达式,这两个表达式包括、或至少可表示为多项式,即,X<10和X++,X++表示赋值X=X+1。根据以下处理例如使用码字X2+X+2对第一表达式加水印:
X<10<->X-10<0<->(X-10)(X2+X+2)<0
    <->(X3-9X2-8X-20)<0
根据以下处理例如使用码字X2+X+2、X+1、X+2对第二表达式加水印:
X=X+1
  <->X=(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)
          +(X3+4X2+5X+2)/(X3+3X2+4X+4)
因此,具有通过多项式(X2+X+2)、X+1、X+2进行了编码的嵌入水印的上述程序代码段为
while(X3-9X2-8X-20<0){
         X=(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)+
            (X3+4X2+5X+2)/(X3+3X2+4X+4);
}
在后续的水印提取过程中,该提取处理可执行以下步骤:
—识别在上述示例中可能其中已嵌入了信息的表达式,例如(X4+2X3+2X2+2X+1)/(X3+2X2+3X+2)+(X3+4X2+5X+2)/(X3+3X2+4X+4);
—简化该表达式,并识别用于展开该表达式的因数,例如上述示例中的(X2+X+2)、(X+1)、(X+2)。例如,可以通过将该代码与原始的未标记代码进行比较来识别该展开式。
—根据所识别的多项式对信息进行解码。
下面,描述多种方法,通过这些方法,还可以保护所嵌入的水印不受攻击。
数据迷乱:
攻击者可能进行数据迷乱攻击,在数据迷乱攻击中,变量x被置换为例如x-a或a·x,即,通过执行变量平移和/或缩放。这种置换将影响多项式。因此,希望使多项式中的信息对于变量的平移或缩放具有适应力。
考虑了该方面的编码方法的实施例基于在展开时使用的多项式的根。如果在复平面中绘出这些根,则如果该变量被缩放和/或平移,得到的图将是缩放的和/或平移的。因此,在一个实施例中,根据一组预定的规则在与经平移和缩放的根的图相对应的多项式中对信息进行编码。这些规则的示例包括预定的缩放(例如,使得两个根之间的最大距离为1)和预定的平移(例如,使得最左边的根位于实数轴上)。但是,应该理解,可以使用其他适当的缩放、平移等等。该方法还提供了通过利用不同的多项式集合(例如具有经缩放和/或平移的变量的多项式)对数据进行展开而对同一数据进行编码的可能性。
加性攻击:
另一种可能的攻击是例如通过使用相同的方法来插入另一水印而进一步展开多项式(所谓的加性攻击)。但是,这种攻击将不改变以下事实:存在原始多项式,并且在水印提取过程中将检测原始多项式。通过只允许多项式的特定组合或通过引入其他纠错机制,在这种攻击中仍可以识别水印。例如,在水印的编码中的各个码字可以与多项式的预定组合相关。
简化和置换:
使用适于简化数学表达式并将数学表达式置换为等效的更简单的表达式的符号工具箱的攻击可能是成功的,即,可能能够去除水印。在下面,将描述使攻击者难以对表达式进行因式分解以分析因式并将该表达式置换为较简单的表达式的多种方法,从而降低了这种攻击成功的风险。
1)引入多个变量:
多项式的简化需要进行因式分解,例如多项式f(x)因式分解为两个或更多个多项式的乘积。通过在包含多个变量的表达式中引入一个以上的变量可以使得更加难以进行因式分解。这可以通过识别数学表达式中的变量并将所识别的变量置换为两个(或更多个)变量来实现。例如,在表达式z=2中,变量z可以根据代换z=x+y而替换为两个辅助变量的和,从而获得表达式x+y-2=0。此外,该置换包括修改所有语句,在该语句中,对z进行更新以相应地更新x或y(或二者)。最后,使用包含多个变量的多项式来展开表达式,例如,如下面的示例所例示的:
z=2<->x+y-2=0<->(x+y-2)((x-y)2+1)=0
<->x3+2x2y+...-2=0
还通过下面的示例来例示该方法:
考虑代码段
while(z<n){
      z++;
}
通过对表达式z<n加水印来标记上述代码。具体地说,在该示例中,通过将表达式z<n转换为x+y-n<0并通过对水印(的一部分)进行编码的x和y的多项式来展开多项式x+y-n,可以将变量z置换为x+y。同时,导致更新(在该情况下为递增)z的值的语句z++由这样的语句替代,在该语句中相应地更新变量x和y中的一个。例如,语句z++可被转换为
if(任意条件)
      x++;
else
      y++;
因此,无论测试什么条件,变量x和y中的一个且仅有一个递增。
总之,可以通过将上述示例代码段置换为下式而对上述示例代码段加水印:
while((x3+4y3-n3+5*x2y+x2n+8xy2-xn2-3yn2+2xyn)<0){
     if((x2+y2)>n)
            x++;
     else
            y++;
}
这里x2+y2>0作为伪条件而被引入,因为该条件评价为TRUE或FALSE都没有关系。
2)使用隐藏信息:
在一些情况下,在加水印时可以知道特定的变量仅可具有特定的值(例如仅正值、仅整数值、仅数值的特定有限集合,等等)。在这种情况下,可以展开表达式,以使得新表达式与只针对该变量的这些值的原始表达式相对应。
例如:
如果已知z是整数,则z=2等效于(z-2)(2z-1)=0<->2z2-5z+2=0。
如果已知z是有理数,则z=2<->(z-2)(z2-2)=0<->z3-2z2-2z+4=0。
如果已知z>0。则z=2<->(z-2)(z+1)=0<->z2-z-2=0。
使用仅取特定值的变量的一种方式是执行条件语句内的展开,该条件语句保证变量只取所关注的值,例如在“if z>0”块内,已知变量z只取正值。
示例:
在以下代码段中
while((x+y)>0){
    if(x+y==1){
    ...
    }
}
通过对表达式x+y==1进行转换以使得转换后的表达式只针对x+y>0等效于x+y==1,来对表达式x+y==1加水印。
这种转换的示例为
if(x+y==1)<->if((x+y-1)(x2+y2-2xy+x+1)==0)
             <->if((x3+y+3xy-x2y-y2-xy2+y3-1)==0)
即使攻击工具对表达式(x3+y+3xy-x2y-y2-xy2+y3-1)进行因式分解以获得(x+y-1)(x2+y2-2xy+x+1),该工具仍然必须知道右括号大于0,因为x+y>0。
3)引入隐性变量:
通过添加由隐性谓词所确定的变量,可以使得展开的表达式不可化简。在水印提取处理中置换针对隐性值的变量,这使得可以对表达式进行因式分解。
示例:(x2-y)是不可化简的,但如果将y置换为1,则(x2-1)=(x-1)(x+1)。结果,提供了隐性谓词y=1,则可如下转换语句“if(x=1)”:
if(x=1) <->if(x3-x2y+xy2-y3=0)
类似地,假设隐性谓词z=0,则可如下转换语句“if(x=1)”:
if(x=1) <->if(-1+x-x2+x3+x*z-x2*z-z=0)。
4)引入噪声:
通过将噪声添加到多项式中的系数上,即,通过稍微改变一个或更多个系数,可以使展开的多元多项式不可化简。该方法改变原始表达式,因此嵌入处理需要确保程序行为不改变。但是,该方法在许多情况下都有用,例如,在已知变量只取整数值并且程序语句包括其中检查不等式的条件语句的情况下,例如,如下面示例所例示的:
while(x-2>0) <->while(x3-x2+2x-8>0)
              <->while(x3-x2+2x-9>0)(如果x是整数)
上述方法依赖于以下条件:待加水印的代码包括多个多项式。下面将描述根据上述方案如何对其他指令进行转换,以包括多项式,并且由此用于加水印的目的。下面给出了可以使用多项式来实现的指令的多个示例:
简单比较:
if(x=2)<->if(x-2=0)
if(x>2)<->if(x-2>0)
逻辑表达式:
在下面的表达式中,“|”表示逻辑OR算子,而“&”为逻辑AND算子。
if(x=2|x=4) <->if((x-2)(x-4)=0)
               <->if(x2-6x+8=0)
if(x=2&y=4) <->if((x-2)2+(y-4)2=0)
               <->if(x2+y2-8y-2x+20=0)
if((x<2)&(x<4)) <->ifx2-6x+8<0
此外,通过使用多项式的级数展开,可以将初等函数近似为任意的精度,例如,sin(x)=x-x3/6+x5/120+...。
在一些实施例中,加水印处理插入了对水印进行编码的新的伪指令,例如,条件(x2+y2-2xy+2x-2y+2)>0将始终取值为真,因此可插入在代码中的任何地方。
在上文中,描述了加水印方法,在该方法中,通过由包括展开的多项式(即,可以进行因式分解以使得因式之一为原始多项式的多项式)的等效表达式来替代包括多项式的数学表达式(或者可被转换为包括多项式的数学表达式),来将信息嵌入到程序代码中。
下面,将描述不依赖多项式的更通用的方法。根据该通用化的方法,可以将数学表达式置换为多项式以外的等效表达式。
创建等效代数表达式:
下面是可转换为等效表达式的表达式的示例,该等效表达式中嵌入有水印信息(下文中,“|..|”表示绝对值):
if(x=2)        <->if(|x-1|-|x-3|=0)
if(x=2|x=4)   <->if(|x-3|-1=0)
if(x=2&y=4)   <->if(|x-2|+|y-4|=0)
if(2<x&x<4)     <->if(|x-3|-1<0)
                <->if(|x-2|+|x-4|-2=0)
if(x为偶数)     <->if(sin(pi*x/2=0)
                <->if(sin(pi*x/2)-sin(pi*x)/2=0)
if(x>=0|y>=0) <->if(xy+|x|y+x|y|+|xy|=0)
if(x>=0&y>=0) <->if(|x|+|y|-x-y=0)
                <->ifx2+y2-x|x|-y|y|=0
if(2<x<4&1<y<3) <->if(x2-6x+8<0&y2-4y+3<0)
                <->参见上述示例
这里要注意的是
(x<0|y<0)       <->!(x>=0&y>=0),以及
if(x<0|y<0)     <->if(x2+y2-x|x|-y|y|=0)
如结合多项式所描述的,如果在加水印时可以获得与变量x的可能值有关的附加信息,则加水印处理可创建只对x的这些值有效的等效表达式。
例如,如果在加水印时,已知x>0,则可以进行下面的转换:
if(x=3) <->if(|x-1|-2=0)。
作为另一示例,如果在加水印时,已知x是整数,则可以进行下面的转换:
if(x=3) <->if|4x-7|-5=0。
此外,诸如“if(x=2)”的表达式可以置换为包括例如指数、对数和/或三角函数的复杂表达式。例如:
if(x=2) <->if(ln(x+2)/ln(2)-2x+2=0),(假设x>0)
if(x=0|x=1) <->if(2x-sqrt(x)-1=0)
if(x=-1|x=1) <->if(sin(pi*x)/log(x2)!=0,(假设x是整数)
if(0<x<1) <->if(2x-sqrt(x)-1<0)
if-1<x<1) <->if(sin(pi*x)/x-x2/4<0)。
图4例示了在与几何表示相关的表达式中嵌入水印的示例。
在一些实施例中,加水印处理可利用描述几何问题的表达式;例如,三维空间中的线与(非平行)平面的交点的解(即,空间中的点)。在图4a中例示了该情况,图4a示出了线401在同一点405处与不同平面402、403和404相交。
在计算机程序代码中,(n维)空间中的交点通常由描述了不同几何对象的一组表达式来确定。但是,同一交点可能由相交问题的不同公式产生。例如,图4b例示了分别基于导致了同一交点的线406、平面407和曲面408的三个不同的公式。
此外,在高维度空间中可以嵌入给定的相交问题,这使得难以确定该问题的原始公式。另外,例如有限域的空间中的点可以嵌入在仿射空间或偶对空间中。所有这些后面的方法在逻辑上与展开多项式的方法类似。
在上述示例中,可以通过相交问题的选择/公式对水印进行编码。
总之,此处的公开是在计算机程序代码中嵌入信息的一种方法,该计算机程序代码包括多个程序语句,各个语句适于使数据处理系统产生预定的结果,所述方法包括:
-解析计算机程序代码,以识别包括第一数学表达式的至少一个程序语句;其中所述第一数学表达式至少包括第一代数表达式,当在数据处理系统上执行时,所述第一代数表达式适于使该数据处理系统产生至少一个数值结果;
-由经转换的数学表达式来替代所识别的程序语句中的所述第一数学表达式,以获得加了水印的程序语句,其中所述经转换的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得当在数据处理系统上执行时,加了水印的程序语句适于使该数据处理系统产生与所识别的程序语句相同的结果,并且其中所述经转换的数学表达式包括所述信息的至少一部分。
此处描述的方法提供了加水印处理,该加水印处理生成难以通过自动工具(例如迷乱和代码优化)去除的水印。此外,这将要求禁止人工分析代码和置换回原始表达式的努力。
尽管详细地描述和示出了一些实施例,但本发明不限于这些实施例,而是可以在下面的权利要求中限定的主题的范围内以其他方式来实施。
具体地说,主要结合数字水印的嵌入描述了这些实施例。但是,可以理解,此处描述的这些方法同样可应用于任何其他类型的信息的嵌入。
通过包括多种不同元件的硬件并通过适当编程的微处理器来实现此处描述的方法、产品和装置。在列举了多种装置的装置权利要求中,可以通过一个相同的硬件来实施这些装置中的多个装置,该硬件例如为适当编程的微处理器、一个或更多个数字信号处理器等等。在相互不同的从属权利要求中描述了特定措施或在不同实施例中描述了特定措施的仅有事实并不表示这些措施的组合不能用于产生良好的效果。
应该强调的是,当在本说明书中使用时采用术语“包括(comprises)/包括(comprising)”是为了指明所述特征、整体、步骤或组成部分的存在,并不排除一个或更多个其他特征、整体、步骤、组成部分或它们的组的存在或添加。

Claims (30)

1、一种在计算机程序代码(101)中嵌入信息(102)的方法,该计算机程序代码包括多个程序语句,所述方法包括以下步骤:
-解析(103)所述计算机程序代码,以识别包括第一数学表达式的至少一个程序语句,所述程序语句适于使数据处理系统对所述数学表达式进行求值以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-通过对所述第一数学表达式执行预定的转换来生成(105)经修改的数学表达式,其中所述经修改的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得所述经修改的数学表达式适于产生与所述第一数学表达式相同的结果;
-由所述经修改的数学表达式替换(105)所识别的程序语句中的所述第一数学表达式;
其特征在于,所述经修改的数学表达式表示所述信息的至少一部分;并且所述方法还包括:将待嵌入的信息编码(106)为一个或更多个码字(107),各个码字都与数学表达式的一个或更多个相应的预定转换相对应;并且通过执行所述第一数学表达式的预定转换来生成所述经修改的数学表达式的步骤基于所述一个或更多个码字。
2、根据权利要求1所述的方法,该方法还包括以下步骤:通过将从所述第一代数表达式得到的代数表达式与辅助代数表达式进行组合来生成所述经转换的代数表达式,其中所述辅助代数表达式表示所述信息的至少一部分。
3、根据权利要求1或2所述的方法,该方法还包括以下步骤:解析所述第一代数表达式,以识别至少第一变量;以及由至少两个变量的组合来替代所述第一变量。
4、根据权利要求3所述的方法,其中,至少两个变量的所述组合是所述至少两个变量的线性组合。
5、根据权利要求1至2中的任意一项所述的方法,其中,所述第一代数表达式包括至少一个变量;并且其中所述经修改的数学表达式适于只针对所述至少一个变量的值的预定子集产生与所述第一数学表达式相同的结果。
6、根据权利要求1至2中的任意一项所述的方法,其中所识别的程序语句适于将所述第一数学表达式求值为整数数据类型;并且其中所述经修改的数学表达式适于产生浮点结果,该浮点结果仅在转换为整数数据类型时导致与对所述第一数学表达式的求值相同的数值结果。
7、根据权利要求1至2中的任意一项所述的方法,其中,对所述信息进行编码的步骤包括:利用纠错码对所述信息进行编码。
8、根据权利要求1至2中的任意一项所述的方法,其中,所述第一数学表达式包括第一代数表达式与第二代数表达式的比较,该比较适于使数据处理系统对所述第一和第二代数表达式的结果进行比较;并且其中,生成所述经修改的数学表达式的步骤包括由第一经转换的代数表达式来替代所述第一代数表达式和/或由第二经转换的代数表达式来替代所述第二代数表达式。
9、根据权利要求8所述的方法,其中,所述第一数学表达式包括等效于第一多项式与零的比较的第一条件;并且其中,生成所述经修改的数学表达式的步骤包括由经转换的多项式与零的比较来替代所述第一条件,其中所述经转换的多项式能够化简为至少所述第一多项式与第二多项式的乘积。
10、根据权利要求8所述的方法,其中,所述第一数学表达式包括等效于第一多项式与零的比较的第一条件;并且其中,生成所述经修改的数学表达式的步骤包括由经转换的多项式与零的比较来替代所述第一条件,其中所述经转换的多项式包括具有由预定的隐性谓词确定的对应隐性值的辅助变量,其中所述隐性谓词是对于信息嵌入处理具有已知的真值但对于对手难以分解的布尔表达式,其中所述隐性值表示真值;并且其中仅当所述辅助变量是由其隐性值置换时,所述经转换的多项式能够化简为至少所述第一多项式与第二多项式的乘积。
11、根据权利要求9所述的方法,其中,所述第二多项式没有实根。
12、根据权利要求10所述的方法,其中,所述第二多项式没有实根。
13、根据权利要求1至2中的任意一项所述的方法,其中,所述信息包括数字水印。
14、根据权利要求1至2中的任意一项所述的方法,其中,所述计算机程序代码包括源代码和目标代码中的至少一个。
15、根据权利要求1至2中的任意一项所述的方法,其中,所述第一数学表达式是程序语句的至少一部分,当在数据处理系统上执行时,该程序语句使所述数据处理系统生成具有数值数据类型或布尔数据类型的至少一个结果。
16、根据权利要求15所述的方法,其中,所述数值数据类型是浮点数据类型或整数类型。
17、根据权利要求1至2中的任意一项所述的方法,其中,所述第一代数表达式包括多项式。
18、根据权利要求17所述的方法,其中,所述多项式在复平面中具有一个或更多个根,并且其中根据这些根在复平面中的位置而以多项式对信息进行编码。
19、根据权利要求1至2中的任意一项所述的方法,其中,所述第一代数表达式表示几何相交问题。
20、根据权利要求1至2中的任意一项所述的方法,该方法还包括将所述计算机程序代码加载到计算机的存储器中。
21、一种检测嵌入在计算机程序代码(209)中的信息(202)的方法,该计算机程序代码包括多个程序语句,所述方法包括以下步骤:
-解析(203)所述计算机程序代码,以识别包括第一数学表达式的至少一个程序语句,该程序语句适于使数据处理系统对所述第一数学表达式进行求值以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-至少执行(205)所述第一数学表达式的预定的转换集合中的第一转换,其中该转换包括以由与所述第一代数表达式不同的经转换的代数表达式来替代所述第一代数表达式;
-确定(205)所述第一转换是否导致了产生与所述第一数学表达式相同的结果的经转换的数学表达式;
-如果所述第一转换导致了产生与所述第一数学表达式相同的结果的经转换的数学表达式,则将所述第一转换添加(206)到所识别的转换的序列中;以及
-基于预定的代码(207)对所识别的转换的序列进行解码(206)。
22、根据权利要求21所述的方法,其中,所述信息包括数字水印。
23、根据权利要求21所述的方法,其中,所述计算机程序代码包括源代码和目标代码中的至少一个。
24、根据权利要求21所述的方法,其中,所述第一数学表达式是程序语句的至少一部分,当在数据处理系统上执行时,该程序语句使所述数据处理系统生成具有数值数据类型或布尔数据类型的至少一个结果。
25、根据权利要求24所述的方法,其中,所述数值数据类型是浮点数据类型或整数类型。
26、根据权利要求21所述的方法,其中,所述第一代数表达式包括多项式。
27、根据权利要求26所述的方法,其中,所述多项式在复平面中具有一个或更多个根,并且其中根据这些根在复平面中的位置而以多项式对信息进行编码。
28、根据权利要求21所述的方法,其中,所述第一代数表达式表示几何相交问题。
29、根据权利要求21所述的方法,该方法还包括将所述计算机程序代码加载到计算机的存储器中。
30、一种在计算机程序代码中嵌入信息的数据处理系统,该数据处理系统包括:
-用于解析(103)所述计算机程序代码以识别包括第一数学表达式的至少一个程序语句的模块,所述程序语句适于使数据处理系统对所述数学表达式进行求值以产生结果;其中所述第一数学表达式至少包括适于产生至少一个数值结果的第一代数表达式;
-用于通过对所述第一数学表达式执行预定的转换来生成(105)经修改的数学表达式的模块,其中所述经修改的数学表达式包括经转换的代数表达式,而不是所述第一代数表达式,以使得所述经修改的数学表达式适于产生与所述第一数学表达式相同的结果;
-用于由所述经修改的数学表达式替换(105)所识别的程序语句中的所述第一数学表达式的模块;
其特征在于,所述经修改的数学表达式表示所述信息的至少一部分;并且所述系统还包括:用于将待嵌入的信息编码(106)为一个或更多个码字(107)的模块,各个码字都与数学表达式的一个或更多个相应的预定转换相对应;并且通过执行所述第一数学表达式的预定转换来生成所述经修改的数学表达式的步骤基于所述一个或更多个码字。
CNB2005800444247A 2004-12-22 2005-11-24 通过等效数学表达式对计算机程序代码加水印的方法和系统 Expired - Fee Related CN100533450C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US63920304P 2004-12-22 2004-12-22
US60/639,203 2004-12-22
EP05388098.5 2005-11-15

Publications (2)

Publication Number Publication Date
CN101088095A CN101088095A (zh) 2007-12-12
CN100533450C true CN100533450C (zh) 2009-08-26

Family

ID=35636900

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005800444247A Expired - Fee Related CN100533450C (zh) 2004-12-22 2005-11-24 通过等效数学表达式对计算机程序代码加水印的方法和系统

Country Status (7)

Country Link
US (1) US8321689B2 (zh)
EP (1) EP1675031B1 (zh)
KR (1) KR20070086522A (zh)
CN (1) CN100533450C (zh)
AT (1) ATE454673T1 (zh)
DE (1) DE602005018736D1 (zh)
WO (1) WO2006066698A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008052258A1 (en) * 2006-10-31 2008-05-08 Inivai Technologies Pty Ltd A system and method for processing flow cytometry data
US8347266B2 (en) * 2007-12-10 2013-01-01 Microsoft Corporation Declarative object identity
US20100095376A1 (en) * 2008-03-07 2010-04-15 Rodriguez Tony F Software watermarking
FR2931269A1 (fr) * 2008-05-16 2009-11-20 Ateji Soc Par Actions Simplifi Procede et systeme de developpement de programmes paralleles
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
KR101316697B1 (ko) * 2012-02-23 2013-10-10 숭실대학교산학협력단 소프트웨어 저작권 보호 장치 및 그 방법
EP2831797B1 (en) 2012-03-30 2018-05-02 Irdeto B.V. Securing accessible systems using dynamic data mangling
US10084611B2 (en) * 2012-06-29 2018-09-25 Siemens Schweiz Ag Programmable symbol animation pre-processor for building automation graphics
IL224743A0 (en) * 2013-02-14 2013-06-27 Harel Cain A system for automatic obfuscation of computer programs
GB201405754D0 (en) * 2014-03-31 2014-05-14 Irdeto Bv Protecting an item of software comprising conditional code
US10762179B2 (en) 2018-08-08 2020-09-01 Irdeto B.V. System and method for watermarking software
CN110809762A (zh) 2019-05-20 2020-02-18 阿里巴巴集团控股有限公司 使用嵌入式版权信息识别版权材料
SG11202001999UA (en) 2019-05-20 2020-04-29 Alibaba Group Holding Ltd Identifying copyrighted material using embedded timestamped copyright information
CN110457874A (zh) * 2019-08-02 2019-11-15 中国工商银行股份有限公司 一种信息写入方法、信息读取方法及装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5546383A (en) * 1993-09-30 1996-08-13 Cooley; David M. Modularly clustered radiotelephone system
US5745569A (en) * 1996-01-17 1998-04-28 The Dice Company Method for stega-cipher protection of computer code
SE512613C2 (sv) * 1996-12-30 2000-04-10 Ericsson Telefon Ab L M Metod och organ för informationshantering
JP4739465B2 (ja) * 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
SE514792C2 (sv) * 1997-12-22 2001-04-23 Ericsson Telefon Ab L M Förfarande och anordning för avkodning vid kanaloptimerad vektorkvantisering
US6834343B1 (en) * 1999-05-27 2004-12-21 Microsoft Corporation Method for watermarking computer programs
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6891896B1 (en) * 2000-02-10 2005-05-10 Paradyne Corporation Embedded signal constellations
US6829710B1 (en) * 2000-03-14 2004-12-07 Microsoft Corporation Technique for producing, through watermarking, highly tamper-resistant executable code and resulting “watermarked” code so formed
JP2002132586A (ja) * 2000-10-25 2002-05-10 Pumpkin House:Kk コンテンツへの情報埋込み方法および装置,コンテンツ復元方法および装置,ならびに情報取出し方法および装置
WO2003098431A2 (en) * 2002-05-22 2003-11-27 Koninklijke Philips Electronics N.V. Method and apparatus for decoding instruction sequences

Also Published As

Publication number Publication date
EP1675031A1 (en) 2006-06-28
WO2006066698A1 (en) 2006-06-29
DE602005018736D1 (de) 2010-02-25
CN101088095A (zh) 2007-12-12
US8321689B2 (en) 2012-11-27
US20090296922A1 (en) 2009-12-03
KR20070086522A (ko) 2007-08-27
EP1675031B1 (en) 2010-01-06
ATE454673T1 (de) 2010-01-15

Similar Documents

Publication Publication Date Title
CN100533450C (zh) 通过等效数学表达式对计算机程序代码加水印的方法和系统
CN101084478B (zh) 为计算机程序代码加水印
CN109992935B (zh) 一种源代码保护方法及装置
US20170372068A1 (en) Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
CN108509772B (zh) 基于执行顺序和单点逻辑的源代码加固方法及装置
US9003398B2 (en) Stochastic method for program security using deferred linking
CN102341806A (zh) 软件保护
CN113094667B (zh) 一种防止java程序被反编译的系统
US20090044016A1 (en) Protecting a dsp algorithm
US8661559B2 (en) Software control flow watermarking
MXPA04006452A (es) Metodo y dispositivo de autenticidad de datos numericos a partir de un modulo de extension de autenticacion.
Ding et al. Towards learning (dis)-similarity of source code from program contrasts
CN108446538B (zh) 基于状态、符号执行和单点逻辑的源代码加固方法及装置
Menguy et al. Ai-based blackbox code deobfuscation: Understand, improve and mitigate
CN108460253B (zh) 基于顺序、符号执行和单点逻辑的源代码加固方法及装置
US11250127B2 (en) Binary software composition analysis
CN108446536B (zh) 一种基于符号执行和单点逻辑的源代码加固方法及装置
CN113094665A (zh) 一种防止java程序被反编译的系统
KR20200084441A (ko) 머신러닝의 학습 데이터셋 생성을 위한 애플리케이션 자동화 빌드 장치 및 방법
RU2137185C1 (ru) Способ комплексной защиты процесса обработки информации в эвм от несанкционированного доступа, программных закладок и вирусов
KR101810765B1 (ko) 상수 인코딩을 이용한 정적 워터마킹 방법
CN113094666B (zh) 一种防止java程序被反编译的系统
KR101097104B1 (ko) 저작권 정보 삽입 시스템 및 방법
CN108446541B (zh) 基于有限状态机和符号执行的源代码加固方法及装置
CN111984939A (zh) 字符串混淆方法、装置、电子设备和存储介质

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

Granted publication date: 20090826

CF01 Termination of patent right due to non-payment of annual fee