IP Library Patent Application 11737611
Patent Application
App. No. 11/737,611

SELF-VERIFYING SOFTWARE TO PREVENT REVERSE ENGINEERING AND PIRACY

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 None
App. No.
11/737,611
Abstract

Reverse engineering and piracy of software is prevented by encrypting code blocks of a program. A program is modified to include additional protective code, including a protective code launcher which is launched with the program. Decryption and execution code is also provided for the protective code launcher and one or more code blocks of the program. A given code block is encrypted using a key which is based on a previous code block, and the previous code block is encrypted using a key which is based on a further previous code block, and so forth. If a hacker modifies the program, such as to avoid a message which requires the user to purchase the program, the program will be disabled. The program can also be encrypted based on computer hardware such as a hard disk serial number so that it will only operate on a particular computer.

Claims (48)

1 . A computer-implemented method for protecting software, comprising:

adding decrypting and executing code to a program to be protected, the program includes one code block which is executed during a runtime of the program;

encrypting the one code block using a key which is based partially or totally on another code block of the program to provide an encrypted one code block, the decrypting and executing code includes: (a) code for decrypting the encrypted one code block to provide a decrypted one code block and (b) code for executing the decrypted one code block.

2 . The computer-implemented method of claim 1 , further comprising:

adding code to the program for launching the decrypting and executing code, the code for launching is executed responsive to the program being launched or a part of the program being executed.

3 . The computer-implemented method of claim 2 , further comprising:

encrypting the another code block to provide an encrypted another code block, the code for launching includes: (a) code for decrypting the encrypted another code block to provide a decrypted another code block and (b) code for executing the decrypted another code block.

4 . The computer-implemented method of claim 1 , further comprising:

adding additional decrypting and executing code to the program; and

encrypting a further code block of the program which is executed during a runtime of the program using a key which is based partially or totally on the one code block, to provide an encrypted further code block, the additional decrypting and executing code includes: (a) code for decrypting the encrypted further code block to provide a decrypted further code block and (b) code for executing the decrypted further code block.

5 . The computer-implemented method of claim 1 , further comprising:

adding additional decrypting and executing code to the program; and

encrypting a further code block of the program which is executed during a runtime of the program using a key which is based partially or totally on the another and one code blocks, to provide an encrypted further code block, the additional decrypting and executing code includes: (a) code for decrypting the encrypted further code block to provide a decrypted further code block and (b) code for executing the decrypted further code block.

6 . The computer-implemented method of claim 1 , wherein:

the one code block is encrypted using the value of at least one variable or memory location, accessible during a runtime of the program prior to executing the one code block, as the key or part of the key.

7 . The computer-implemented method of claim 1 , further comprising:

the one code block is encrypted using at least one call stack function of the program which is accessible during a runtime of the program, as the key or part of the key.

8 . The computer-implemented method of claim 1 , wherein:

the code includes source code in plain text, instructions, byte code, intermediate code or instructions or a combination thereof.

9 . The computer-implemented method of claim 1 , wherein:

the program includes an executable having data content and logic for accessing the data content.

10 . The computer-implemented method of claim 1 , wherein:

at least one of the code blocks includes a functionality which requires a user to provide an authorization to use the program.

11 . The computer-implemented method of claim 1 , wherein: the one code block is executed after the another code block.

12 . A computer-implemented method for running protected software, comprising:

receiving a request to launch a program;

based on the request, decrypting an encrypted particular code block and encrypted particular protective code of the program to provide a decrypted particular code block and decrypted particular protective code, respectively;

executing the decrypted particular code block; and

executing the decrypted particular protective code to decrypt an encrypted additional code block of the program, thereby providing a decrypted additional code block, and to execute the decrypted additional code block.

13 . The computer-implemented method of claim 12 , wherein:

the encrypted additional code block is decrypted using a key which is based partially or totally on at least a portion of the decrypted particular code block.

14 . The computer-implemented method of claim 12 , further comprising:

executing the decrypted particular protective code to decrypt encrypted additional protective code of the additional code block, to provide decrypted additional protective code; and

executing the decrypted additional protective code to decrypt an encrypted further code block of the program, thereby providing a decrypted further code block, and to execute the decrypted further code block.

15 . The computer-implemented method of claim 12 , further comprising:

identifying a value of at least one variable or memory location of the program which is accessible during a runtime of the program, the additional encrypted code block is decrypted based partially or totally on the value.

16 . The computer-implemented method of claim 12 , further comprising:

identifying at least one call stack function of the program which is accessible during a runtime of the program, the additional encrypted code block is decrypted based partially or totally on the at least one call stack function.

17 . The computer-implemented method of claim 12 , further comprising:

accessing information stored on a portable media for use as a key or part of a key in the encrypting and decrypting of the particular or additional code block.

18 . Computer readable media having computer readable software embodied thereon for programming at least one processor to perform a method, the method comprising:

encrypting parts of the software using a key totally or partially based on other parts of the software;

decrypting the encrypted part of the software at runtime to provide a decrypted part of the software; and

executing the decrypted part of the software, where parts of the software include parts of the software in one or more files, or byte code or intermediate code or source code or code blocks or instructions which are executed at runtime.

19 . The computer readable media of claim 18 , wherein:

the encrypting comprises encrypting parts of the software using a key totally or partially based on a combination of other parts of the software, runtime data, call stack data.

20 . The computer readable media of claim 18 , wherein:

the encrypting comprises encrypting parts of the software using a key totally or partially based on a combination of two or more of items such as other parts of the software, runtime data, call stack data, hardware information, network information and information from portable media, as the key or part of the key, where parts of the software include parts of the software in one or more files, or byte code or intermediate code or source code or code blocks or instructions which are executed at runtime.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 15, 2015
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 034766/0509 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 26, 2007
From: G, MAURUTHI
To: MICROSOFT CORPORATION
Reel/Frame 019218/0512 →