1. A method of transforming a binary software application comprising binary application code from an original form to a secured form, the method comprising: applying a plurality of transformations to original binary application code during a build phase to produce transformed binary application code, wherein the plurality of transformations are applied at a plurality of application layers and wherein the transformed binary application code is not semantically equivalent to the original binary application code; and packaging the transformed binary application code with a plurality of inverse transformation keys and a plurality of inverse transformations to generate a protected application, wherein each of the plurality of inverse transformation keys is configured to provide access to a corresponding inverse transformation in the plurality of inverse transformations during an execution phase; wherein execution of the protected application results in each of the plurality of inverse transformations being applied to a corresponding section of the transformed binary application code prior to execution of the corresponding section of the transformed binary application code, such that execution of the protected application is semantically equivalent to execution of the binary application code.