Vincent Torre

44 papers A* 5A 2B 1C 1Misc 2Journal 23Unranked 10
YearRankTypeTitle / Venue / Authors
2021 J jnl
J. Chem. Inf. Model.
Jing Xu, Federica Simonelli, Xiaoyun Li, Angelo Spinello, Sara Laporte, Vincent Torre, Alessandra Magistrato
2018 J jnl
PLoS Comput. Biol.
Luisa M. R. Napolitano, Arin Marchesi, Alex Rodriguez, Matteo De March, Silvia Onesti, Alessandro Laio, Vincent Torre
2010 J jnl
Comput. Vis. Image Underst.
Mohammad Reza Daliri, Vincent Torre
2009 J jnl
Comput. Vis. Image Underst.
Mohammad Reza Daliri, Vincent Torre
2009 J jnl
Image Vis. Comput.
Mohammad Reza Daliri, Vincent Torre
2008 J jnl
Pattern Recognit.
Mohammad Reza Daliri, Vincent Torre
2008 conf
ICVGIP
Shripad Kondra, Vincent Torre
2007 conf
ISVC (2)
Mohammad Reza Daliri, Walter Vanzella, Vincent Torre
2006 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Walter Vanzella, Vincent Torre
2006 conf
SSPR/SPR
Mohammad Reza Daliri, Elisabetta Delponte, Alessandro Verri, Vincent Torre
2006 C conf
ICMLA
Mohammad Reza Daliri, Vincent Torre
2006 conf
ISVC (1)
Mohammad Reza Daliri, Vincent Torre
2005 J jnl
IEEE Trans. Biomed. Eng.
Maria Elisabetta Ruaro, Paolo Bonifazi, Vincent Torre
2004 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Felice Andrea Pellegrino, Walter Vanzella, Vincent Torre
2004 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Walter Vanzella, Felice Andrea Pellegrino, Vincent Torre
2002 conf
Biologically Motivated Computer Vision
Felice Andrea Pellegrino, Walter Vanzella, Vincent Torre
2000 J jnl
Biol. Cybern.
Giulietta Pinato, Stefano Battiston, Vincent Torre
2000 J jnl
Biol. Cybern.
Yasuhiko Jimbo, Akio Kawana, Pietro Parodi, Vincent Torre
1999 conf
DEXA Workshop
Pietro Parodi, Rodolfo Brancaleon, F. Venuti, G. Musso, Vincent Torre
1998 B conf
ICONIP
Giulietta Pinato, Stefano Battiston, Vincent Torre
1998 J jnl
IEEE Trans. Robotics Autom.
Andrea Giachetti, Marco Campani, Vincent Torre
1996 conf
ECCV (2)
Andrea Giachetti, Vincent Torre
1996 J jnl
Int. J. Comput. Vis.
Andrea Giachetti, Vincent Torre
1995 Misc conf
ICIAP
Antonio Succi, Vincent Torre
1995 conf
CVRMed
Andrea Giachetti, Guido Gigli, Vincent Torre
1995 Misc conf
ICIAP
Andrea Giachetti, Marco Cappello, Guido Gigli, Vincent Torre
1995 A* conf
ICCV
Andrea Giachetti, Vincent Torre
1994 A conf
IROS
A. Martinengo, Marco Campani, Vincent Torre
1994 A* conf
ICRA
A. Martinengo, Marco Campani, Vincent Torre
1994 J jnl
Artif. Intell.
Pietro Parodi, Vincent Torre
1994 conf
ECCV (1)
Andrea Giachetti, Marco Campani, Vincent Torre
1993 A* conf
ICCV
Pietro Parodi, Vincent Torre
1993 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Enrico De Micheli, Vincent Torre, Sergio Uras
1992 A* conf
ECCV
Paolo Olivieri, Maurizio Gatti, Marco Straforini, Vincent Torre
1992 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Marco Straforini, C. Coelho, Marco Campani, Vincent Torre
1992 J jnl
Int. J. Neural Syst.
Antonio Malisia, Andrea Baghino, Marco Campani, Marco Straforini, Vincent Torre
1990 A* conf
ECCV
Enrico De Micheli, Sergio Uras, Vincent Torre
1990 J jnl
Int. J. Comput. Vis.
Bruno Caprile, Vincent Torre
1989 conf
NATO Neurocomputing
Enrico De Micheli, G. Radonich, Sergio Uras, Vincent Torre
1989 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Enrico De Micheli, Bruno Caprile, P. Ottonello, Vincent Torre
1988 A conf
IROS
E. DeMicheli, Giulio Sandini, Massimo Tistarelli, Vincent Torre
1988 J jnl
Proc. IEEE
Mario Bertero, Tomaso A. Poggio, Vincent Torre
1986 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Vincent Torre, Tomaso A. Poggio
1983 J jnl
IEEE Trans. Syst. Man Cybern.
Vincent Torre, W. Geoffrey Owen, Giulio Sandini
redb/extractors/decompiler/_archive/DecompileGhidra-old.py
← Index redb/extractors/decompiler/_archive/DecompileGhidra-old.py python
from hashlib import sha256
import inspect
from pathlib import Path
import subprocess
import json
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import time

