device_root_jail_state_check 0.0.8 copy "device_root_jail_state_check: ^0.0.8" to clipboard
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.

Flutter Dart Android iOS Pub Version License

🔒 Device Root Jail State Check

Advanced Flutter package for comprehensive device security assessment, real-time monitoring, and integrity verification

FeaturesInstallationQuick StartDocumentationPlatform SupportContributing

Demo

🌟 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! 🔒

0
likes
130
points
23
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter package to detect device mode, developer mode, emulator, root/jailbreak status, network connection type, and real-time network speed.

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on device_root_jail_state_check

Packages that implement device_root_jail_state_check