engine_security 1.2.1 copy "engine_security: ^1.2.1" to clipboard
engine_security: ^1.2.1 copied to clipboard

Advanced security detection system for Flutter applications focused on Android and iOS. Detects Frida, Root/Jailbreak, Emulator, and Debugger threats with high precision.

🛡️ Engine Security #

CI/CD Pipeline codecov Pub Version Pana Score License Platform

Sistema avançado de detecção de segurança para aplicações Flutter focado em Android e iOS

📋 Índice #

🚀 Recursos #

  • 100% de Cobertura de Testes - Todos os componentes testados
  • 🎯 Pontuação Pana 100/100 - Qualidade máxima no pub.flutter-io.cn
  • 🔄 CI/CD Automatizado - Pipeline completo com GitHub Actions
  • 📱 Android & iOS Exclusivo - Otimizado para dispositivos móveis
  • 🛡️ 6 Detectores Especializados - Frida, Root/Jailbreak, HTTPS Pinning, GPS Fake, Emulator, Debugger
  • Detecção Assíncrona - Performance otimizada
  • 🎨 API Intuitiva - Fácil integração e uso
  • 📊 Sistema de Confiança - Níveis de confiança calibrados
  • 🔒 Zero Dependências Externas - Seguro e leve

📦 Instalação #

Adicione ao seu pubspec.yaml:

dependencies:
  engine_security: ^1.2.0

Execute:

flutter pub get

⚡ Uso Rápido #

import 'package:engine_security/engine_security.dart';

void main() async {
  // Detectar Frida
  final fridaDetector = EngineFridaDetector();
  final fridaResult = await fridaDetector.performCheck();
  
  if (!fridaResult.isSecure) {
    print('⚠️ Frida detectado: ${fridaResult.details}');
    print('🎯 Confiança: ${fridaResult.confidence}');
  }
  
  // Detectar Root/Jailbreak
  final rootDetector = EngineRootDetector();
  final rootResult = await rootDetector.performCheck();
  
  if (!rootResult.isSecure) {
    print('⚠️ Device comprometido: ${rootResult.details}');
  }
  
  // Verificação completa
  await performFullSecurityCheck();
}

Future<void> performFullSecurityCheck() async {
  final detectors = [
    EngineFridaDetector(),
    EngineRootDetector(),
    EngineHttpsPinningDetector(),
    EngineGpsFakeDetector(),
    EngineEmulatorDetector(),
    EngineDebuggerDetector(),
  ];
  
  print('🔍 Executando verificação completa de segurança...\n');
  
  for (final detector in detectors) {
    if (detector.isAvailable) {
      final result = await detector.performCheck();
      final status = result.isSecure ? '✅' : '❌';
      
      print('$status ${detector.detectorName}');
      print('   Confiança: ${(result.confidence * 100).toStringAsFixed(1)}%');
      print('   Detalhes: ${result.details ?? 'N/A'}');
      print('');
    }
  }
}

🛡️ Detectores Disponíveis #

1. 🔴 Frida Detector (EngineFridaDetector) #

  • Ameaça: EngineSecurityThreatType.frida
  • Severidade: 9/10
  • Confiança: 95%
  • Métodos: Detecção de processos, bibliotecas e portas
  • Plataformas: Android ✅ | iOS ✅

2. 🔑 Root/Jailbreak Detector (EngineRootDetector) #

  • Ameaça: EngineSecurityThreatType.rootJailbreak
  • Severidade: 8/10
  • Confiança: 90%
  • Métodos: Arquivos de sistema, apps instalados, permissões
  • Plataformas: Android ✅ | iOS ✅

3. 🔒 HTTPS Certificate Pinning Detector (EngineHttpsPinningDetector) #

  • Ameaça: EngineSecurityThreatType.httpsPinning
  • Severidade: 8/10
  • Confiança: 95%
  • Métodos: Validação de certificados SSL/TLS, fingerprints SHA-256
  • Plataformas: Android ✅ | iOS ✅

