Ilkka Norros

52 papers A* 2A 4B 4Journal 33Unranked 9
YearRankTypeTitle / Venue / Authors
2022 J jnl
Queueing Syst. Theory Appl.
Ilkka Norros
2019 J jnl
Data Sci. Eng.
Hannu Reittu, Ilkka Norros, Tomi Räty, Marianna Bolla, Fülöp Bazsó
2017 J jnl
Queueing Syst. Theory Appl.
François Baccelli, Fabien Mathieu, Ilkka Norros
2017 J jnl
CoRR
Hannu Reittu, Fülöp Bazsó, Ilkka Norros
2017 conf
IEEE BigData
Hannu Reittu, Ilkka Norros
2017 J jnl
CoRR
Hannu Reittu, Ilkka Norros, Fülöp Bazsó
2016 J jnl
Comput. Commun.
Andrea Bianco, Robert Bestak, Ilkka Norros
2015 conf
ISWCS
Giancarlo Pastor, Ilkka Norros, Riku Jäntti, Antonio J. Caamaño
2015 J jnl
IEEE/ACM Trans. Netw.
Barlas Oguz, Venkat Anantharam, Ilkka Norros
2014 J jnl
IEEE Trans. Reliab.
Ilkka Norros, Pirkko Kuusela, Jérôme Lapuyade-Lahorgue, Maurizio Naldi, Mika Sirvio
2013 J jnl
CoRR
François Baccelli, Fabien Mathieu, Ilkka Norros, Rémi Varloot
2013 A* conf
INFOCOM
François Baccelli, Fabien Mathieu, Ilkka Norros, Rémi Varloot
2013 conf
DRCN
Pirkko Kuusela, Ilkka Norros
2013 J jnl
Cogn. Technol. Work.
Leena Norros, Ilkka Norros, Marja Liinasuo, Kari Seppänen
2013 J jnl
Reliab. Eng. Syst. Saf.
Piotr Cholda, Eirik Larsen Følstad, Bjarne E. Helvik, Pirkko Kuusela, Maurizio Naldi, Ilkka Norros
2012 conf
Allerton Conference
Barlas Oguz, Venkat Anantharam, Ilkka Norros
2011 conf
ECCE
Leena Norros, Ilkka Norros, Marja Liinasuo, Kari Seppänen
2011 J jnl
Queueing Syst. Theory Appl.
Ilkka Norros, Hannu Reittu, Timo Eirola
2011 J jnl
CoRR
François Baccelli, Fabien Mathieu, Ilkka Norros
2011 J jnl
Telecommun. Syst.
Ilkka Norros, Hannu Flinck
2011 J jnl
CoRR
Barlas Oguz, Venkat Anantharam, Ilkka Norros
2010 A conf
DSN
Pirkko Kuusela, Ilkka Norros
2009 A conf
ITC
Ilkka Norros
2009 conf
VALUETOOLS
Hannu Reittu, Ilkka Norros
2009 J jnl
CoRR
Ilkka Norros, Hannu Reittu, Timo Eirola
2009 conf
NGI
Ilkka Norros
2008 conf
SECURWARE
Ilkka Norros, Pirkko Kuusela, Pekka Savola
2008 J jnl
Internet Math.
Ilkka Norros, Hannu Reittu
2008 J jnl
IEEE Netw.
Ilkka Norros, Hannu Reittu
2008 B conf
WiOpt
Ilkka Norros, Hannu Reittu
2007 J jnl
Comput. Networks
Michel Mandjes, Petteri Mannersalo, Ilkka Norros
2007 J jnl
CoRR
Ilkka Norros, Eero Saksman
2007 A conf
ITC
Ilkka Norros, Balakrishna J. Prabhu, Hannu Reittu
2007 B conf
WiOpt
Hannu Reittu, Ilkka Norros
2004 J jnl
Queueing Syst. Theory Appl.
Petteri Mannersalo, Ilkka Norros, Paavo Salminen
2004 J jnl
Perform. Evaluation
Hannu Reittu, Ilkka Norros
2003 J jnl
IEEE Trans. Signal Process.
Alfred O. Hero III, Ilkka Norros, Athina P. Petropulu, Rudolf H. Riedi
2002 J jnl
Comput. Networks
Petteri Mannersalo, Ilkka Norros
2002 A* conf
INFOCOM
Petteri Mannersalo, Ilkka Norros
2002 B conf
NETWORKING
Ilkka Norros
2002 J jnl
Eur. Trans. Telecommun.
Ron Addie, Petteri Mannersalo, Ilkka Norros
2002 B conf
GLOBECOM
Hannu Reittu, Ilkka Norros
2002 A conf
Internet Measurement Workshop
Jorma Kilpi, Ilkka Norros
2001 J jnl
Queueing Syst. Theory Appl.
Paavo Salminen, Ilkka Norros
1996 J jnl
Telecommun. Syst.
Samuli Aalto, Ilkka Norros, Jorma T. Virtamo, J. L. Berg, E. Smeitink
1995 J jnl
IEEE J. Sel. Areas Commun.
Ilkka Norros
1994 J jnl
Queueing Syst. Theory Appl.
Ilkka Norros
1994 J jnl
Queueing Syst. Theory Appl.
Jorma T. Virtamo, Ilkka Norros
1993 conf
Integrated Broadband Communications
Jorma T. Virtamo, Ilkka Norros
1991 J jnl
IEEE J. Sel. Areas Commun.
Ilkka Norros, James W. Roberts, Alain Simonian, Jorma T. Virtamo
1989 J jnl
Math. Oper. Res.
Elja Arjas, Ilkka Norros
1984 J jnl
Math. Oper. Res.
Elja Arjas, Ilkka Norros
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