implemented results folder

This commit is contained in:
som3canadian
2025-01-03 19:25:12 -05:00
parent 3e8c1ac6f6
commit c309f08114
4 changed files with 38 additions and 4 deletions
+2
View File
@@ -0,0 +1,2 @@
__pycache__/
Scanners/PE-Sieve/Analysis
+1
View File
@@ -16,6 +16,7 @@ upload:
- sys
max_file_size: 16777216 # 16MB in bytes
upload_folder: "Uploads"
result_folder: "Results"
analysis:
static:
+33 -2
View File
@@ -8,6 +8,7 @@ import os
import shutil
import psutil
import pefile
import json
from .analyzers.manager import AnalysisManager
from flask import render_template, request, jsonify
from werkzeug.utils import secure_filename
@@ -216,7 +217,7 @@ def get_office_info(filepath):
print(f"Error analyzing Office file: {e}")
return {'office_info': None}
def save_uploaded_file(file, upload_folder):
def save_uploaded_file(file, upload_folder, result_folder):
file_content = file.read()
file.close()
md5_hash = hashlib.md5(file_content).hexdigest()
@@ -228,6 +229,8 @@ def save_uploaded_file(file, upload_folder):
os.makedirs(upload_folder, exist_ok=True)
filepath = os.path.join(upload_folder, filename)
os.makedirs(result_folder, exist_ok=True)
os.makedirs(os.path.join(result_folder, filename), exist_ok=True)
with open(filepath, 'wb') as f:
f.write(file_content)
@@ -270,6 +273,10 @@ def save_uploaded_file(file, upload_folder):
print(f"Warning: {office_result['error']}")
file_info.update(office_result)
# save file info to result folder
with open(os.path.join(result_folder, filename, 'file_info.json'), 'w') as f:
json.dump(file_info, f)
return file_info
def find_file_by_hash(file_hash, upload_folder):
@@ -335,7 +342,7 @@ def register_routes(app):
if file and allowed_file(file.filename, app.config):
try:
file_info = save_uploaded_file(file, app.config['upload']['upload_folder'])
file_info = save_uploaded_file(file, app.config['upload']['upload_folder'], app.config['upload']['result_folder'])
return jsonify({
'message': 'File uploaded successfully',
'file_info': file_info
@@ -369,6 +376,7 @@ def register_routes(app):
else:
# Look for file as before
file_path = find_file_by_hash(target, app.config['upload']['upload_folder'])
result_path = find_file_by_hash(target, app.config['upload']['result_folder'])
if not file_path:
return jsonify({'error': 'File not found'}), 404
if request.method == 'GET':
@@ -381,9 +389,15 @@ def register_routes(app):
if is_pid:
return jsonify({'error': 'Cannot perform static analysis on PID'}), 400
results = analysis_manager.run_static_analysis(file_path)
# save results to result folder
with open(os.path.join(result_path, 'static_analysis_results.json'), 'w') as f:
json.dump(results, f)
elif analysis_type == 'dynamic':
target_for_analysis = target if is_pid else file_path
results = analysis_manager.run_dynamic_analysis(target_for_analysis, is_pid)
# save results to result folder
with open(os.path.join(result_path, 'dynamic_analysis_results.json'), 'w') as f:
json.dump(results, f)
else:
return jsonify({'error': 'Invalid analysis type'}), 400
@@ -401,6 +415,7 @@ def register_routes(app):
results = {
'uploads_cleaned': 0,
'analysis_cleaned': 0,
'result_cleaned': 0,
'errors': []
}
@@ -420,6 +435,22 @@ def register_routes(app):
except Exception as e:
results['errors'].append(f"Error accessing uploads folder: {str(e)}")
# delete all folders in result folder
result_folder = app.config['upload']['result_folder']
if os.path.exists(result_folder):
try:
folders = os.listdir(result_folder)
for folder in folders:
folder_path = os.path.join(result_folder, folder)
try:
if os.path.isdir(folder_path):
shutil.rmtree(folder_path)
results['result_cleaned'] += 1
except Exception as e:
results['errors'].append(f"Error deleting {folder}: {str(e)}")
except Exception as e:
results['errors'].append(f"Error accessing result folder: {str(e)}")
# Clean analysis folders
analysis_path = os.path.join('.', 'Scanners', 'PE-Sieve', 'Analysis')
if os.path.exists(analysis_path):
+2 -2
View File
@@ -385,12 +385,12 @@ const CleanupSystem = {
formatResponse(data) {
if (data.status === 'success') {
return {
message: `Cleanup successful:\n- ${data.details.uploads_cleaned} files removed\n- ${data.details.analysis_cleaned} PE-Sieve folders cleaned`,
message: `Cleanup successful:\n- ${data.details.uploads_cleaned} files removed\n- ${data.details.analysis_cleaned} PE-Sieve folders cleaned\n- ${data.details.result_cleaned} result folders cleaned`,
className: 'bg-green-500'
};
} else if (data.status === 'warning') {
return {
message: `Cleanup completed with warnings:\n- ${data.details.uploads_cleaned} files removed\n- ${data.details.analysis_cleaned} PE-Sieve folders cleaned\n\nErrors:\n${data.details.errors.join('\n')}`,
message: `Cleanup completed with warnings:\n- ${data.details.uploads_cleaned} files removed\n- ${data.details.analysis_cleaned} PE-Sieve folders cleaned\n- ${data.details.result_cleaned} result folders cleaned\n\nErrors:\n${data.details.errors.join('\n')}`,
className: 'bg-yellow-500'
};
} else {