98103466d8
Sanitized version of red team infrastructure automation platform. Operational content (implant pipelines, lures, credential capture) replaced with documented stubs. Architecture and infrastructure automation code intact.
122 lines
4.5 KiB
Python
122 lines
4.5 KiB
Python
import os
|
|
import subprocess
|
|
import argparse
|
|
|
|
TOOLS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../tools/') # Directory where all tools will be installed
|
|
|
|
def install_tool(tool_name, repo_url):
|
|
tool_path = os.path.join(TOOLS_DIR, tool_name)
|
|
|
|
if os.path.exists(tool_path):
|
|
print(f"{tool_name} is already installed.")
|
|
return
|
|
|
|
# Clone the repository
|
|
print(f"Cloning {repo_url}...")
|
|
subprocess.run(['git', 'clone', repo_url, tool_path], check=True)
|
|
|
|
# Set up a virtual environment if necessary
|
|
venv_path = os.path.join(tool_path, 'venv')
|
|
print(f"Setting up virtual environment for {tool_name}...")
|
|
subprocess.run(['python3', '-m', 'venv', venv_path], check=True)
|
|
|
|
# Activate virtual environment and install dependencies
|
|
requirements_file = os.path.join(tool_path, 'requirements.txt')
|
|
if os.path.exists(requirements_file):
|
|
print(f"Installing dependencies for {tool_name}...")
|
|
pip_bin = os.path.join(venv_path, 'bin', 'pip')
|
|
subprocess.run([pip_bin, 'install', '-r', requirements_file], check=True)
|
|
|
|
print(f"{tool_name} installed successfully.")
|
|
|
|
def install_tools_list(tools_list):
|
|
for tool_name, repo_url in tools_list:
|
|
install_tool(tool_name, repo_url)
|
|
|
|
def update_tool(tool_name):
|
|
tool_path = os.path.join(TOOLS_DIR, tool_name)
|
|
|
|
if not os.path.exists(tool_path):
|
|
print(f"{tool_name} is not installed.")
|
|
return
|
|
|
|
# Pull the latest changes
|
|
print(f"Updating {tool_name}...")
|
|
subprocess.run(['git', '-C', tool_path, 'pull'], check=True)
|
|
|
|
# Update dependencies if necessary
|
|
venv_path = os.path.join(tool_path, 'venv')
|
|
requirements_file = os.path.join(tool_path, 'requirements.txt')
|
|
if os.path.exists(requirements_file):
|
|
print(f"Updating dependencies for {tool_name}...")
|
|
pip_bin = os.path.join(venv_path, 'bin', 'pip')
|
|
subprocess.run([pip_bin, 'install', '-r', requirements_file], check=True)
|
|
|
|
print(f"{tool_name} updated successfully.")
|
|
|
|
def remove_tool(tool_name):
|
|
tool_path = os.path.join(TOOLS_DIR, tool_name)
|
|
|
|
if not os.path.exists(tool_path):
|
|
print(f"{tool_name} is not installed.")
|
|
return
|
|
|
|
# Remove the tool directory
|
|
print(f"Removing {tool_name}...")
|
|
subprocess.run(['rm', '-rf', tool_path], check=True)
|
|
print(f"{tool_name} removed successfully.")
|
|
|
|
def show_status(tool_name):
|
|
tool_path = os.path.join(TOOLS_DIR, tool_name)
|
|
|
|
if os.path.exists(tool_path):
|
|
print(f"{tool_name} is installed.")
|
|
else:
|
|
print(f"{tool_name} is not installed.")
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='Tool Manager for Freebird Framework')
|
|
subparsers = parser.add_subparsers(dest='command', help='Subcommands')
|
|
|
|
# Install command
|
|
install_parser = subparsers.add_parser('install', help='Install a tool')
|
|
install_parser.add_argument('tool_name', help='Name of the tool to install')
|
|
install_parser.add_argument('repo_url', help='Git repository URL of the tool')
|
|
|
|
# Install multiple tools
|
|
install_list_parser = subparsers.add_parser('install-list', help='Install a list of tools')
|
|
install_list_parser.add_argument('file', help='Path to a file containing the list of tools and their repositories')
|
|
|
|
# Update command
|
|
update_parser = subparsers.add_parser('update', help='Update a tool')
|
|
update_parser.add_argument('tool_name', help='Name of the tool to update')
|
|
|
|
# Remove command
|
|
remove_parser = subparsers.add_parser('remove', help='Remove a tool')
|
|
remove_parser.add_argument('tool_name', help='Name of the tool to remove')
|
|
|
|
# Status command
|
|
status_parser = subparsers.add_parser('status', help='Show the status of a tool')
|
|
status_parser.add_argument('tool_name', help='Name of the tool')
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == 'install':
|
|
install_tool(args.tool_name, args.repo_url)
|
|
elif args.command == 'install-list':
|
|
# Read the file to get a list of tools to install
|
|
tools = []
|
|
with open(args.file, 'r') as f:
|
|
for line in f:
|
|
name, url = line.strip().split(',')
|
|
tools.append((name.strip(), url.strip()))
|
|
install_tools_list(tools)
|
|
elif args.command == 'update':
|
|
update_tool(args.tool_name)
|
|
elif args.command == 'remove':
|
|
remove_tool(args.tool_name)
|
|
elif args.command == 'status':
|
|
show_status(args.tool_name)
|
|
else:
|
|
parser.print_help()
|