Files
CTF-tool/src/ctf/cli_analyse.py

56 lines
2.0 KiB
Python

# src/ctf/cli_analyse.py
# {{{ imports
import click
from pathlib import Path
from rich.console import Console
from rich.panel import Panel
from ctf.analysis import run_analysis
# }}}
# {{{ analyse_cmd
@click.command(name="analyse")
@click.option('-f', '--file', type=click.Path(exists=True), help="Path to the challenge file to analyze.")
def analyse_cmd(file):
"""Dynamically analyze and try to solve the active challenge using static routes."""
console = Console()
console.print("[bold blue][*] Starting dynamic challenge analysis...[/bold blue]\n")
file_path = Path(file) if file else None
result = run_analysis(file_path)
for route in result.routes:
title = f"Route: {route.route_name}"
if not route.executed:
console.print(Panel(
f"[yellow]{route.message}[/yellow]",
title=title,
border_style="yellow"
))
elif route.success:
content = f"[green]{route.message}[/green]\n"
if route.details:
content += "\n[bold cyan]Details:[/bold cyan]\n"
for k, v in route.details.items():
content += f"{k}: {v}\n"
if route.extracted_flags:
content += "\n[bold green]✓ Extracted Flags:[/bold green]\n"
for flag in route.extracted_flags:
content += f" [bold green]{flag}[/bold green]\n"
console.print(Panel(
content.strip(),
title=title,
border_style="green"
))
else:
console.print(Panel(
f"[red]✗ {route.message}[/red]",
title=title,
border_style="red"
))
if result.success:
console.print("\n[bold green]✓ Analysis complete. Challenge solved successfully![/bold green]")
else:
console.print("\n[bold yellow]! Analysis complete. No clear flag found yet.[/bold yellow]")
# }}}