| 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 <payload_path> <spyware_config_json> <deployment_config_json>") | |
| 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.") | |