IP Library Granted Patent US 7,617,396
Granted Patent B2
US 7,617,396 · App. 10/223,205 · Granted Nov 10, 2009

Method and apparatus for watermarking binary computer code with modified compiler optimizations

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,617,396
App. No.
10/223,205
Granted
Nov 10, 2009
Kind
B2
Abstract

A system and apparatus for inserting a watermark into a compiled computer program selectively replaces specified optimizations by non-optimized code to encode bit values of the watermark. The watermark is read by decoding the executable code and assigning the decoded bit values, determined by the presence or absence of optimized code, to bit positions in a signature.

Claims (44)

1. A computer-implemented method for generating executable computer code that is encoded with a watermark, the method comprising:

receiving, by a processor, program code that is not compiled;

receiving the watermark that includes a plurality of binary digits;

compiling the program code to generate compiled code that includes a first optimized code segment that includes one or more instructions and is associated with a first binary digit included in the watermark and a second optimized code segment that includes one or more instructions and is associated with a second binary digit included in the watermark;

determining that the first binary digit has a value equal to a first value and, based on the determination, replacing the first optimized code segment with a first non-optimized code segment that includes at least one additional instruction relative to the one or more instructions included in the first optimized code segment;

determining that the second binary digit has a value equal to a second value and, based on the determination, not replacing the second optimized code segment with a second non-optimized code segment;

searching the compiled code for the presence of either the first optimized code segment or the first non-optimized code segment;

upon locating the first non-optimized code segment, setting a first decoded binary digit to have a value equal to the first value;

searching the compiled code for the presence of either the second optimized code segment or the second non-optimized code segment; and

upon locating the second optimized code segment, setting a second decoded binary digit to have a value equal to the second value.

2. The method of claim 1 , wherein the step of compiling the program code includes performing a loop unroll optimization to generate the first optimized code segment.

3. The method of claim 1 , wherein the step of compiling the program code includes performing a constant propagation optimization to generate the first optimized code segment, wherein performing the constant propagation optimization includes replacing expressions that evaluate to a constant with a constant value.

4. The method of claim 1 , wherein the step of compiling the program code includes performing a copy propagation optimization to generate the first optimized code segment.

5. The method of claim 1 , wherein the step of compiling the program code includes performing a strength reduction optimization to generate the first optimized code segment, wherein performing the strength reduction optimization includes replacing at least one operation with a more efficient operation.

6. A computer-readable storage medium storing instructions that, when executed by a processor, cause a computer system to generate executable computer code that is encoded with a watermark, by performing the steps of:

receiving program code that is not compiled;

receiving the watermark that includes a plurality of binary digits;

compiling the program code to generate compiled code that includes a first optimized code segment that includes one or more instructions and is associated with a first binary digit included in the watermark and a second optimized code segment that includes one or more instructions and is associated with a second binary digit included in the watermark;

determining that the first binary digit has a value equal to a first value and, based on the determination, replacing the first optimized code segment with a first non-optimized code segment that includes at least one additional instruction relative to the one or more instructions included in the first optimized code segment;

determining that the second binary digit has a value equal to a second value and, based on the determination, not replacing the second optimized code segment with a second non-optimized code segment;

searching the compiled code for the presence of either the first optimized code segment or the first non-optimized code segment;

upon locating the first non-optimized code segment, setting a first decoded binary digit to have a value equal to the first value;

searching the compiled code for the presence of either the second optimized code segment or the second non-optimized code segment; and

upon locating the second optimized code segment, setting a second decoded binary digit to have a value equal to the second value.

7. The computer-readable storage medium of claim 6 , wherein the step of compiling the program code includes performing a loop unroll optimization to generate the first optimized code segment.

8. The computer-readable storage medium of claim 6 , wherein the step of compiling the program code includes performing a constant propagation optimization to generate the first optimized code segment, wherein performing the constant propagation optimization includes replacing expressions that evaluate to a constant with a constant value.

9. The computer-readable storage medium of claim 6 , wherein the step of compiling the program code includes performing a copy propagation optimization to generate the first optimized code segment.

10. The computer-readable storage medium of claim 6 , wherein the step of compiling the program code includes performing a strength reduction optimization to generate the first optimized code segment, wherein performing the strength reduction optimization includes replacing at least one operation with a more efficient operation.

11. A computer system for generating executable computer code that is encoded with a watermark, the system comprising:

a processor; and

a memory storing instructions configured to:

receive program code that is not compiled;

receive the watermark that includes a plurality of binary digits;

compile the program code to generate compiled code that includes a first optimized code segment that includes one or more instructions and is associated with a first binary digit included in the watermark and a second optimized code segment that includes one or more instructions and is associated with a second binary digit included in the watermark;

determine that the first binary digit has a value equal to a first value and, based on the determination, replace the first optimized code segment with a first non-optimized code segment that includes at least one additional instruction relative to the one or more instructions included in the first optimized code segment; and

determine that the second binary digit has a value equal to a second value and, based on the determination, not replace the second optimized code segment with a second non-optimized code segment;

search the compiled code for the presence of either the first optimized code segment or the first non-optimized code segment;

upon locating the first non-optimized code segment, set a first decoded binary digit to have a value equal to the first value;

search the compiled code for the presence of either the second optimized code segment or the second non-optimized code segment; and

upon locating the second optimized code segment, set a second decoded binary digit to have a value equal to the second value.

12. The computer system of claim 11 , wherein compiling the program code includes performing a loop unroll optimization to generate the first optimized code segment.

13. The computer system of claim 11 , wherein compiling the program code includes performing a constant propagation optimization to generate the first optimized code segment, wherein performing the constant propagation optimization includes replacing expressions that evaluate to a constant with a constant value.

14. The computer system of claim 11 , wherein compiling the program code includes performing a copy propagation optimization to generate the first optimized code segment.

15. The computer system of claim 11 , wherein compiling the program code includes performing a strength reduction optimization to generate the first optimized code segment, wherein performing the strength reduction optimization includes replacing at least one operation with a more efficient operation.

Assignments (4)
CORRECTIVE ASSIGNMENT ON REEL 018711, FRAME 0567 Recorded Feb 15, 2007
From: QST HOLDINGS, LLC
To: NVIDIA CORPORATION
Reel/Frame 018923/0630 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 5, 2007
From: QST HOLDINGS, L.L.C.
To: NVIDIA CORPORATION
Reel/Frame 018711/0567 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 5, 2006
From: TECHFARM VENTURES MANAGEMENT, LLC
To: QST HOLDINGS, LLC
Reel/Frame 018224/0634 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 30, 2006
From: QUICKSILVER TECHNOLOGY, INC.
To: TECHFARM VENTURES MANAGEMENT, LLC
Reel/Frame 018194/0515 →