Close Action
Action Type: Close
Immediately terminates the application when a threat is detected.
Available for: All platforms (Desktop, Mobile, Web)
How It Works
The Close action calls Environment.Exit(-1) immediately upon threat detection.
Behavior:
- Immediate termination (no graceful shutdown)
- Fastest response time
- No cleanup operations
- Exit code: -1
When to Use
Recommended for:
- Debugger Detection - Prevent reverse engineering
- Tampering Detection - Stop modified/cracked applications
- Jailbreak Detection - Block compromised mobile devices
- Process Injection - Prevent code injection attacks
- Critical security violations - Any threat requiring immediate shutdown
Not recommended for:
- Web applications (use
blockinstead) - Non-critical threats (use
loginstead) - Development environments (use
noneinstead)
Configuration
JSON Configuration
JSON
{
"protections": {
"DebuggerDetection": {
"enabled": true,
"action": "close"
},
"TamperingDetection": {
"enabled": true,
"action": "close"
}
}
}{
"protections": {
"DebuggerDetection": {
"enabled": true,
"action": "close"
},
"TamperingDetection": {
"enabled": true,
"action": "close"
}
}
}Code-Based Configuration
C#
await Payload.ConfigureAsync(config =>
{
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
});await Payload.ConfigureAsync(config =>
{
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
});Platform-Specific Examples
Desktop Application
C#
await Payload.ConfigureAsync(config =>
{
// Close on debugger detection
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
// Close on tampering
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
// Close on memory dump attempts
config.AddProtection(ProtectionModuleType.MemoryDumpDetection, ActionType.Close);
});await Payload.ConfigureAsync(config =>
{
// Close on debugger detection
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
// Close on tampering
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
// Close on memory dump attempts
config.AddProtection(ProtectionModuleType.MemoryDumpDetection, ActionType.Close);
});Mobile Application (MAUI)
C#
await Payload.ConfigureAsync(config =>
{
// Close on jailbreak/root
config.AddProtection(ProtectionModuleType.JailbreakDetection, ActionType.Close);
// Close on debugger
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
});await Payload.ConfigureAsync(config =>
{
// Close on jailbreak/root
config.AddProtection(ProtectionModuleType.JailbreakDetection, ActionType.Close);
// Close on debugger
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
});Conditional Close (Development vs Production)
C#
await Payload.ConfigureAsync(config =>
{
#if DEBUG
// Development: just log
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Log);
#else
// Production: close immediately
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
#endif
});await Payload.ConfigureAsync(config =>
{
#if DEBUG
// Development: just log
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Log);
#else
// Production: close immediately
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
#endif
});Environment-Specific Configuration
JSON
{
"environments": {
"development": {
"protections": {
"DebuggerDetection": { "enabled": true, "action": "log" }
}
},
"production": {
"protections": {
"DebuggerDetection": { "enabled": true, "action": "close" }
}
}
}
}{
"environments": {
"development": {
"protections": {
"DebuggerDetection": { "enabled": true, "action": "log" }
}
},
"production": {
"protections": {
"DebuggerDetection": { "enabled": true, "action": "close" }
}
}
}
}Best Practices
- Use for Critical Threats Only
C#
// Close action is appropriate here
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
// Log action is better for these
config.AddProtection(ProtectionModuleType.VirtualMachineDetection, ActionType.Log);
config.AddProtection(ProtectionModuleType.ClockTampering, ActionType.Log);// Close action is appropriate here
config.AddProtection(ProtectionModuleType.DebuggerDetection, ActionType.Close);
config.AddProtection(ProtectionModuleType.TamperingDetection, ActionType.Close);
// Log action is better for these
config.AddProtection(ProtectionModuleType.VirtualMachineDetection, ActionType.Log);
config.AddProtection(ProtectionModuleType.ClockTampering, ActionType.Log);- Different Actions for Different Environments
C#
var action = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production"
? ActionType.Close
: ActionType.Log;
config.AddProtection(ProtectionModuleType.DebuggerDetection, action);var action = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production"
? ActionType.Close
: ActionType.Log;
config.AddProtection(ProtectionModuleType.DebuggerDetection, action);- Combine with Logging for Forensics
JSON
{
"logging": {
"level": "warning",
"file": { "enabled": true, "path": "logs/security.log" }
},
"protections": {
"DebuggerDetection": { "enabled": true, "action": "close" }
}
}{
"logging": {
"level": "warning",
"file": { "enabled": true, "path": "logs/security.log" }
},
"protections": {
"DebuggerDetection": { "enabled": true, "action": "close" }
}
}Execution Flow
CODE
1. Threat Detected (e.g., Debugger attached)
↓
2. Monitor triggers Close action
↓
3. Log threat to backend (if configured)
↓
4. Log threat to local file (if configured)
↓
5. Environment.Exit(-1) called
↓
6. Application terminates immediately1. Threat Detected (e.g., Debugger attached)
↓
2. Monitor triggers Close action
↓
3. Log threat to backend (if configured)
↓
4. Log threat to local file (if configured)
↓
5. Environment.Exit(-1) called
↓
6. Application terminates immediatelyRelated Actions
- Custom - Execute custom logic before closing
- Erase - Delete sensitive data before closing
- Log - Record threat without closing
All Actions
View all action types
Custom Actions
Create custom handlers