device_root_jail_state_check 0.0.8
device_root_jail_state_check: ^0.0.8 copied to clipboard
A comprehensive Flutter package to detect device mode, developer mode, emulator, root/jailbreak status, network connection type, and real-time network speed.
🔒 Device Root Jail State Check
Advanced Flutter package for comprehensive device security assessment, real-time monitoring, and integrity verification
Features • Installation • Quick Start • Documentation • Platform Support • Contributing
🌟 Overview #
Device Root Jail State Check is a powerful Flutter package designed for security-conscious applications. It provides comprehensive device integrity checks, real-time monitoring, and security compliance verification. Perfect for banking apps, enterprise solutions, and any application requiring robust security measures.
🚀 Features #
🔒 Security Detection #
- Root Detection - Advanced Android root detection
- Jailbreak Detection - Comprehensive iOS jailbreak checks
- Developer Mode - Developer mode status monitoring
- Emulator Detection - Virtual environment identification
📱 Device Intelligence #
- Operation Modes - Normal, Safe, Airplane, Power Saving modes
- Real-time Monitoring - Continuous device status tracking
- Platform Analytics - Detailed platform and version information
🌐 Network Security #
- Connection Types - WiFi, Mobile, Ethernet, VPN, Bluetooth detection
- Speed Monitoring - Real-time download/upload speed tracking
- Signal Analysis - Network strength and quality assessment
- Connection Integrity - Continuous connectivity status
🛡️ Compliance & Reporting #
- Security Auditing - Comprehensive security status reports
- Real-time Streams - Live monitoring data streams
- Custom Checks - Extensible security verification system
📦 Installation #
Add the package to your pubspec.yaml:
dependencies:
device_root_jail_state_check: ^0.0.8
Then run:
flutter pub get
🚀 Quick Start #
import 'package:flutter/material.dart';
import 'package:device_root_jail_state_check/device_root_jail_state_check.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SecurityCheckScreen(),
);
}
}
class SecurityCheckScreen extends StatefulWidget {
@override
_SecurityCheckScreenState createState() => _SecurityCheckScreenState();
}
class _SecurityCheckScreenState extends State<SecurityCheckScreen> {
final DeviceRootJailStateCheck _detector = DeviceRootJailStateCheck();
DeviceInfo? _deviceInfo;
List<String> _securityLogs = [];
@override
void initState() {
super.initState();
_initializeSecurityCheck();
}
void _initializeSecurityCheck() async {
// Get comprehensive device information
DeviceInfo deviceInfo = await _detector.getDeviceInfo();
// Start real-time monitoring
_detector.getNetworkInfoStream().listen((networkInfo) {
_addLog('🌐 Network changed: ${networkInfo.type}');
});
_detector.getNetworkSpeedStream().listen((speedInfo) {
_addLog('⚡ Download: ${speedInfo.downloadSpeed.toStringAsFixed(2)} Mbps');
});
setState(() {
_deviceInfo = deviceInfo;
});
}
void _addLog(String message) {
setState(() {
_securityLogs.insert(0, '${DateTime.now().toString().substring(11, 19)}: $message');
if (_securityLogs.length > 10) _securityLogs.removeLast();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Security Dashboard'),
backgroundColor: Colors.blueGrey[900],
elevation: 0,
),
body: _deviceInfo == null
? Center(child: CircularProgressIndicator())
: _buildSecurityDashboard(),
);
}
Widget _buildSecurityDashboard() {
return SingleChildScrollView(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildSecurityStatusCard(),
SizedBox(height: 16),
_buildDeviceInfoCard(),
SizedBox(height: 16),
_buildNetworkInfoCard(),
SizedBox(height: 16),
_buildSecurityLogsCard(),
],
),
);
}
Widget _buildSecurityStatusCard() {
Color statusColor = _deviceInfo!.securityStatus == SecurityStatus.normal
? Colors.green
: Colors.red;
return Card(
elevation: 4,
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(Icons.security, color: statusColor),
SizedBox(width: 8),
Text(
'Security Status',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
],
),
SizedBox(height: 12),
Container(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
decoration: BoxDecoration(
color: statusColor.withOpacity(0.1),
borderRadius: BorderRadius.circular(8),
border: Border.all(color: statusColor),
),
child: Row(
children: [
Icon(
_deviceInfo!.securityStatus == SecurityStatus.normal
? Icons.check_circle
: Icons.warning,
color: statusColor,
),
SizedBox(width: 8),
Expanded(
child: Text(
_getSecurityStatusText(_deviceInfo!.securityStatus),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: statusColor,
),
),
),
],
),
),
],
),
),
);
}
Widget _buildDeviceInfoCard() {
return Card(
elevation: 4,
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Device Information',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 12),
_buildInfoRow('Platform', _deviceInfo!.platform),
_buildInfoRow('Version', _deviceInfo!.platformVersion),
_buildInfoRow('Model', _deviceInfo!.deviceModel),
_buildInfoRow('Brand', _deviceInfo!.deviceBrand),
_buildInfoRow('Device Mode', _deviceInfo!.deviceMode.name),
_buildInfoRow('Emulator', _deviceInfo!.isEmulator.toString()),
_buildInfoRow('Developer Mode', _deviceInfo!.isDeveloperModeEnabled.toString()),
],
),
),
);
}
Widget _buildNetworkInfoCard() {
return Card(
elevation: 4,
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Network Information',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 12),
_buildInfoRow('Connection Type', _deviceInfo!.networkInfo.type.name),
_buildInfoRow('Connected', _deviceInfo!.networkInfo.isConnected.toString()),
_buildInfoRow('SSID', _deviceInfo!.networkInfo.ssid.isEmpty ? 'Unknown' : _deviceInfo!.networkInfo.ssid),
_buildInfoRow('Signal Strength', '${_deviceInfo!.networkInfo.signalStrength} dBm'),
],
),
),
);
}
Widget _buildSecurityLogsCard() {
return Card(
elevation: 4,
child: Padding(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Security Logs',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 12),
Container(
height: 200,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey[300]!),
borderRadius: BorderRadius.circular(8),
),
child: _securityLogs.isEmpty
? Center(child: Text('No security events yet'))
: ListView.builder(
reverse: true,
itemCount: _securityLogs.length,
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
child: Text(
_securityLogs[index],
style: TextStyle(fontFamily: 'Monospace', fontSize: 12),
),
);
},
),
),
],
),
),
);
}
Widget _buildInfoRow(String label, String value) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 4),
child: Row(
children: [
Expanded(
flex: 2,
child: Text(
'$label:',
style: TextStyle(fontWeight: FontWeight.w500, color: Colors.grey[700]),
),
),
Expanded(
flex: 3,
child: Text(
value,
style: TextStyle(fontWeight: FontWeight.w400),
),
),
],
),
);
}
String _getSecurityStatusText(SecurityStatus status) {
switch (status) {
case SecurityStatus.normal:
return '✅ Device is secure and not compromised';
case SecurityStatus.rooted:
return '⚠️ Android device is rooted - Security risk!';
case SecurityStatus.jailbroken:
return '⚠️ iOS device is jailbroken - Security risk!';
case SecurityStatus.potentiallyCompromised:
return '🚨 Device might be compromised';
case SecurityStatus.unknown:
return '❓ Unable to determine security status';
default:
return 'Unknown status';
}
}
@override
void dispose() {
_detector.dispose();
super.dispose();
}
}
🚀 Advanced Real-time Monitoring #
class AdvancedSecurityMonitor extends StatefulWidget {
@override
_AdvancedSecurityMonitorState createState() => _AdvancedSecurityMonitorState();
}
class _AdvancedSecurityMonitorState extends State<AdvancedSecurityMonitor> {
final DeviceRootJailStateCheck _detector = DeviceRootJailStateCheck();
List<NetworkInfo> _networkHistory = [];
List<double> _speedHistory = [];
SecurityStatus? _lastSecurityStatus;
@override
void initState() {
super.initState();
_startAdvancedMonitoring();
}
void _startAdvancedMonitoring() async {
// Initial security check
SecurityStatus status = await _detector.getSecurityStatus();
_handleSecurityStatusChange(status);
// Monitor security status changes
Timer.periodic(Duration(seconds: 30), (timer) async {
SecurityStatus newStatus = await _detector.getSecurityStatus();
if (newStatus != _lastSecurityStatus) {
_handleSecurityStatusChange(newStatus);
}
});
// Real-time network monitoring with history
_detector.getNetworkInfoStream().listen((networkInfo) {
setState(() {
_networkHistory.insert(0, networkInfo);
if (_networkHistory.length > 20) _networkHistory.removeLast();
});
});
// Speed monitoring
_detector.getNetworkSpeedStream().listen((speedInfo) {
setState(() {
_speedHistory.insert(0, speedInfo.downloadSpeed);
if (_speedHistory.length > 50) _speedHistory.removeLast();
});
});
}
void _handleSecurityStatusChange(SecurityStatus status) {
setState(() {
_lastSecurityStatus = status;
});
// Trigger security alerts
if (status != SecurityStatus.normal) {
_showSecurityAlert(status);
}
}
void _showSecurityAlert(SecurityStatus status) {
// Implement your alert logic here
//print('SECURITY ALERT: $status');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Advanced Security Monitor')),
body: ListView(
children: [
// Add your custom security monitoring UI here
],
),
);
}
@override
void dispose() {
_detector.dispose();
super.dispose();
}
}
📖 Documentation #
Core Methods #
// Get comprehensive device information
DeviceInfo deviceInfo = await detector.getDeviceInfo();
// Check security status
SecurityStatus status = await detector.getSecurityStatus();
// Check if device is in developer mode
bool isDevMode = await detector.isDeveloperModeEnabled();
// Check if running on emulator
bool isEmulator = await detector.isEmulator();
// Get current device mode
DeviceMode deviceMode = await detector.getDeviceMode();
// Real-time network monitoring stream
detector.getNetworkInfoStream().listen((NetworkInfo networkInfo) {
// Handle network changes
});
// Real-time network speed stream
detector.getNetworkSpeedStream().listen((NetworkInfo speedInfo) {
// Handle speed changes
});
// Clean up resources
detector.dispose();
🛠️ Platform Support #
| Feature | Android | iOS | Web | Desktop |
|---|---|---|---|---|
| Root Detection | ✅ | ❌ | ❌ | ❌ |
| Jailbreak Detection | ❌ | ✅ | ❌ | ❌ |
| Device Mode | ✅ | ✅ | ❌ | ❌ |
| Network Info | ✅ | ✅ | ⚠️ | ⚠️ |
| Real-time Speed | ✅ | ✅ | ❌ | ❌ |
| Developer Mode | ✅ | ✅ | ❌ | ❌ |
🔧 Configuration #
Android Permissions #
Add to android/app/src/main/AndroidManifest.xml: #
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
iOS Configuration #
Add to ios/Runner/Info.plist:
<key>NSLocalNetworkUsageDescription</key>
<string>This app monitors network connectivity for security purposes</string>
🤝 Contributing #
We welcome contributions! Please see our Contributing Guide for details.
Pub.dev: device_root_jail_state_check
🌟 Support #
If you find this package useful, please give it a ⭐️ on GitHub!
⚠️ Security Notice This package is designed for security assessment and should be used responsibly. Always respect user privacy and comply with applicable laws and regulations.
Stay Secure! 🔒