#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2026 Open-IOV contributors """ Create Ghidra project for GSP firmware analysis. Usage: python3 create_gsp_project.py """ import sys import os import subprocess import shutil def create_ghidra_project(firmware_path, project_dir, project_name): """Create a Ghidra project and import the GSP firmware.""" ghidra_path = "/snap/bin/ghidra" analyze_headless = "/snap/ghidra/47/ghidra/support/analyzeHeadless" if not os.path.exists(analyze_headless): analyze_headless = "/opt/ghidra/support/analyzeHeadless" if not os.path.exists(analyze_headless): print("ERROR: Ghidra analyzeHeadless not found") sys.exit(1) # Create project directory os.makedirs(project_dir, exist_ok=True) # Import the firmware binary cmd = [ analyze_headless, project_dir, project_name, "-import", firmware_path, "-processor", "RISCV:LE:64:default", "-cspec", "gcc", "-overwrite", "-scriptPath", os.path.join(project_dir, "scripts"), "-postScript", "extract_fwimage.py" ] print(f"Running: {' '.join(cmd)}") result = subprocess.run(cmd, capture_output=True, text=True) print(result.stdout) if result.stderr: print(result.stderr, file=sys.stderr) return result.returncode == 0 def main(): if len(sys.argv) < 4: print("Usage: create_gsp_project.py ") sys.exit(1) firmware_path = sys.argv[1] project_dir = sys.argv[2] project_name = sys.argv[3] if not os.path.exists(firmware_path): print(f"ERROR: Firmware not found: {firmware_path}") sys.exit(1) success = create_ghidra_project(firmware_path, project_dir, project_name) sys.exit(0 if success else 1) if __name__ == "__main__": main()