iXGuard

iXGuard

Cutting-edge protection for your iOS apps

iOS applications and SDKs are not immune to reverse engineering. Hackers can use easily available tools to disassemble and decompile your iOS applications and SDKs to gain insight into their inner workings. This opens the way for various forms of abuse, including intellectual property theft, cloning, credential harvesting, API key extraction and code tampering.

iXGuard has been designed to protect your Swift and Objective-C apps and SDKs from reverse engineering and its consequences. It hardens the source code of the applications using a variety of obfuscation and encryption techniques. The applied layers of protection make it close to impossible to access the internal logic of your applications.

Secure development made easy

iXGuard processes the available code as a whole, including libraries and extensions. This enlarges the search space for hackers and increases the difficulty of reverse engineering your applications.

iXGuard doesn't require any changes to the source code of your applications or SDKs.

iXGuard has no impact on your development process. It functions as a stand-alone solution that processes your compiled applications.

iXGuard is easy to configure. It can be set up to protect entire applications or specific functions.

Protection in layers

String encryption

iXGuard uses a random algorithm and a new key to encrypt each sensitive string in your applications. The decryption code is obfuscated, randomized and embedded in the code. This prevents the appearance of a recognizable decryption signature.

Name obfuscation

iXGuard obfuscates identifiers of interfaces, protocols, properties, methods, ivars, etc. in both Swift and Objective-C applications. Most common reflection constructs are supported out-of-the-box.

Control flow obfuscation

iXGuard obfuscates the control flow of the code to better shield it against automated and manual code analysis.

Arithmetic obfuscation

iXGuard applies a random number of available transformations to arithmetic instructions. This ensures the results are different for each handled instruction.