Back to EveryPatent.com
United States Patent | 6,192,475 |
Wallace | February 20, 2001 |
A system and method for rewriting software into a protected form, called cloaked software, such that this cloaked form is protected from analysis or reverse engineering while at the same time the cloaked software is executable. Further, said cloaked software may be set up so that it requires a correct key or keys to be supplied, when it is to be run, for it to execute correctly. Cloaking modifies the basic operations within the software so that the logical connections or data flow among the program operations is no longer visible. In fact, cloaking makes the correct dataflow among operations dependent on a complex interrelated set of addressing operations within the cloaked program. These addressing operations are designed so that their analysis is equivalent to a computationally intractable NP-complete problem. This situation prevents reverse-engineering and unauthorized tampering. Further, these interrelated addressing operations may be set up to use a key or keys in a way that is integral to their operation. This makes the key or keys necessary for correct program operation in such a way that removing the program's need for the keys requires the solution of an NP-complete problem.
Inventors: | Wallace; David R. (1960 Jones St., San Francisco, CA 94133) |
Appl. No.: | 048138 |
Filed: | March 25, 1998 |
Current U.S. Class: | 713/190; 705/55; 713/187; 713/189; 713/193 |
Intern'l Class: | H04L 009/00 |
Field of Search: | 713/187,190,189,193 705/55 |
4471163 | Sep., 1984 | Donald et al. | 178/22. |
4558176 | Dec., 1985 | Arnold et al. | 178/22. |
4562305 | Dec., 1985 | Gaffney, Jr. | 178/22. |
4565901 | Jan., 1986 | Best | 178/22. |
4571678 | Feb., 1986 | Chaitin | 364/300. |
4584641 | Apr., 1986 | Guglielmino | 364/200. |
4593353 | Jun., 1986 | Pickholtz | 364/200. |
4644493 | Feb., 1987 | Chandra et al. | 364/900. |
4796220 | Jan., 1989 | Wolfe | 364/900. |
5109413 | Apr., 1992 | Comerford et al. | 380/4. |
5123045 | Jun., 1992 | Ostrovsky et al. | 380/4. |
5199066 | Mar., 1993 | Logan | 380/4. |
5222133 | Jun., 1993 | Chou et al. | 380/4. |
5249295 | Sep., 1993 | Briggs et al. | 395/650. |
5295187 | Mar., 1994 | Miyoshi | 380/4. |
5337357 | Aug., 1994 | Chou et al. | 380/4. |
5343527 | Aug., 1994 | Moore | 380/4. |
5530752 | Jun., 1996 | Rubin | 380/4. |
5659614 | Aug., 1997 | Bailey, III | 380/4. |
6009543 | Dec., 1999 | Shavit | 714/200. |
Allen, J.R., K. Kennedy, C. Porterfield and J. Warren, "Conversion of control dependence to data dependence," Proc. Of the 10th ACM Symposium on Principles of Programming Languages, pp. 177-189, Jan. 1983. Kuck, D.J., R.H. Kuhn, D.A. Padua, B. Leasure and M. Wolfe, "Dependence graphs and compiler optimizations," Proc. Of the 8th ACM Symposium on Principles of Programming Languages, pp. 207-218, Jan. 1981. Schrijver, Alexander, "Theory of lattices and linear diophantine equations," Chapter 4, Theory of Integer and linear Programming, John Wiley, New York, 1986, pp. 45-59. Wallace, David, "Dependence of Multi-Dimensional Array References," Proceedings of the International Conference on Supercomputing, Jul. 1988, pp. 418-428. Michael Jos Wolfe, Optimizing Supercompilers for Supercomputers, UMI Dissertation Services (1988). |