4. 🗺️ GPS Fake Detector (EngineGpsFakeDetector) #

  • Ameaça: EngineSecurityThreatType.gpsFake
  • Severidade: 7/10
  • Confiança: 90%
  • Métodos: Mock location, apps falsos, consistência GPS
  • Plataformas: Android ✅ | iOS ✅

5. 📱 Emulator Detector (EngineEmulatorDetector) #

  • Ameaça: EngineSecurityThreatType.emulator
  • Severidade: 6/10
  • Confiança: 85%
  • Métodos: Hardware, sensores, características do sistema
  • Plataformas: Android ✅ | iOS ✅

6. 🐛 Debugger Detector (EngineDebuggerDetector) #

  • Ameaça: EngineSecurityThreatType.debugger
  • Severidade: 2/10
  • Confiança: 85%
  • Métodos: Processos de debug, timing attacks
  • Plataformas: Android ✅ | iOS ✅

🔒 HTTPS Certificate Pinning #

O Engine Security inclui um sistema robusto de certificate pinning que protege contra ataques man-in-the-middle e interceptação de tráfego.

Configuração Básica #

import 'package:engine_security/engine_security.dart';
import 'dart:io';

void setupCertificatePinning() {
  // Configurar pins para diferentes domínios
  final pins = [
    EngineCertificatePinModel(
      hostname: 'api.example.com',
      pins: [
        'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=', // SHA-256 em base64
        '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', // SHA-256 em hex
      ],
      includeSubdomains: true,
      enforcePinning: true,
    ),
    EngineCertificatePinModel(
      hostname: 'stmr.tech',
      pins: [
        '17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75', // SHA-256 fingerprint real
      ],
      includeSubdomains: true,
      enforcePinning: true,
    ),
  ];

  // Configurar HttpOverrides global
  final httpOverrides = EngineSecurityHttpOverrides(
    pinnedCertificates: pins,
    onPinningValidation: (hostname, isValid, error) {
      print('Validação de pin para $hostname: ${isValid ? 'OK' : 'FALHA'}');
      if (error != null) print('Erro: $error');
    },
  );

  HttpOverrides.global = httpOverrides;
}

Detector de Certificate Pinning #

Future<void> checkCertificatePinning() async {
  final detector = EngineHttpsPinningDetector(
    enabled: true,
    pinnedCertificates: [
      EngineCertificatePinModel(
        hostname: 'stmr.tech',
        pins: ['17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75'],
        includeSubdomains: true,
      ),
    ],
    testConnectivity: false,
    strictMode: false, // true = só valida pins existentes
  );
  
  final result = await detector.performCheck();
  
  if (!result.isSecure) {
    print('Certificate pinning não está configurado!');
    print('Detalhes: ${result.details}');
  } else {
    print('Certificate pinning configurado corretamente!');
    print('Sites protegidos: ${result.details}');
  }
}

Obtendo Fingerprints de Certificados #

Método 1: Usando Engine Security (Automático)

// Obter o fingerprint diretamente do servidor ativo
final pinModel = await EngineHttpsPinningDetector.createPinFromLiveHost('stmr.tech');
print('Fingerprints obtidos: ${pinModel?.pins}');

Método 2: OpenSSL

echo | openssl s_client -connect stmr.tech:443 2>/dev/null | openssl x509 -fingerprint -sha256 -noout

Método 3: Chrome DevTools

  1. Abra o site no Chrome
  2. F12 → Security → View Certificate
  3. Copie o SHA-256 fingerprint

Método 4: A partir de arquivo

// Se você tem um arquivo .crt ou .pem
final pinModel = await EngineHttpsPinningDetector.createPinFromCertificateFile(
  'api.example.com',
  '/path/to/certificate.crt',
);

Método 5: Hash conhecido

// Se você já tem o hash SHA-256
final pinModel = EngineHttpsPinningDetector.createPinFromHash(
  'stmr.tech',
  '17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75',
);

🗺️ GPS Fake Detection #

O EngineGpsFakeDetector utiliza múltiplas técnicas para detectar manipulação de GPS:

Técnicas de Detecção #

