Patent ID: 8689193

Claim:
A method for protecting a software application, comprising: dividing, by a processor, the software application into a plurality of components, wherein the dividing comprises: identifying code components within the software application; identifying data components within the software application; and identifying an entry point for each of the code components and the data components; creating, by the processor, distinct copies of the software application by varying locations of the plurality of components when loaded onto a computer system for each distinct copy of the software application, wherein the locations are memory locations of the computer system, wherein components that need to be externally accessed are placed at advertised locations where the entry points to the components that need to be externally accessed do not vary; compiling, by the processor, a copy of the software application having null operations and padding spaces added to the plurality of components where all of the plurality of components are at a maximum size; and creating, by the processor, subsequent distinct copies of the software application by dropping at random a portion of the null operations and padding spaces that were added for each one of the distinct copies of the software application.