Raffaele De Rose

39 papers C 3Journal 21Unranked 15
YearRankTypeTitle / Venue / Authors
2025 C conf
ISCAS
Massimo Vatalaro, Raffaele De Rose, Vincenzo Maccaronio, Marco Lanuzza, Felice Crupi
2025 conf
ICICDT
Tommaso Zanotti, Erika Borellini, Massimo Vatalaro, Vincenzo Maccaronio, Paolo Pavan, Raffaele De Rose, Francesco Maria Puglisi
2025 conf
ICICDT
Massimo Vatalaro, Vincenzo Maccaronio, Tommaso Zanotti, Erika Borellini, Felice Crupi, Francesco Maria Puglisi, Raffaele De Rose
2025 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Massimo Vatalaro, Raffaele De Rose, Vincenzo Maccaronio, Marco Lanuzza, Felice Crupi
2025 J jnl
IEEE Trans. Dependable Secur. Comput.
Antonino Rullo, Carmelo Felicetti, Massimo Vatalaro, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Domenico Saccà
2023 J jnl
CoRR
Massimo Vatalaro, H. Neill, F. Gity, Paolo Magnone, Vincenzo Maccaronio, C. Márquez, J. C. Galdon, F. Gamiz, Felice Crupi, P. Hurley, Raffaele De Rose
2023 J jnl
IEEE Access
Tatiana Moposita, Esteban Garzón, Raffaele De Rose, Felice Crupi, Andrei Vladimirescu, Lionel Trojman, Marco Lanuzza
2023 J jnl
IEEE Access
Luigi Fassio, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2022 J jnl
CoRR
Esteban Garzón, Raffaele De Rose, Felice Crupi, Lionel Trojman, Adam Teman, Marco Lanuzza
2022 J jnl
CoRR
Raffaele De Rose, Tommaso Zanotti, Francesco Maria Puglisi, Felice Crupi, Paolo Pavan, Marco Lanuzza
2022 conf
ICECS 2022
Massimo Vatalaro, Raffaele De Rose, Marco Lanuzza, Felice Crupi
2022 J jnl
IEEE J. Solid State Circuits
Massimo Vatalaro, Raffaele De Rose, Marco Lanuzza, Felice Crupi
2021 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Luigi Fassio, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2021 conf
ESSCIRC
Luigi Fassio, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2021 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Luigi Fassio, Francesco Settino, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2021 J jnl
IEEE J. Solid State Circuits
Luigi Fassio, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2020 conf
VLSI Circuits
Luigi Fassio, Longyang Lin, Raffaele De Rose, Marco Lanuzza, Felice Crupi, Massimo Alioto
2020 J jnl
Integr.
Esteban Garzón, Raffaele De Rose, Felice Crupi, Lionel Trojman, Giovanni Finocchio, Mario Carpentieri, Marco Lanuzza
2019 conf
ICECS
Marco Lanuzza, Raffaele De Rose, Felice Crupi, Massimo Alioto
2019 conf
ICECS
Esteban Garzón, Raffaele De Rose, Felice Crupi, Marco Lanuzza
2019 J jnl
Integr.
Raffaele De Rose, Paul Romero, Marco Lanuzza
2019 conf
ASICON
Marco Lanuzza, Raffaele De Rose, Esteban Garzón, Felice Crupi
2019 conf
SMACD
Esteban Garzón, Raffaele De Rose, Felice Crupi, Lionel Trojman, Giovanni Finocchio, Mario Carpentieri, Marco Lanuzza
2018 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Raffaele De Rose, Marco Lanuzza, Felice Crupi, Giulio Siracusano, Riccardo Tomasello, Giovanni Finocchio, Mario Carpentieri, Massimo Alioto
2018 J jnl
Int. J. Circuit Theory Appl.
Felice Crupi, Raffaele De Rose, Maksym Paliy, Marco Lanuzza, Mattia Perna, Giuseppe Iannaccone
2018 conf
ICICDT
Raffaele De Rose, Felice Crupi, Maksym Paliy, Marco Lanuzza, Giuseppe Iannaccone
2018 conf
RTSI
Noemi Guerra, Raffaele De Rose, Marco Guevara, Paul Procel, Marco Lanuzza, Felice Crupi
2017 J jnl
Int. J. Circuit Theory Appl.
Raffaele De Rose, Felice Crupi, Marco Lanuzza, Domenico Albano
2017 C conf
ISCAS
Raffaele De Rose, Marco Lanuzza, Felice Crupi, Giulio Siracusano, Riccardo Tomasello, Giovanni Finocchio, Mario Carpentieri, Massimo Alioto
2017 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Marco Lanuzza, Felice Crupi, Sandro Rao, Raffaele De Rose, Sebastiano Strangio, Giuseppe Iannaccone
2017 conf
ECCTD
Raffaele De Rose, Domenico Albano, Felice Crupi, Marco Lanuzza
2017 conf
SMACD
Raffaele De Rose, Greta Carangelo, Marco Lanuzza, Felice Crupi, Giovanni Finocchio, Mario Carpentieri
2017 J jnl
Int. J. Circuit Theory Appl.
Marco Lanuzza, Felice Crupi, Sandro Rao, Raffaele De Rose, Giuseppe Iannaccone
2014 C conf
PRO-VE
Raffaele De Rose, Carmelo Felicetti, Cinzia Raso, Alberto Michele Felicetti, Salvatore Ammirato
2014 J jnl
Circuits Syst. Signal Process.
Raffaele De Rose, Marco Lanuzza, Fabio Frustaci, Sohan Purohit
2012 J jnl
Microelectron. Reliab.
Raffaele De Rose, Antonio Malomo, Paolo Magnone, Felice Crupi, Giorgio Cellere, Marco Martire, Diego Tonini, Enrico Sangiorgi
2012 J jnl
Microelectron. Reliab.
Marco Lanuzza, Raffaele De Rose, Fabio Frustaci, Stefania Perri, Pasquale Corsonello
2010 conf
ISVLSI
Marco Lanuzza, Raffaele De Rose, Fabio Frustaci, Stefania Perri, Pasquale Corsonello
2010 conf
PATMOS
Marco Lanuzza, Raffaele De Rose, Fabio Frustaci, Stefania Perri, Pasquale Corsonello
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