Claims
- 1. A method for protecting software, the source code for the software having directives marking blocks or lines of the source code to be modified or encrypted, the method comprising the steps of:
modifying the source code using a random factor based on the directives; compiling the source code to produce a binary file; storing source code starting and ending lines and binary file positions of each of the blocks to be encrypted; encrypting portions of the binary file that correspond to each of the blocks to be encrypted; decrypting each of the blocks, when a function inside each respective block is required during execution of the software.
- 2. The method of claim 1, wherein one of the directives marks a block of lines to be permuted, and the step of modifying the source code comprises the step of reordering the lines.
- 3. The method of claim 1, wherein one of the directives marks an if-then-else statement, and the step of modifying the source code comprises the steps of:
generating a random bit; and negating a condition parameter and reversing an order of objects of the if-then-else statement if the random bit is equal to a predetermined bit.
- 4. The method of claim 1, wherein one of the directives marks a constant declaration statement and has a size parameter and a conditional parameter, and the step of modifying the source code comprises the steps of:
replacing a constant value of the constant declaration statement with an arithmetic expression of a size determined by the size parameter and that evaluates to the constant value; evaluating the conditional parameter; and setting a constant to an unpredictable value if the conditional parameter does not evaluate to a predetermined logical value.
- 5. A method for protecting software, the source code for the software having a first directive marking an encryption beginning point and a second directive marking an encryption end point, the method comprising the steps of:
processing the source code to identify a block of code between the first and second directives; compiling the source code to produce a binary file; and encrypting a portion of the binary file corresponding to the block of code.
- 6. The method of claim 5, further comprising the step of storing line number information for the block, wherein the step of encrypting the portion of the binary file is based on the stored line number information.
- 7. The method of claim 5, further comprising the step of decrypting the encrypted portion of the binary file during execution of the binary file based on a secret key obtained during execution of the binary file.
- 8. The method of claim 7, further comprising the steps of:
accepting a trigger value; encrypting a random string using the trigger value as a key to obtain a first encrypted value; comparing the first encrypted value to a second encrypted value obtained by encrypting the random string with the secret key; outputting the secret key if the first encrypted value equals the second encrypted value.
- 9. The method of claim 7, further comprising the steps of:
accepting a trigger value; generating a hash of the trigger value; comparing the hash of the trigger value to a hash of the secret key; outputting the secret key if the hash of the trigger value equals the hash of the secret key.
- 10. The method of claim 7, further comprising the steps of:
accepting a trigger value; encrypting a random string using a pre-determined subset of the trigger value as a key to obtain a first encrypted value; comparing the first encrypted value to a second encrypted value obtained by encrypting the random string with the secret key; outputting the secret key if the first encrypted value equals the second encrypted value.
- 11. The method of claim 7, further comprising the steps of:
accepting a sequence of trigger values; encrypting a random string using the sequence of trigger values as keys to obtain a first sequence of encrypted values; comparing the first sequence of encrypted values to a second sequence of encrypted values obtained by encrypting the random string with a sequence of secret sub-keys; outputting the secret key if each member of the first sequence of encrypted values equals each respective member of the second sequence of encrypted values, wherein the secret key is equal to an exclusive OR of the sequence of secret sub-keys.
- 12. A method for protecting software, the source code for the software having a directive marking an if-then-else statement to be permuted, the method comprising the steps of:
generating a random bit; negating a condition parameter and reversing an order of objects of the if-then-else statement if the random bit is equal to a predetermined bit; and compiling the source code to produce a binary file.
- 13. A method for protecting software, the source code for the software having a directive marking a constant declaration statement to be permuted, the directive having a size parameter and a conditional parameter, the method comprising the steps of:
replacing a constant value of the constant declaration statement with an arithmetic expression of a size determined by the size parameter and that evaluates to the constant value; evaluating the conditional parameter; and setting the constant to an unpredictable value if the conditional parameter does not evaluate to a predetermined logical value.
- 14. The method of claim 13, wherein the conditional parameter is a logical expression comparing a current time function to a license parameter time value.
- 15. A method for identifying protected software for which a plurality of different builds are produced, the method comprising the steps of:
dividing each build of the plurality of builds into sub-strings; storing the sub-strings in a table, each sub-string being associated with at least one build identification number; dividing a build to be identified into sub-strings; performing a lookup operation for each of the sub-strings of the build to be identified to determine corresponding build identification numbers; and analyzing the corresponding build identification numbers to determine an overall build identification number for the build to be identified.
Parent Case Info
[0001] This application claims the benefit of U.S. Provisional Application No. 60/372,202 filed Apr. 15, 2002.
Provisional Applications (1)
|
Number |
Date |
Country |
|
60372202 |
Apr 2002 |
US |