from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import Decompiled
from redb.extractors.extractor import Extractor


class DecompileGhidra(Extractor):
    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, log, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.elastic_index = self.index_prefix + "-ghidra"
        self.ghidra_path = "/opt/ghidra"
        self.java_script_path = (
            self.ghidra_path
            + "/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
        )
        self.decompiled = None
        load_dotenv()
        self.decompiled_folder = os.getenv("DECOMPILED_FOLDER", "/opt/decompiled")
        self.log.debug(f"Decompiled folder: {self.decompiled_folder}")

    def run_command(self, cmd, env=None):
        try:
            self.log.info(f"Starting command: {' '.join(cmd)}")
            start_time = time.time()
            TIMEOUT = 1200  # 20 minutes in seconds
            process = subprocess.Popen(
                cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
            )

            while True:
                output = process.stdout.readline()
                if output:
                    print(output.strip())
                if process.poll() is not None:
                    break
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
            except subprocess.TimeoutExpired:
                process.kill()
                self.log.error(f"Ghidra timed out after {TIMEOUT} seconds")
                # raise subprocess.TimeoutExpired(process.args, TIMEOUT)
                return None
            end_time = time.time()

            self.log.debug(
                f"Command finished. Execution time: {end_time - start_time:.2f} seconds"
            )
            self.log.debug(f"Return code: {process.returncode}")

            if process.returncode != 0:
                self.log.error(f"Error output:\n{stderr}")
                return None
            return stdout
        except Exception as e:
            self.log.error(f"Error running command {' '.join(cmd)}: {e}")
            return None

    def analyze_binary(self):
        self.log.debug(f"Ghidra path: {self.ghidra_path}")
        self.log.debug(f"Binary path: {self.filepath}")
        self.log.debug(f"Java script path: {self.java_script_path}")

        # Check if Java script exists
        if not os.path.exists(self.java_script_path):
            self.log.error(f"Error: Java script not found at {self.java_script_path}")
            return None

        # Set up environment variables
        env = os.environ.copy()
        java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
        env["JAVA_HOME"] = java_home
        env["PATH"] = f"{java_home}/bin:{env['PATH']}"
        env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"
        env["DECOMPILED_FOLDER"] = self.decompiled_folder

        # Print environment variables for debugging
        self.log.debug(f"JAVA_HOME: {env['JAVA_HOME']}")
        self.log.debug(f"PATH: {env['PATH']}")
        self.log.debug(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

        # Check Ghidra installation
        analyzeHeadless_path = f"{self.ghidra_path}/support/analyzeHeadless"
        self.log.debug(
            f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}"
        )

        # Create a temporary project directory
        project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
        os.makedirs(project_path, exist_ok=True)
        self.log.debug(f"Created temporary project path: {project_path}")
        output_file = ""

        try:
            # Run Ghidra's headless analyzer
            analyze_cmd = [
                analyzeHeadless_path,
                project_path,
                "TempProject",
                "-import",
                self.filepath,
                "-postScript",
                self.java_script_path,
                self.sha256,
                "-deleteProject",
            ]

            result = self.run_command(analyze_cmd, env=env)
            if result is None:
                return None

            # Read the output JSON file
            output_file = os.path.join(
                self.decompiled_folder, self.sha256 + "-decompiled.json"
            )
            if os.path.exists(output_file):
                with open(output_file, "r") as f:
                    functions = json.load(f)
                return functions
            else:
                self.log.error(
                    f"Output file {output_file} not found. Ghidra analysis may have failed."
                )
                return None
        finally:
            # Clean up
            if os.path.exists(project_path):
                shutil.rmtree(project_path)
                self.log.debug(f"Deleted temporary project path: {project_path}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            functions = self.analyze_binary()

            if functions:
                self.log.info(f"Extracted functions from {self.filepath}:")
                for func in functions:
                    id = sha256(func["address"].encode()).hexdigest()
                    self.decompiled = Decompiled(
                        _id=id,
                        decompiled_function_name=func["name"],
                        decompiled_function_address=func["address"],
                        decompiled_function=func["decompiled"],
                    )
                    self.export_to_elastic([self.decompiled])
            else:
                self.log.error("No decompiled functions extracted.")
            return True
        except Exception as e:
            self.log.error(f"Error extracting decompiled information: {e}")
            return None

    def tag(self):
        return Tag.DECOMPILED.value