System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms
Abstract
Method, system and computer program product for applying existing anti-tampering and obfuscation techniques to virtual machine technology and offers several distinct advantages. The anti-tampering and obfuscation transforms can be applied continuously to prevent adversaries from gaining information about the program through emulation or dynamic analysis. In addition, the encryption can be used to prevent hackers from gaining information using static attacks. The use of a virtual machine also allows for low overhead execution of the obfuscated binaries as well as finer adjustment of the amount of overhead that can be tolerated. In addition, more protection can be applied to specific portions of the application that can tolerate slowdown. The in-corporation of a virtual machine also makes it easy to extend the technology to integrate new developments and resistance mechanisms, leading to less development time, increased savings, and quicker deployment.
Claims
exact text as granted — not AI-modifiedWhat is claimed:
1 . A computer method of increasing the tamper-resistance and/or obscurity of computer software code, said method comprising:
preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
2 . The method of claim 1 , wherein said preparation comprises:
applying one or more computer software preparation transformations to the computer software code.
3 . The method of claim 2 , wherein said computer software preparation transformation comprises:
encrypting the computer software code.
4 . The method of claim 3 , wherein said encryption uses a plurality of hidden keys.
5 . The method of claim 4 , wherein said keys are hidden within the execution environment and/or prepared software code.
6 . The method of claim 1 , wherein said computer software preparation transformation comprises:
adding additional codes and/or data to the computer software to verify the integrity of the execution environment.
7 . The method of claim 1 , wherein said computer software preparation transformation comprises:
adding additional codes and/or data to the computer software to verify the integrity of the prepared software code.
8 . The method of claim 1 , wherein said computer software preparation transformation comprises:
altering the computer software code such that proper execution is difficult without undoing the alterations.
9 . The method of claim 8 , wherein said altering includes at least one of:
altering constant operands, program control flow, program data layout, data initialization information, instruction encoding, or file format, or any combination thereof.
10 . The method of claim 1 , further comprising:
preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
11 . The method of claim 10 , wherein said execution preparation comprises:
applying one or more preparation execution environment transformations to the execution environment computer software code.
12 . The method of claim 11 , wherein said execution environment preparation transformation comprises:
encrypting some or all of the execution environment.
13 . The method of claim 12 , wherein said encryption uses a plurality of hidden keys.
14 . The method of claim 13 , wherein said keys are hidden within the execution environment and/or prepared software code.
15 . The method of claim 10 , wherein said execution environment preparation transformation comprises:
adding additional codes and/or data to the computer software execution environment to verify the integrity of the computer software code.
16 . The method of claim 10 , wherein said execution environment preparation transformation comprises:
adding additional codes and/or data to the computer software execution environment to verify the integrity of the prepared execution environment.
17 . The method of claim 10 , wherein said method comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
18 . The method of claim 17 , wherein said execution transformation comprises the execution environment changing the layout of computer software code data.
19 . The method of claim 18 , wherein the computer software code data being data used for the execution environment or data to execute the computer software code or data to execute prepared software code.
20 . The method of claim 17 , wherein said execution transformation comprises the execution environment using conditions generated during execution, whereby said conditions are difficult to programmatically decipher to assist in the tamper-resistance and/or obscurity transforms.
21 . The method of claim 17 , wherein the execution transformations include relocating operational locations to increase the difficulty of determining operation locations for making operation's locations difficult to determine.
22 . The method of claim 17 , wherein the execution transformations include rearranging, eliminating, or adding execution flow for making execution flow and/or control flow difficult to determine.
23 . The method of claim 17 , wherein the execution transformations include inserting additional software code and/or data for making the software code operations difficult to determine.
24 . The method of claim 17 , wherein the execution transformations include inserting operations that cannot be feasibly executed, but appear as though execution is possible.
25 . The method of claim 17 , wherein the execution transformations include inserting incorrect codes that are intentionally similar to other correct software codes.
26 . The method of claim 17 , wherein the execution transformations include randomizing operation order.
27 . The method of claim 17 , wherein the execution transformations insert operations to verify the integrity of software code and/or software data.
28 . The method of claim 27 , wherein the computer software code and/or computer software code data comprises at least one of:
prepared computer software code and/or data, unprepared computer software code and/or data, prepared execution environment code and/or data, unprepared execution environment code and/or data, and or previously transformed computer software code and/or data, or any combinations thereof.
29 . The method of claim 17 , wherein said one or more execution transformations comprises at least one of:
control flow flattening, guards, disassembly resistance, self checksumming codes, dynamic disassembly resistance, control flow obfuscations, ABI transforms, API transforms, sequence transforms, calling convention transforms and or data transform, or any combination thereof.
30 . The method of claim 17 , wherein the execution environment continuously performs the execution transformations.
31 . The method of claim 30 , wherein the continuous execution comprises a plurality of encryption/decryption keys.
32 . The method of claim 17 , wherein said execution environment comprises at least one of:
software dynamic translation (SDT), virtual machine (VM), Java VM, Strata VM, program simulators, program emulators, and or virtualization systems, or any combinations thereof.
33 . The method of claim 17 , wherein said computer software code comprises at least one of:
binary, byte code, program source, program assembly, program scripts, machine language, and or program intermediate formats, or any combination thereof.
34 . The method of claim 33 , wherein said program scripts comprises at least one of the following:
Perl, PHP, python, CGI, Java, Java Script, ASP script, MySQL, Borne shell, bash, tcsh, and or csh, or any combinations thereof.
35 . A computer method comprising:
preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
36 . The method of claim 35 , wherein said preparation comprises:
applying one or more preparation transformations to the execution environment.
37 . The method of claim 36 , wherein said preparation transformation comprises:
encrypting some or all of the execution environment.
38 . The method of claim 37 , wherein said encryption uses a plurality of hidden keys.
39 . The method of claim 38 , wherein said keys are hidden within the execution environment and/or prepared software code.
40 . The method of claim 35 , wherein said preparation transformation comprises:
adding additional codes and/or data to the execution environment to verify the integrity of the computer software code.
41 . The method of claim 35 , wherein said preparation transformation comprises:
adding additional codes and/or data to the execution environment to verify the integrity of the prepared execution environment.
42 . The method of claim 35 , wherein said method comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
43 . The method of claim 42 , wherein said execution transformation comprises the execution environment changing the layout of computer software code data.
44 . The method of claim 43 , wherein the computer software code data being data used for the execution environment or data to execute the computer software code or data to execute prepared software code.
45 . The method of claim 42 , wherein said execution transformation comprises the execution environment using conditions generated during execution, whereby said conditions are difficult to programmatically decipher to assist in the tamper-resistance and/or obscurity transforms.
46 . The method of claim 42 , wherein the execution transformations include relocating operational locations to increase the difficulty of determining operation locations for making operation's locations difficult to determine.
47 . The method of claim 42 , wherein the execution transformations include rearranging, eliminating, or adding execution flow for making execution flow and/or control flow difficult to determine.
48 . The method of claim 42 , wherein the execution transformations include inserting additional software code and/or data for making the software code operations difficult to determine.
49 . The method of claim 42 , wherein the execution transformations include inserting operations that cannot be feasibly executed, but appear as though execution is possible.
50 . The method of claim 42 , wherein the execution transformations include inserting incorrect codes that are intentionally similar to other correct software codes.
51 . The method of claim 42 , wherein the execution transformations include randomizing operation order.
52 . The method of claim 42 , wherein the execution transformations insert operations to verify the integrity of software code and/or software data.
53 . The method of claim 52 , wherein the computer software code and/or computer software code data comprises at least one of:
prepared computer software code and/or data, unprepared computer software code and/or data, prepared execution environment code and/or data, unprepared execution environment code and/or data, and or previously transformed computer software code and/or data, or any combinations thereof.
54 . The method of claim 42 , wherein said one or more execution transformations comprises at least one of:
control flow flattening, guards, disassembly resistance, self checksumming codes, dynamic disassembly resistance, control flow obfuscations, ABI transforms, API transforms, sequence transforms, calling convention transforms and or data transform, or any combination thereof.
55 . The method of claim 42 , wherein the execution environment continuously performs the execution transformations.
56 . The method of claim 55 , wherein the continuous execution comprises a plurality of encryption/decryption keys.
57 . The method of claim 42 , wherein said execution environment comprises at least one of:
software dynamic translation (SDT), virtual machine (VM), Java VM, Strata VM, program simulators, program emulators, and or virtualization systems, or any combinations thereof.
58 . The method of claim 42 , wherein said computer software code comprises at least one of:
binary, byte code, program source, program assembly, program scripts, machine language, and or program intermediate formats, or any combination thereof.
59 . The method of claim 58 , wherein said program scripts comprises at least one of the following:
Perl, PHP, python, CGI, Java, Java Script, ASP script, MySQL, Borne shell, bash, tcsh, and or csh, or any combinations thereof.
60 . A computer method of increasing the tamper-resistance and/or obscurity of computer software code, said method comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
61 . The method of claim 60 , wherein said execution transformation comprises the execution environment changing the layout of computer software code data.
62 . The method of claim 61 , wherein the computer software code data being data used for the execution environment or data to execute the computer software code or data to execute prepared software code.
63 . The method of claim 60 , wherein said execution transformation comprises the execution environment using conditions generated during execution, whereby said conditions are difficult to programatically decipher to assist in the tamper-resistance and/or obscurity transforms.
64 . The method of claim 60 , wherein the execution transformations include relocating operational locations to increase the difficulty of determining operation locations for making operation's locations difficult to determine.
65 . The method of claim 60 , wherein the execution transformations include rearranging, eliminating, or adding execution flow for making execution flow and/or control flow difficult to determine.
66 . The method of claim 60 , wherein the execution transformations include inserting additional software code and/or data for making the software code operations difficult to determine.
67 . The method of claim 60 , wherein the execution transformations include inserting operations that cannot be feasibly executed, but appear as though execution is possible.
68 . The method of claim 60 , wherein the execution transformations include inserting incorrect codes that are intentionally similar to other correct software codes.
69 . The method of claim 60 , wherein the execution transformations include randomizing operation order.
70 . The method of claim 60 , wherein the execution transformations insert operations to verify the integrity of software code and/or software data.
71 . The method of claim 70 , wherein the computer software code and/or computer software code data comprises at least one of:
prepared computer software code and/or data, unprepared computer software code and/or data, prepared execution environment code and/or data, unprepared execution environment code and/or data, or previously transformed computer software code and/or data, or any combinations thereof.
72 . The method of claim 60 , wherein said one or more execution transformations comprises at least one of:
control flow flattening, guards, disassembly resistance, self checksumming codes, dynamic disassembly resistance, control flow obfuscations, ABI transforms, API transforms, sequence transforms, calling convention transforms or data transform, or any combination thereof.
73 . The method of claim 60 , wherein the execution environment continuously performs the execution transformations.
74 . The method of claim 73 , wherein the continuous execution comprises a plurality of encryption/decryption keys.
75 . The method of claim 60 , wherein said execution environment comprises at least one of:
software dynamic translation (SDT), virtual machine (VM), Java VM, Strata VM, program simulators, program emulators, or virtualization systems, or any combinations thereof.
76 . The method of claim 60 , wherein said computer software code comprises at least one of:
binary, byte code, program source, program assembly, program scripts, machine language, or program intermediate formats, or any combination thereof.
77 . The method of claim 76 , wherein said program scripts comprises at least one of the following:
Perl, PHP, python, CGI, Java, Java Script, ASP script, MySQL, Borne shell, bash, tcsh, or csh, or any combinations thereof.
78 . The method of claim 60 , further comprising:
preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
79 . The method of claim 78 , wherein said preparation comprises:
applying one or more computer software preparation transformations to the computer software code.
80 . The method of claim 79 , wherein said computer software preparation transformation comprises:
encrypting the computer software code.
81 . The method of claim 80 , wherein said encryption uses a plurality of hidden keys.
82 . The method of claim 81 , wherein said keys are hidden within the execution environment and/or prepared software code.
83 . The method of claim 60 , wherein said computer software preparation transformation comprises:
adding additional codes and/or data to the computer software to verify the integrity of the execution environment.
84 . The method of claim 60 , wherein said computer software preparation transformation comprises:
adding additional codes and/or data to the computer software to verify the integrity of the prepared software code.
85 . The method of claim 84 , wherein said computer software preparation transformation comprises:
altering the computer software code such that proper execution is difficult without undoing the alterations.
86 . The method of claim 85 , wherein said altering includes at least one of: altering constant operands, program control flow, program data layout, data initialization information, instruction encoding, or file format, or any combination thereof.
87 . The method of claim 17 , wherein said execution transformation comprises:
undoing said preparation transformations on the prepared software codes.
88 . A computer system of increasing the tamper-resistance and/or obscurity of computer software code, said system comprising:
preparation means for preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
89 . The system of claim 88 , wherein said preparation comprises:
application means for applying one or more computer software preparation transformations to the computer software code.
90 . The system of claim 89 , wherein said computer software preparation transformation comprises:
encryption engine for encrypting the computer software code.
91 . The system of claim 90 , wherein said encryption uses a plurality of hidden keys.
92 . The system of claim 91 , wherein said keys are hidden within the execution environment and/or prepared software code.
93 . The system of claim 88 , wherein said computer software preparation transformation comprises:
adding means for adding additional codes and/or data to the computer software to verify the integrity of the execution environment.
94 . The system of claim 88 , wherein said computer software preparation transformation comprises:
adding means for adding additional codes and/or data to the computer software to verify the integrity of the prepared software code.
95 . The system of claim 94 , wherein said computer software preparation transformation comprises:
alteration means for altering the computer software code such that proper execution is difficult without undoing the alterations.
96 . The system of claim 95 , wherein said altering includes at least one of:
altering constant operands, program control flow, program data layout, data initialization information, instruction encoding, or file format, or any combination thereof.
97 . The system of claim 88 , further comprising:
a preparation means for preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
98 . The system of claim 97 , wherein said system comprising:
an application means for applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
99 . A computer system comprising:
a preparation means for preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
100 . The system of claim 99 , wherein said preparation comprises:
an application means for applying one or more preparation transformations to the execution environment.
101 . The system of claim 100 , wherein said preparation transformation comprises:
encryption engine for encrypting some or all of the execution environment.
102 . The system of claim 101 , wherein said encryption uses a plurality of hidden keys.
103 . The system of claim 102 , wherein said keys are hidden within the execution environment and/or prepared software code.
104 . The system of claim 99 , wherein said preparation transformation comprises:
adding means for adding additional codes and/or data to the execution environment to verify the integrity of the computer software code.
105 . The system of claim 99 , wherein said preparation transformation comprises:
an adding means for adding additional codes and/or data to the execution environment to verify the integrity of the prepared execution environment.
106 . The system of claim 99 , wherein said method comprising:
an application means for applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
107 . A computer system of increasing the tamper-resistance and/or obscurity of computer software code, said system comprising:
an execution transformer for applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
108 . The system of claim 107 , wherein said execution transformation comprises the execution environment changing the layout of computer software code data.
109 . The system of claim 108 , wherein the computer software code data being data used for the execution environment or data to execute the computer software code or data to execute prepared software code.
110 . The system of claim 107 , wherein said execution transformation comprises the execution environment using conditions generated during execution, whereby said conditions are difficult to programatically decipher to assist in the tamper-resistance and/or obscurity transforms.
111 . The system of claim 107 , wherein the execution transformations include relocating operational locations to increase the difficulty of determining operation locations for making operation's locations difficult to determine.
112 . The system of claim 107 , wherein the execution transformations include rearranging, eliminating, or adding execution flow for making execution flow and/or control flow difficult to determine.
113 . The system of claim 107 , wherein the execution transformations include inserting additional software code and/or data for making the software code operations difficult to determine.
114 . The system of claim 107 , wherein the execution transformations include inserting operations that cannot be feasibly executed, but appear as though execution is possible.
115 . The method of claim 107 , wherein the execution transformations include inserting incorrect codes that are intentionally similar to other correct software codes.
116 . The system of claim 107 , wherein the execution transformations include randomizing operation order.
117 . The system of claim 107 , wherein the execution transformations insert operations to verify the integrity of software code and/or software data.
118 . The system of claim 117 , wherein the computer software code and/or computer software code data comprises at least one of:
prepared computer software code and/or data, unprepared computer software code and/or data, prepared execution environment code and/or data, unprepared execution environment code and/or data, or previously transformed computer software code and/or data, or any combinations thereof.
119 . The system of claim 107 , wherein said one or more execution transformations comprises at least one of:
control flow flattening, guards, disassembly resistance, self checksumming codes, dynamic disassembly resistance, control flow obfuscations, ABI transforms, API transforms, sequence transforms, calling convention transforms or data transform, or any combination thereof.
120 . The system of claim 107 , wherein the execution environment continuously performs the execution transformations.
121 . The system of claim 120 , wherein the continuous execution comprises a plurality of encryption/decryption keys.
122 . The system of claim 107 , wherein said execution environment comprises at least one of:
software dynamic translation (SDT), virtual machine (VM), Java VM, Strata VM, program simulators, program emulators, or virtualization systems, or any combinations thereof.
123 . The system of claim 107 , wherein said computer software code comprises at least one of:
binary, byte code, program source, program assembly, program scripts, machine language, or program intermediate formats, or any combination thereof.
124 . The system of claim 123 , wherein said program scripts comprises at least one of the following:
Perl, PHP, python, CGI, Java, Java Script, ASP script, MySQL, Borne shell, bash, tcsh, or csh, or any combinations thereof.
125 . The system of claim 107 , further comprising:
a preparation means for preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
126 . A computer program product comprising a computer useable medium having computer program logic for enabling at least one processor in a computer system to increase the tamper-resistance and/or obscurity of computer software code, said computer logic comprising:
preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
127 . The computer program product of claim 126 , wherein said preparation comprises:
applying one or more computer software preparation transformations to the computer software code.
128 . The computer program product of claim 127 , wherein said computer software preparation transformation comprises:
encrypting the computer software code.
129 . The computer program product of claim 128 , wherein said encryption uses a plurality of hidden keys.
130 . The computer program product of claim 129 , wherein said keys are hidden within the execution environment and/or prepared software code.
131 . The computer program product of claim 126 , wherein said computer software preparation transformation comprises:
adding additional codes and/or data to the computer software to verify the integrity of the execution environment.
132 . The computer program product of claim 126 , wherein said computer software preparation transformation comprises:
adding means for adding additional codes and/or data to the computer software to verify the integrity of the prepared software code.
133 . The computer program product of claim 132 , wherein said computer software preparation transformation comprises:
altering the computer software code such that proper execution is difficult without undoing the alterations.
134 . The computer program product of claim 133 , wherein said altering includes at least one of: altering constant operands, program control flow, program data layout, data initialization information, instruction encoding, or file format, or any combination thereof.
135 . The computer program product of claim 126 , further comprising:
preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
136 . The computer program product of claim 135 , wherein said system comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
137 . A computer program product comprising a computer useable medium having computer program logic for enabling at least one processor in a computer system to operate, said computer logic comprising:
preparing the execution environment so that it impedes execution of computer software code in the execution environment except for a designated computer software code.
138 . The computer program product of claim 137 , wherein said preparation comprises:
applying one or more preparation transformations to the execution environment.
139 . The computer program product of claim 138 , wherein said preparation transformation comprises:
encrypting some or all of the execution environment.
140 . The computer program product of claim 139 , wherein said encryption uses a plurality of hidden keys.
141 . The computer program product of claim 140 , wherein said keys are hidden within the execution environment and/or prepared software code.
142 . The computer program product of claim 137 , wherein said preparation transformation comprises:
adding additional codes and/or data to the execution environment to verify the integrity of the computer software code.
143 . The computer program product of claim 137 , wherein said preparation transformation comprises:
adding additional codes and/or data to the execution environment to verify the integrity of the prepared execution environment.
144 . The computer program product of claim 137 , wherein said method comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
145 . A computer program product comprising a computer useable medium having computer program logic for enabling at least one processor in a computer system to increase the tamper-resistance and/or obscurity of computer software code, said computer logic comprising:
applying execution transformations during execution of a computer software code to improve tamper resistance and/or obscurity.
146 . The computer program product of claim 145 , wherein said execution transformation comprises the execution environment changing the layout of computer software code data.
147 . The computer program product of claim 146 , wherein the computer software code data being data used for the execution environment or data to execute the computer software code or data to execute prepared software code.
148 . The computer program product of claim 145 , wherein said execution transformation comprises the execution environment using conditions generated during execution, whereby said conditions are difficult to programatically decipher to assist in the tamper-resistance and/or obscurity transforms.
149 . The computer program product of claim 145 , wherein the execution transformations include relocating operational locations to increase the difficulty of determining operation locations for making operation's locations difficult to determine.
150 . The computer program product of claim 145 , wherein the execution transformations include rearranging, eliminating, or adding execution flow for making execution flow and/or control flow difficult to determine.
151 . The computer program product of claim 145 , wherein the execution transformations include inserting additional software code and/or data for making the software code operations difficult to determine.
152 . The computer program product of claim 145 , wherein the execution transformations include inserting operations that cannot be feasibly executed, but appear as though execution is possible.
153 . The computer program product of claim 145 , wherein the execution transformations include inserting incorrect codes that are intentionally similar to other correct software codes.
154 . The computer program product of claim 145 , wherein the execution transformations include randomizing operation order.
155 . The computer program product of claim 145 , wherein the execution transformations insert operations to verify the integrity of software code and/or software data.
156 . The computer program product of claim 155 , wherein the computer software code and/or computer software code data comprises at least one of:
prepared computer software code and/or data, unprepared computer software code and/or data, prepared execution environment code and/or data, unprepared execution environment code and/or data, or previously transformed computer software code and/or data, or any combinations thereof.
157 . The computer program product of claim 145 , wherein said one or more execution transformations comprises at least one of:
control flow flattening, guards, disassembly resistance, self checksumming codes, dynamic disassembly resistance, control flow obfuscations, ABI transforms, API transforms, sequence transforms, calling convention transforms or data transform, or any combination thereof.
158 . The computer program product of claim 145 , wherein the execution environment continuously performs the execution transformations.
159 . The computer program product of claim 158 , wherein the continuous execution comprises a plurality of encryption/decryption keys.
160 . The computer program product of claim 145 , wherein said execution environment comprises at least one of:
software dynamic translation (SDT), virtual machine (VM), Java VM, Strata VM, program simulators, program emulators, or virtualization systems, or any combinations thereof.
161 . The computer program product of claim 145 , wherein said computer software code comprises at least one of:
binary, byte code, program source, program assembly, program scripts, machine language, or program intermediate formats, or any combination thereof.
162 . The computer program product of claim 161 , wherein said program scripts comprises at least one of the following:
Perl, PHP, python, CGI, Java, Java Script, ASP script, MySQL, Borne shell, bash, tcsh, or csh, or any combinations thereof.
163 . The computer program product of claim 145 , further comprising:
preparing the computer software code for execution in a designated execution environment for making it difficult to execute the computer software code independently from the designated execution environment.
164 . The method of claim 78 , wherein said execution transformation comprises:
undoing said preparation transformations on the prepared software codes.
165 . The method of claim 71 , wherein said previously transformed computer software code and/or data comprises at least one of the following: cache, fragment cache, disk, disk drive, RAM, tape, magnetic tape drive, optical disk drive, or flash memory, or any combination thereof.Join the waitlist — get patent alerts
Track US2016217287A1 — get alerts on status changes and closely related new filings.
We store only your email — no account needed. See our privacy policy.