Application hardening takes a finished, well-built application and both manipulates existing, and injects new, code to shield the application against static and dynamic attacks far beyond "hygienic" vulnerabilities like those created by not verifying a sender or destination or message format.
Binary level code obfuscation to prevent attackers from seeing a functional view of an application.
Application integrity checks ensure the application code has not been altered.
Detect whether the app is running on a rooted or jailbroken device.
Vary how protections are applied in each build to prevent attackers from building up a cumulative understanding of how apps are being protected.
Determine what actions to take if app is being attacked or a device is determined to be compromised.
Utilize white-box cryptographic protection to encrypt critical keys and data.
Gartner Market Guidefor In-App Protection
“Self-defending applications become crucial as modern architectures migrate software logic to the client side.”