Natarajan Sriraam

38 papers C 2Journal 34Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Multim. Tools Appl.
Natarajan Sriraam, Mohammed Sinad, Suresh Seshadri, Sudarshan Suresh
2025 J jnl
IEEE Access
S. Malathi, A. Shenbagavalli, Natarajan Sriraam
2025 J jnl
Artif. Intell. Rev.
Natarajan Sriraam, Babu Chinta, Suresh Seshadri, Sudarshan Suresh
2024 C conf
TENCON
Natarajan Sriraam, Babu Chinta, Suresh Seshadri, Sudarshan Suresh
2024 C conf
TENCON
Natarajan Sriraam, B. R. Purnima, Kiran D, KRV Subramanian, Gayathri Devi HJ
2024 J jnl
Multim. Tools Appl.
Natarajan Sriraam, Avvaru Srinivasulu
2023 J jnl
Medical Biol. Eng. Comput.
Natarajan Sriraam, Punyaprabha V, Sushma TV, Suresh S
2021 J jnl
Int. J. E Health Medical Commun.
Basavaraj Hiremath, Natarajan Sriraam, B. R. Purnima, Nithin N. S., Suresh Babu Venkatasamy, Megha Narayanan
2021 J jnl
Int. J. E Health Medical Commun.
Natarajan Sriraam
2020 J jnl
Neurocomputing
Shivarudhrappa Raghu, Natarajan Sriraam, Erik D. Gommer, Danny M. W. Hilkman, Yasin Temel, Shyam Vasudeva Rao, Pieter Leonard Kubben
2020 J jnl
Neural Comput. Appl.
Shivarudhrappa Raghu, Natarajan Sriraam, Shyam Vasudeva Rao, Alangar Sathyaranjan Hegde, Pieter Leonard Kubben
2020 J jnl
Neural Networks
Shivarudhrappa Raghu, Natarajan Sriraam, Yasin Temel, Shyam Vasudeva Rao, Pieter Leonard Kubben
2019 conf
EMBC
Shivarudhrappa Raghu, Natarajan Sriraam, Yasin Temel, Shyam Vasudeva Rao, Pieter Leonard Kubben
2019 J jnl
Expert Syst. Appl.
Shivarudhrappa Raghu, Natarajan Sriraam, Alangar Sathyaranjan Hegde, Pieter Leonard Kubben
2019 J jnl
Comput. Biol. Medicine
Shivarudhrappa Raghu, Natarajan Sriraam, Yasin Temel, Shyam Vasudeva Rao, Alangar Satyaranjandas Hegde, Pieter Leonard Kubben
2018 J jnl
IEEE Trans. Biomed. Eng.
Shivarudhrappa Raghu, Natarajan Sriraam, Govindaiah Pradeep Kumar, Alangar Satyaranjandas Hegde
2018 J jnl
Brain Informatics
Natarajan Sriraam, Shivarudhrappa Raghu, Kadeeja Tamanna, Leena Narayan, Mehraj Khanum, Alangar Satyaranjandas Hegde, Anjani Bhushan Kumar
2018 J jnl
Expert Syst. Appl.
Shivarudhrappa Raghu, Natarajan Sriraam
2017 J jnl
J. Medical Syst.
Natarajan Sriraam, Shivarudhrappa Raghu
2017 J jnl
Biomed. Signal Process. Control.
T. K. Padma Shri, Natarajan Sriraam
2017 J jnl
Expert Syst. Appl.
Shivarudhrappa Raghu, Natarajan Sriraam
2017 J jnl
Brain Informatics
T. K. Padma Shri, Natarajan Sriraam
2016 J jnl
Appl. Soft Comput.
T. K. Padma Shri, Natarajan Sriraam
2012 J jnl
Biomed. Signal Process. Control.
Natarajan Sriraam
2012 J jnl
Expert Syst. Appl.
Natarajan Sriraam
2012 J jnl
J. Medical Syst.
R. Arvind, B. Karthik, Natarajan Sriraam
2011 J jnl
Digit. Signal Process.
Natarajan Sriraam, R. Shyamsunder
2010 J jnl
Expert Syst. Appl.
Pravin Kumar Subbaraj, Natarajan Sriraam, Prabhu G. Benakop, B. C. Jinaga
2009 J jnl
J. Medical Syst.
Natarajan Sriraam, J. Roopa, M. Saranya, M. Dhanalakshmi
2008 J jnl
IEEE Trans. Inf. Technol. Biomed.
Natarajan Sriraam, Chikkannan Eswaran
2008 J jnl
IEEE Trans. Inf. Technol. Biomed.
Natarajan Sriraam, Chikkannan Eswaran
2007 J jnl
J. Medical Syst.
K. Basu, Natarajan Sriraam, R. J. A. Richard
2007 J jnl
IEEE Trans. Inf. Technol. Biomed.
V. Srinivasan, Chikkannan Eswaran, Natarajan Sriraam
2007 J jnl
J. Medical Syst.
R. Shyamsunder, Chikkannan Eswaran, Natarajan Sriraam
2006 J jnl
J. Medical Syst.
Natarajan Sriraam, Chikkannan Eswaran
2006 J jnl
Digit. Signal Process.
B. Ramakrishnan, Natarajan Sriraam
2006 J jnl
Comput. Biol. Medicine
R. Shyamsunder, Chikkannan Eswaran, Natarajan Sriraam
2003 conf
CITA
Natarajan Sriraam, Chikkannan Eswaran
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