Protections Overview
Shield for iOS provides 17 protections organized into four categories. Each protection can be enabled independently and configured to match your security requirements.
Code Obfuscation
Code obfuscation protections transform the structure and instructions of your compiled binary to resist static analysis and reverse engineering.
| Protection | ID | Description |
|---|---|---|
| Symbol Renaming | symbol_renaming | Renames classes, methods, and properties to meaningless identifiers |
| Control Flow Obfuscation | control_flow | Restructures the logic flow of methods to confuse decompilers |
| Dead Code Injection | dead_code_injection | Inserts unreachable code paths that appear legitimate |
| Instruction Substitution | instruction_substitution | Replaces standard instructions with functionally equivalent alternatives |
| Opaque Predicates | opaque_predicates | Adds conditional branches whose outcome is predetermined but hard to analyze |
| Arithmetic Obfuscation | arithmetic_obfuscation | Transforms arithmetic operations into complex equivalent expressions |
| Register Shuffling | register_shuffling | Randomizes register allocation to break pattern recognition |
| API Hiding | api_hiding | Hides references to system API calls from static analysis |
Data Protection
Data protection secures sensitive information embedded in your application binary and its bundled resources.
| Protection | ID | Description |
|---|---|---|
| String Encryption | string_encryption | Encrypts string literals so they cannot be extracted from the binary |
| Swift Metadata Stripping | swift_stripping | Removes Swift type metadata and debug information |
| Class Encryption | class_encryption | Encrypts Objective-C class metadata structures |
| Resource Encryption | resource_encryption | Encrypts bundled assets and resource files |
Runtime Protections (RASP)
Runtime Application Self-Protection detects and responds to hostile environments while your application is running.
| Protection | ID | Description |
|---|---|---|
| Anti-Debug | anti_debug | Detects and blocks debugger attachment |
| Anti-Jailbreak | anti_jailbreak | Detects jailbroken devices |
| Hook Detection | hook_detection | Detects runtime hooking frameworks |
| Trace Detection | trace_detection | Detects tracing and instrumentation tools |
| Tamper Detection | tamper_detection | Detects binary modification and repackaging |
RASP protections can be enabled individually or together through the rasp configuration block.
Build Features
| Protection | ID | Description |
|---|---|---|
| Polymorphic Builds | polymorphic | Generates a unique binary on every build |
Recommended Configurations
Minimum protection for applications with basic security needs:
{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"anti_debug": true
}
}{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"anti_debug": true
}
}Standard protection for most production applications:
{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"swift_stripping": true,
"control_flow": "medium",
"anti_debug": true,
"anti_jailbreak": true,
"rasp": true
}
}{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"swift_stripping": true,
"control_flow": "medium",
"anti_debug": true,
"anti_jailbreak": true,
"rasp": true
}
}Maximum protection for applications handling sensitive data or intellectual property:
{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"swift_stripping": true,
"control_flow": "aggressive",
"dead_code_injection": "heavy",
"opaque_predicates": "complex",
"arithmetic_obfuscation": "complex",
"instruction_substitution": "complex",
"register_shuffling": "complex",
"api_hiding": "complex",
"class_encryption": true,
"resource_encryption": true,
"anti_debug": true,
"anti_jailbreak": true,
"rasp": true,
"polymorphic": true
}
}{
"protections": {
"symbol_renaming": true,
"string_encryption": true,
"swift_stripping": true,
"control_flow": "aggressive",
"dead_code_injection": "heavy",
"opaque_predicates": "complex",
"arithmetic_obfuscation": "complex",
"instruction_substitution": "complex",
"register_shuffling": "complex",
"api_hiding": "complex",
"class_encryption": true,
"resource_encryption": true,
"anti_debug": true,
"anti_jailbreak": true,
"rasp": true,
"polymorphic": true
}
}Related
- Configuration Reference - Full configuration options
- Exclusions - Exclude specific symbols from protection
- Best Practices - Recommended protection strategies