import sys import json import logging import os import subprocess logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) if __name__ == "__main__": if len(sys.argv) != 4: logger.error("Usage: deploy.py ") sys.exit(1) payload_path = sys.argv[1] spyware_config_json = sys.argv[2] deployment_config_json = sys.argv[3] try: spyware_config = json.loads(spyware_config_json) deployment_config = json.loads(deployment_config_json) except json.JSONDecodeError as e: logger.error(f"Error decoding JSON: {e}") sys.exit(1) logger.info(f"Payload Path: {payload_path}") logger.info(f"Spyware Config: {spyware_config}") logger.info(f"Deployment Config: {deployment_config}") logger.info("Starting deployment process...") try: if deployment_config and 'command' in deployment_config: command = deployment_config['command'] logger.info(f"Executing command: {command}") result = subprocess.run(command, shell=True, capture_output=True, text=True) if result.returncode == 0: logger.info(f"Command executed successfully. Output:\n{result.stdout}") else: logger.error(f"Command failed with error:\n{result.stderr}") elif deployment_config and 'remote_host' in deployment_config and 'remote_user' in deployment_config: remote_host = deployment_config['remote_host'] remote_user = deployment_config['remote_user'] remote_path = deployment_config.get('remote_path', '/tmp') if payload_path: file_name = os.path.basename(payload_path) remote_file_path = f"{remote_user}@{remote_host}:{remote_path}/{file_name}" logger.info(f"Copying payload to remote host: {remote_file_path}") scp_command = ['scp', payload_path, remote_file_path] result = subprocess.run(scp_command, capture_output=True, text=True) if result.returncode == 0: logger.info(f"File copied successfully to {remote_file_path}") ssh_command = ['ssh', f"{remote_user}@{remote_host}", f"echo 'File deployed to {remote_path}/{file_name}'"] ssh_result = subprocess.run(ssh_command, capture_output=True, text=True) if ssh_result.returncode == 0: logger.info(f"Remote command executed successfully: {ssh_result.stdout}") else: logger.error(f"Remote command failed: {ssh_result.stderr}") else: logger.error(f"Error copying file with scp: {result.stderr}") else: logger.warning("No payload path provided, skipping file transfer.") elif payload_path: file_name = os.path.basename(payload_path) output_file_path = os.path.join(os.getcwd(), file_name) with open(output_file_path, 'w') as f: f.write(f"This is a dummy payload file created by deploy.py.\nSpyware Config: {spyware_config}\nDeployment Config: {deployment_config}") logger.info(f"Created dummy payload file at: {output_file_path}") else: logger.warning("No payload path or command provided, skipping deployment.") except Exception as e: logger.error(f"Error during deployment: {e}") logger.info("Deployment process completed.")