forked from CroodSolutions/BeaconatorC2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBeaconatorC2-Manager.py
More file actions
132 lines (108 loc) · 4.46 KB
/
BeaconatorC2-Manager.py
File metadata and controls
132 lines (108 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env python3
"""
Beaconator C2 Manager - Refactored Version
A universal C2 beacon framework manager supporting beacons in any programming language
"""
import sys
from pathlib import Path
from PyQt6.QtWidgets import QApplication
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPalette, QColor
# Import refactored modules
from config import ServerConfig, ConfigManager
from database import setup_database
from services import CommandProcessor, FileTransferService, MetasploitManager
from services.receivers import ReceiverManager
from services.receivers.legacy_migration import ensure_legacy_receiver_exists
from ui import MainWindow
from utils import Logger, setup_taskbar_icon, ensure_directories
import utils
def main():
# Initialize configuration
config = ServerConfig()
# Ensure required directories exist
ensure_directories(config)
# Initialize global logger
utils.logger = Logger(config)
# Setup taskbar icon
setup_taskbar_icon(config)
# Set up database
SessionLocal, beacon_repository = setup_database(config.DB_PATH)
# Create core services directly
command_processor = CommandProcessor(beacon_repository)
file_transfer_service = FileTransferService()
# Initialize Metasploit integration
metasploit_manager = MetasploitManager(config)
success, message = metasploit_manager.initialize()
if success:
utils.logger.log_message(f"Metasploit integration: {message}")
else:
utils.logger.log_message(f"Metasploit integration failed: {message}")
# Create receiver manager for new architecture
receiver_manager = ReceiverManager(
command_processor=command_processor,
file_transfer_service=file_transfer_service
)
# Ensure legacy-compatible receiver exists
legacy_receiver_id = ensure_legacy_receiver_exists(config)
if legacy_receiver_id:
utils.logger.log_message(f"Legacy-compatible receiver created/updated: {legacy_receiver_id}")
else:
utils.logger.log_message("Warning: Failed to create legacy-compatible receiver")
# Create Qt application
app = QApplication(sys.argv)
app.setStyle('Fusion')
# Set dark theme
dark_palette = QPalette()
dark_palette.setColor(QPalette.ColorRole.Window, QColor(53, 53, 53))
dark_palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white)
dark_palette.setColor(QPalette.ColorRole.Base, QColor(35, 35, 35))
dark_palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
dark_palette.setColor(QPalette.ColorRole.Button, QColor(53, 53, 53))
dark_palette.setColor(QPalette.ColorRole.ButtonText, Qt.GlobalColor.white)
dark_palette.setColor(QPalette.ColorRole.PlaceholderText, QColor(127, 127, 127))
app.setPalette(dark_palette)
# Create and show main window with services
window = MainWindow(
beacon_repository=beacon_repository,
command_processor=command_processor,
file_transfer_service=file_transfer_service,
receiver_manager=receiver_manager,
metasploit_manager=metasploit_manager
)
window.show()
# Legacy server fully retired - using only ReceiverManager
# Note: Receivers will auto-start through ReceiverManager
utils.logger.log_message("Application started")
# Add shutdown handling to window close
original_close_event = window.closeEvent
def extended_close_event(event):
original_close_event(event) # Call original close event
# Try to shutdown gracefully with timeout
import threading
def shutdown_with_timeout():
try:
# Shutdown Metasploit manager first
metasploit_manager.shutdown()
except:
pass # Ignore shutdown errors
try:
receiver_manager.shutdown()
except:
pass # Ignore shutdown errors
shutdown_thread = threading.Thread(target=shutdown_with_timeout, daemon=True)
shutdown_thread.start()
shutdown_thread.join(timeout=5.0) # Wait max 5 seconds for both shutdowns
window.closeEvent = extended_close_event
try:
sys.exit(app.exec())
except KeyboardInterrupt:
utils.logger.log_message("Received shutdown signal")
finally:
try:
metasploit_manager.shutdown()
except:
pass
receiver_manager.shutdown()
if __name__ == '__main__':
main()