- Objectif du projet
- Aperçu rapide
- Architecture
- Démarrage rapide
- Créer un module
- Structure du projet
- Configuration
- Licence
RedOps est un framework modulaire d'audit et de simulation d'attaques qui permet de :
- Créer des modules d'audit de sécurité de manière simple et standardisée
- Exécuter des modules dans un ordre configurable
- Visualiser les résultats via une interface graphique moderne
- Étendre facilement le framework via de nouveaux modules Il sert de base pédagogique pour analyser :
- Conception modulaire et extensible
- Réflexion Java et chargement dynamique
- Gestion des erreurs et statuts d'exécution
- Interfaces utilisateur réactives
Main.main()
├── RedOpsOptions.parse(args) // Parse les arguments CLI
├── AppConfig.load(options) // Charge la configuration
├── AnnotationConfigLoader.loadConfig() // Scan les annotations @Module
└── ModuleManager.startModules() // Démarre les modules@Module(name = "Simple Ping", order = 0)
public class Ping extends AbstractModule {
@Override
protected ExecutionStatus process(InetAddress address)
throws InterruptedException {
boolean reachable = address.isReachable(5000);
return reachable ? ExecutionStatus.SUCCESS : ExecutionStatus.ERROR;
}
}Au démarrage, RedOps :
- Scanne le package
com.redopspour trouver tous les modules annotés@Module - Les trie par ordre d'exécution
- Les instancie et les exécute séquentiellement
- Affiche les résultats dans l'interface graphique
com.redops.library: Point d'entrée (Main)com.redops.library.core: Framework principalModuleManager: Orchestrateur des modulesannotations/: Annotation@Moduleconfig/: Chargement de configurationmodule/: Gestion du cycle de vie des modulestools/: Classes utilitaires (AbstractModule,ExecutionStatus)
com.redops.library.modules: Modules d'audit implémentés
| Composant | Rôle |
|---|---|
@Module |
Annotation pour déclarer un module |
AbstractModule |
Classe de base pour tous les modules |
ModuleManager |
Orchestrateur principal |
ModuleInfo |
Encapsule un module instancié |
ExecutionStatus |
Statuts d'exécution (SUCCESS, ERROR, etc.) |
- Java 17 ou supérieur
- Maven 3.6+
mvn clean compilePowerShell :
# Mode graphique (par défaut)
mvn exec:java "-Dexec.mainClass=com.redops.library.Main"
# Mode headless (sans interface)
mvn exec:java "-Dexec.mainClass=com.redops.library.Main" "-Dexec.args=--headless"
# Mode debug
mvn exec:java "-Dexec.mainClass=com.redops.library.Main" "-Dexec.args=--debug"Bash / CMD :
# Mode graphique (par défaut)
mvn exec:java -Dexec.mainClass="com.redops.library.Main"
# Mode headless (sans interface)
mvn exec:java -Dexec.mainClass="com.redops.library.Main" -Dexec.args="--headless"
# Mode debug
mvn exec:java -Dexec.mainClass="com.redops.library.Main" -Dexec.args="--debug"| Option | Description |
|---|---|
--headless |
Mode sans interface graphique |
--debug |
Active les logs de debug |
Créez une nouvelle classe dans com.redops.library.modules :
package com.redops.library.modules;
import com.redops.library.core.annotations.Module;
import com.redops.library.core.tools.AbstractModule;
import com.redops.library.core.tools.ExecutionStatus;
import java.net.InetAddress;
@Module(name = "Port Scanner", order = 10)
public class PortScanner extends AbstractModule {
@Override
protected ExecutionStatus process(InetAddress address)
throws InterruptedException {
// Votre logique ici
// ...
return ExecutionStatus.SUCCESS;
}
}@Override
protected ExecutionStatus process(InetAddress address)
throws InterruptedException {
List<Integer> openPorts = new ArrayList<>();
// Scanner les ports communs
for (int port : new int[]{80, 443, 22, 21, 25}) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(address, port), 1000);
openPorts.add(port);
} catch (IOException e) {
// Port fermé
}
}
// Stocker les résultats
result.setMessage("Ports ouverts : " + openPorts);
return openPorts.isEmpty() ? ExecutionStatus.WARNING : ExecutionStatus.SUCCESS;
}redops/
├── src/main/java/com/redops/library/
│ ├── Main.java # Point d'entrée
│ ├── core/ # Framework
│ │ ├── ModuleManager.java # Orchestrateur
│ │ ├── annotations/
│ │ │ └── Module.java # Annotation @Module
│ │ ├── config/ # Configuration
│ │ ├── module/ # Gestion des modules
│ │ ├── entity/ # Entités métier
│ │ ├── graphics/ # Interface graphique
│ │ └── tools/ # Utilitaires
│ │ ├── AbstractModule.java # Classe de base
│ │ └── ExecutionStatus.java # Statuts
│ └── modules/ # Modules implémentés
│ ├── Ping.java
│ └── PingAdvanced.java
├── src/main/resources/
│ └── log4j2.xml # Configuration logs
├── docs/wiki/ # Documentation
├── pom.xml # Configuration Maven
└── README.md
| Statut | Code | Description |
|---|---|---|
SUCCESS |
0 | Module exécuté avec succès |
WARNING |
1 | Exécuté avec avertissements |
ERROR |
-1 | Erreur d'exécution |
CRITICAL_ERROR |
-2 | Erreur critique |
IN_PROGRESS |
4 | En cours d'exécution |
NOT_STARTED |
3 | Pas encore démarré |
SKIPPED |
2 | Sauté |
Configuration dans src/main/resources/log4j2.xml :
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>- Architecture - Architecture détaillée
- Annotations - Annotation @Module
- API Reference - Référence complète de l'API
- Developer Guide - Guide développeur
- Module Template - Template de module
- Java 17 - Langage de base
- Maven - Gestion de dépendances
- Reflections - Scanning d'annotations
- Log4j2 - Journalisation
- FlatLaf - Look & Feel moderne
- JFreeChart - Génération de graphiques
- Swing - Interface graphique
Les contributions sont les bienvenues ! Consultez le guide de contribution.
- Fork le projet
- Créez une branche (
git checkout -b feature/AmazingFeature) - Commitez vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrez une Pull Request
RedOps est un outil pédagogique et de sécurité offensive.
- ✅ À utiliser uniquement sur des systèmes dont vous avez l'autorisation
- ❌ Ne pas utiliser sur des systèmes tiers sans permission écrite
- ⚖️ L'utilisateur est seul responsable de l'usage de cet outil Consultez Legal-Ethics.md pour plus d'informations.
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Mathys Haubert - Développement initial
- Communauté Java et sécurité offensive
- Contributeurs open source
- Testeurs et reviewers
Made with ❤️ for learning and security research