react-native-secure-device-check
v1.0.1
Published
Cross-platform jailbreak/root detection for React Native apps.
Downloads
20
Maintainers
Readme
🔐 react-native-secure-device-check
A robust, native-level security plugin to detect jailbroken iOS devices and rooted Android devices in React Native apps.
Built for production with multi-layered detection and hardened logic to prevent tampering and reverse engineering.
✅ React Native 0.70+
📱 iOS + Android supported
🔒 Native Swift + Java implementation (no JS-only detection)
🛡️ Defense-in-depth security model
📦 Installation
npm install react-native-secure-device-check
# or
yarn add react-native-secure-device-checkThen install CocoaPods (for iOS):
cd ios && pod install && cd ..🔧 Usage
import { isDeviceCompromised } from 'react-native-secure-device-check';
const checkDevice = async () => {
const isCompromised = await isDeviceCompromised();
if (isCompromised) {
console.warn('⚠️ Device is compromised!');
// Optional: Block access, log, or show alert
} else {
console.log('✅ Device is secure.');
}
};Call checkDevice() during app startup or before performing sensitive actions.
🔍 Detection Capabilities
✅ iOS (Jailbreak Detection)
- Checks for known jailbreak file paths
- Detects presence of suspicious apps like Cydia
- Verifies symbolic links in protected directories
- Attempts file write to restricted areas
- Checks loaded dynamic libraries
- Detects environment variable tampering (
DYLD_INSERT_LIBRARIES) - Uses system APIs to confirm process integrity
✅ Android (Root Detection)
- Searches for root binaries (
su,busybox,magisk) - Analyzes dangerous system properties (
ro.debuggable,ro.secure) - Detects system partition remounts
- Validates SELinux enforcement
- Inspects installed packages for root tools
- Attempts to execute
sucommand - Looks for known root-hiding apps
🛡️ Security Layers
| Layer | Description | | ------------------------- | ------------------------------------------------------------------- | | 📁 File System Checks | Inspects common jailbreak/root paths and binaries | | 📲 System API Usage | Secure platform calls to detect unauthorized state | | 🧬 Runtime Inspection | Scans environment for loaded libraries and injected hooks | | 🧪 Write Test Traps | Attempts file write in protected paths to trigger detection | | 🛑 Anti-Debugging (WIP) | Prevents debugging via future integration (LLDB/Frida detection) | | 🧱 Obfuscated Native Code | Spreads detection logic across layers to resist reverse engineering |
🧪 Testing
To test on a real device:
iOS:
- Jailbreak a test iPhone using tools like Checkra1n / Unc0ver
- Install your app and run
isDeviceCompromised()
Android:
- Use a rooted test device or emulator with Magisk
- Install root-hiding tools to test robustness
- Monitor logs and UI responses
Example:
useEffect(() => {
(async () => {
const compromised = await isDeviceCompromised();
Alert.alert(
'Security Check',
compromised ? '🚨 Device is rooted/jailbroken' : '✅ All clear'
);
})();
}, []);⚠️ Emulators are not accurate for testing jailbreak/root detection. Always use real devices.
🔍 API
| Method | Platform | Returns | Description |
| ----------------------- | ------------ | ------------------ | ------------------------------------ |
| isDeviceCompromised() | iOS, Android | Promise<boolean> | Checks for root/jailbreak compromise |
🌐 Platform Support
| Platform | Supported | | -------- | --------- | | Android | ✅ | | iOS | ✅ | | Web | ❌ | | macOS | ❌ |
📜 License
MIT License © 2025 \ Saurabh Chauhan https://github.com/chauhan-saurabh/react-native-secure-device-check
🤝 Contributing
PRs are welcome for new detection layers or platform enhancements (e.g., MacOS). Please follow conventional commits and include test cases if possible.