1. 🔧 Verificação de Mock Location (Android)

  • Detecta se as "opções de desenvolvedor" têm mock location habilitado
  • Verifica configurações do sistema Android

2. 📱 Detecção de Apps de GPS Fake

  • Verifica instalação de mais de 25 apps conhecidos de GPS fake
  • Lista atualizada dos principais apps de spoofing de localização

3. 📊 Análise de Confiabilidade da Fonte

  • Verifica precisão suspeita do GPS (< 100m pode indicar fake)
  • Detecta valores impossíveis (altitude e velocidade zero)

4. 🔄 Verificação de Consistência GPS

  • Analisa movimento impossível entre leituras GPS
  • Detecta "teletransporte" (distância > 1km em < 10s)

5. 🔐 Análise de Permissões

  • Verifica interferência em permissões de localização
  • Detecta desabilitação suspeita de serviços de localização

Exemplo de Uso #

import 'package:engine_security/engine_security.dart';

Future<void> checkGPSFake() async {
  final gpsDetector = EngineGpsFakeDetector();
  
  // Verificação básica
  final result = await gpsDetector.performCheck();
  
  if (!result.isSecure) {
    print('⚠️ GPS Fake detectado!');
    print('📍 Detalhes: ${result.details}');
    print('🔍 Método: ${result.detectionMethod}');
    print('🎯 Confiança: ${(result.confidence * 100).toStringAsFixed(1)}%');
  } else {
    print('✅ GPS é confiável');
  }
}

📊 Modelos de Dados #

EngineSecurityCheckModel #

class EngineSecurityCheckModel {
  final bool isSecure;
  final EngineSecurityThreatType threatType;
  final double confidence;
  final String? details;
  final String? detectionMethod;
  final DateTime? timestamp;
  
  EngineSecurityCheckModel.secure({...});
  EngineSecurityCheckModel.threat({required EngineSecurityThreatType threatType, ...});
}

EngineDetectorInfoModel #

class EngineDetectorInfoModel {
  final String name;
  final EngineSecurityThreatType threatType;
  final bool enabled;
  final String platform;
}

EngineCertificatePinModel #

class EngineCertificatePinModel {
  final String hostname;
  final List<String> pins; // SHA-256 em base64 ou hexadecimal
  final bool includeSubdomains;
  final bool enforcePinning;
  
  // Métodos de validação
  bool isValidPinFormat(String pin);
  bool matchesHostname(String host);
}

EngineSecurityThreatType #

enum EngineSecurityThreatType {
  unknown,        // Severidade: 5
  frida,          // Severidade: 9
  rootJailbreak,  // Severidade: 8
  httpsPinning,   // Severidade: 8
  gpsFake,        // Severidade: 7
  emulator,       // Severidade: 6
  debugger,       // Severidade: 2
}

🔧 Interface #

IEngineSecurityDetector #

abstract class IEngineSecurityDetector {
  EngineSecurityThreatType get threatType;
  String get detectorName;
  Future<EngineSecurityCheckModel> performCheck();
  bool get isAvailable;
  EngineDetectorInfoModel get detectorInfo;
}

📱 Exemplos #

Execute o exemplo interativo:

cd demo/security_demo
flutter run

Implementação Personalizada #

class MySecurityManager {
  final List<IEngineSecurityDetector> _detectors = [
    EngineFridaDetector(),
    EngineRootDetector(),
    EngineHttpsPinningDetector(),
    EngineGpsFakeDetector(),
    EngineEmulatorDetector(),
    EngineDebuggerDetector(),
  ];
  
  Future<List<EngineSecurityCheckModel>> scanAllThreats() async {
    final results = <EngineSecurityCheckModel>[];
    
    for (final detector in _detectors) {
      if (detector.isAvailable) {
        try {
          final result = await detector.performCheck();
          results.add(result);
        } catch (e) {
          results.add(EngineSecurityCheckModel.threat(
            threatType: detector.threatType,
            details: 'Erro na detecção: $e',
            confidence: 0.5,
          ));
        }
      }
    }
    
    return results;
  }
  
