Systems and Methods for Watermarking Software and Other Media
Systems and methods are disclosed for embedding information in software and/or other electronic content such that the information is difficult for an unauthorized party to detect, remove, insert, forge, and/or corrupt. The embedded information can be used to protect electronic content by identifying the content's source, thus enabling unauthorized copies or derivatives to be reliably traced, and thus facilitating effective legal recourse by the content owner. Systems and methods are also disclosed for protecting, detecting, removing, and decoding information embedded in electronic content, and for using the embedded information to protect software or other media from unauthorized analysis, attack, and/or modification.
1 . A method for watermarking computer code, the method including.
(a)1) generating primed computer code by inserting a first programming construct into the computer code;
(b)(1) finding the first programming construct in the primed computer code;
(c)(1) generating watermarked computer code by inserting watermarking information at a location indicated by the first programming construct.
2 . A method as in claim 1 , in which finding the first programming construct in the primed computer code includes:
searching the primed computer code for a predefined pattern associated with the first programming construct.
3 . A method as in claim 1 , in which the first programming construct comprises an executable code sequence.
4 . A method as in claim 3 , in which the computer code comprises computer source code.
5 . A method as in claim 4 , further including:
(a)(2) compiling and linking the primed computer code to form an executable computer program.
6 . A method as in claim 5 , in which the first programming construct is inserted using a binary code modification tool.
7 . A methods as in claim 1 , in which generating primed computer code by inserting a first programming construct into the computer code, further includes:
maintaining a record of the location at which the first programming construct was inserted into the computer code; and
wherein finding the first programming construct in the primed computer code includes looking up said location in said record.
8 . A method as in claim 4 , further including:
(a)(2) compiling the primed computer code;
(c)(2) linking the watermarked computer code to yield an executable computer program.
9 . A method as in claim 4 , further including:
(a)(0) compiling the computer code;
(a)(2) linking the watermarked computer code to yield an executable computer program.
10 . A method as in claim 1 , in which the watermark comprises a portion of another watermark.
11 . A method as in claim 1 , in which inserting the first programming construct into the computer code includes:
inserting an inlined function, and at least one call to the inlined function, into the computer code.
12 . A method as in claim 1 , in which inserting the first programming construct into the computer code includes:
inserting a macro definition, and at least one reference to the macro definition into the computer code.
13 . A method as in claim 12 , in which the macro definition includes a sequence of one or more assembly language statements that are not executed when said watermarked computer code is executed.
14 . A method as in claim 1 , in which the first programming construct includes one or more unused entries in one or more tables selected from a group consisting of: a jump table, an index table, a virtual function table, an import table, and an export table.
15 . A method as in claim 1 , in which the watermarked computer code forms part of a computer program, the computer program including a header, and in which the first programming construct includes one or more unused entries in the header.
16 . A method for inserting a watermark into a computer program, the method including:
inserting at least one macro into a source code representation of the computer program, each macro being operable to generate a predefined pattern when the computer program is compiled,
compiling the source code to yield an object code representation of the computer program;
searching the object code for at least one instance of the predefined pattern,
replacing the predefined pattern with a watermark.
17 . A method for watermarking computer code, the method including:
inserting watermarking information into the computer code by modifying one or more executable code components in the computer code.
18 . A method as in claim 17 , in which the computer code comprises object code.
19 . A method as in claim 17 , in which the computer code comprises an executable computer program.
20 - 44 . (canceled)