1. A method for defending a software against reverse engineering in a target environment comprising: a server acquiring information associated with said target environment, said acquired information associated with said target environment comprising one or more temporary values and one or more values acquired from a system unrelated to said target environment; wherein the one or more temporary values comprising one or more just in time values supplied close to a time of use of the one or more just in time values; generating an obfuscated executable program using a random obfuscating compiler by encrypting said software with said acquired information associated with said target environment; sending said encrypted software with said acquired information associated with said target environment to an execution environment; acquiring information associated with said execution environment, said acquired information associated with said execution environment comprising one or more orthogonal values utilized to verify said execution environment is a correct execution environment associated with said target environment; wherein the one or more orthogonal values are monitored scenario information selectable based on a security level associated with the execution environment; authenticating said execution environment as the target environment by comparing said acquired information associated with said execution environment with said acquired information associated with said target environment; and if said two sets of information match, decrypting said encrypted software with said acquired information associated with said execution environment.