  Future<bool> isDeviceSecure({double minimumConfidence = 0.8}) async {
    final results = await scanAllThreats();
    
    for (final result in results) {
      if (!result.isSecure && result.confidence >= minimumConfidence) {
        return false;
      }
    }
    
    return true;
  }
}

🔧 Desenvolvimento #

Estrutura do Projeto #

lib/
├── engine_security.dart           # Ponto de entrada principal
└── src/
    ├── src.dart                    # Exportações centralizadas
    ├── detectors/                  # Detectores de segurança
    │   ├── i_engine_security_detector.dart     # Interface base
    │   ├── engine_frida_detector.dart          # Detector Frida
    │   ├── engine_root_detector.dart           # Detector Root/Jailbreak
    │   ├── engine_https_pinning_detector.dart  # Detector HTTPS Pinning
    │   ├── engine_gps_fake_detector.dart       # Detector GPS Fake
    │   ├── engine_emulator_detector.dart       # Detector Emulator
    │   └── engine_debugger_detector.dart       # Detector Debugger
    ├── models/                     # Modelos de dados
    │   ├── engine_security_check_model.dart    # Modelo de resultado
    │   ├── engine_detector_info_model.dart     # Informações do detector
    │   └── engine_certificate_pin_model.dart   # Modelo de certificate pin
    ├── enums/                      # Enumerações
    │   └── engine_security_threat_type.dart    # Tipos de ameaças
    └── network/                    # Componentes de rede
        └── engine_security_http_overrides.dart # HttpOverrides para pinning

test/
├── all_tests.dart                  # Suite completa de testes
├── models/                         # Testes dos modelos
├── enums/                          # Testes dos enums
├── interface/                      # Testes da interface
└── detectors/                      # Testes dos detectores

demo/
└── security_demo/                  # App demonstrativo

scripts/
├── test_coverage.sh               # Script de cobertura
└── pana_analysis.sh              # Script de análise Pana

Scripts de Desenvolvimento #

# Executar testes com cobertura
./scripts/test_coverage.sh

# Análise de qualidade Pana
./scripts/pana_analysis.sh

# Análise estática
dart analyze

# Formatação de código
dart format .

# Publicar (dry-run)
dart pub publish --dry-run

Comandos de Qualidade #

# Executar todos os testes
flutter test

# Testes com cobertura
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html

# Verificar cobertura mínima
dart pub global activate test_coverage
dart pub global run test_coverage --min-coverage=50

# Análise Pana
dart pub global activate pana
dart pub global run pana

🤝 Contribuição #

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Diretrizes de Contribuição #

  • Mantenha 100% de cobertura de testes
  • Siga o padrão de código existente
  • Documente novas funcionalidades
  • Teste em Android e iOS
  • Atualize o CHANGELOG.md

📄 Licença #

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.


⚠️ Aviso de Segurança: Este pacote é uma ferramenta de detecção, não uma solução de segurança completa. Sempre implemente múltiplas camadas de segurança em suas aplicações.

❤️ Feito com Amor #

Desenvolvido por: Thiago Moreira
Organização: STMR
Domínio: tech.stmr


⭐ Se este projeto te ajudou, considere dar uma estrela no repositório!

GitHub stars

🤝 Contribuições são sempre bem-vindas!

GitHub issues GitHub pull requests


📧 Contato: Email
🌐 Website: stmr.tech
🐦 Twitter: @moreirawebmaster

6
likes
160
points
340
downloads

Publisher

verified publisherstmr.tech

Weekly Downloads

Advanced security detection system for Flutter applications focused on Android and iOS. Detects Frida, Root/Jailbreak, Emulator, and Debugger threats with high precision.

Homepage
Repository (GitHub)
View/report issues

Topics

#security #detection #frida #mobile #android

Documentation

Documentation
API reference

Funding

Consider supporting this project:

github.com

License

MIT (license)

Dependencies

crypto, device_info_plus, flutter, geolocator, location, package_info_plus, permission_handler

More

Packages that depend on engine_security