Jakub Mozaryn

42 papers Misc 8Journal 15Unranked 18
YearRankTypeTitle / Venue / Authors
2025 J jnl
Robotics Auton. Syst.
Anna Sibilska-Mroziewicz, Jakub Mozaryn, Andrzej W. Ordys, Ayesha Hameed, Ali Soltani Sharif Abadi, Krzysztof Sibilski, Edyta Ladyzynska-Kozdras, Ephrem Worku Anarge
2024 J jnl
Adapt. Behav.
Martina Bacaro, Mikolaj Dziok, Jakub Mozaryn, Paul Schweidler, Joanna Raczaszek-Leonardi
2024 ed.
MIDI
Cezary Biele, Janusz Kacprzyk, Wieslaw Kopec, Jakub Mozaryn, Jan W. Owsinski, Andrzej Romanowski, Marcin Sikorski
2023 J jnl
Sensors
Anna Sibilska-Mroziewicz, Ayesha Hameed, Jakub Mozaryn, Andrzej W. Ordys, Krzysztof Sibilski
2023 Misc conf
MMAR
Bartlomiej Gus, Jakub Mozaryn
2023 J jnl
CoRR
Bartlomiej Gus, Jakub Mozaryn
2023 J jnl
CoRR
Swavik Spiewak, Stephen Ludwick, Glenn Hauer, Jakub Mozaryn
2023 Misc conf
MMAR
Mariusz Pawlicki, Kacper Hulek, Adrian Ostrowski, Jakub Mozaryn
2023 J jnl
CoRR
Kacper Hulek, Mariusz Pawlicki, Adrian Ostrowski, Jakub Mozaryn
2023 conf
MIDI
Jakub Mozaryn, Sebastian Juszczynski, Omar Y. Al-Jarrah
2023 conf
MIDI
Grzegorz Pochwatko, Jakub Mozaryn, Monika Rózanska-Walczuk, Jean-Christophe Giger
2023 conf
MIDI
Anna Sibilska-Mroziewicz, Ewelina Drelich, Ayesha Hameed, Monika Rózanska-Walczuk, Edyta Ladyzynska-Kozdras, Jakub Mozaryn, Krzysztof Kukielka, Ali Soltani Sharif Abadi, Andrzej W. Ordys
2023 conf
MIDI
Alicja Safianska, Jakub Mozaryn
2022 conf
MIDI
Jakub Mozaryn
2022 J jnl
Sensors
Jan Klimaszewski, Krzysztof Wildner, Anna Ostaszewska-Lizewska, Michal Wladzinski, Jakub Mozaryn
2022 conf
DPS
Michal Syfert, Jan Maciej Kóscielny, Jakub Mozaryn, Andrzej W. Ordys, Pawel Wnuk
2022 conf
MIDI
Anna Sibilska-Mroziewicz, Ayesha Hameed, Jakub Mozaryn, Andrzej W. Ordys
2021 J jnl
Complex.
Piotr Kotuszewski, Krzysztof Kukielka, Pawel Kluk, Andrzej W. Ordys, Karol Bienkowski, Jan Maciej Kóscielny, Michal Syfert, Pawel Wnuk, Jakub Mozaryn, Bartlomiej Fajdek
2021 conf
MIDI
Jan Klimaszewski, Lukasz Gruszka, Jakub Mozaryn
2021 conf
ECC
Jan Maciej Kóscielny, Michal Syfert, Andrzej W. Ordys, Pawel Wnuk, Jakub Mozaryn, Bartlomiej Fajdek, Vicenç Puig, Krzysztof Kukielka
2021 J jnl
CoRR
Wieslaw Kopec, Krzysztof Kalinowski, Monika Kornacka, Kinga Skorupska, Julia Paluch, Anna Jaskulska, Grzegorz Pochwatko, Jakub Mozaryn, Pawel Kobylinski, Piotr Gago
2020 conf
KKA
Jakub Mozaryn, Andrzej W. Ordys, Adam Stec, Konrad Bogusz, Omar Y. Al-Jarrah, Carsten Maple
2020 J jnl
Symmetry
Stepán Ozana, Tomas Docekal, Aleksandra Kawala-Sterniuk, Jakub Mozaryn, Milos Schlegel, Akshaya Raj
2019 conf
AUTOMATION
Adrian Chmielewski, Jakub Mozaryn, Piotr Piórkowski, Krzysztof Bogdzinski
2019 J jnl
J. Autom. Mob. Robotics Intell. Syst.
Jakub Mozaryn, Arkadiusz Winnicki, Damian Suski
2019 J jnl
CoRR
Wieslaw Kopec, Marcin Wichrowski, Krzysztof Kalinowski, Anna Jaskulska, Kinga Skorupska, Daniel Cnotkowski, Jakub Tyszka, Agata Popieluch, Anna Voitenkova, Rafal Maslyk, Piotr Gago, Maciej Krzywicki, Monika Kornacka, Cezary Biele, Pawel Kobylinski, Jaroslaw Kowalski, Katarzyna Abramczuk, Aldona Zdrodowska, Grzegorz Pochwatko, Jakub Mozaryn, Krzysztof Marasek
2018 Misc conf
MMAR
Jakub Mozaryn, Arkadiusz Winnicki, Michal Micewicz
2018 conf
AUTOMATION
Adrian Chmielewski, Piotr Piórkowski, Robert Guminski, Krzysztof Bogdzinski, Jakub Mozaryn
2018 conf
AUTOMATION
Adrian Chmielewski, Jakub Mozaryn, Piotr Piórkowski, Robert Guminski, Krzysztof Bogdzinski
2018 conf
AUTOMATION
Adrian Chmielewski, Krzysztof Bogdzinski, Robert Guminski, Przemyslaw Szulim, Piotr Piórkowski, Jakub Mozaryn, Jedrzej Maczak
2017 conf
KKA
Andrzej Jezierski, Jakub Mozaryn, Damian Suski
2017 Misc conf
MMAR
Adrian Chmielewski, Jakub Mozaryn, Maciej Krzeminski
2016 J jnl
J. Autom. Mob. Robotics Intell. Syst.
Nuno Piçarra, Jean-Christophe Giger, Grzegorz Pochwatko, Jakub Mozaryn
2016 Misc conf
MMAR
Witold Kolaj, Jakub Mozaryn, Michal Syfert
2015 J jnl
J. Autom. Mob. Robotics Intell. Syst.
Grzegorz Pochwatko, Jean-Christophe Giger, Monika Rózanska-Walczuk, Justyna Swidrak, Krzysztof Kukielka, Jakub Mozaryn, Nuno Piçarra
2015 J jnl
Robotics Auton. Syst.
Pawel Wawrzynski, Jakub Mozaryn, Jan Klimaszewski
2014 Misc conf
MMAR
Jakub Mozaryn, Jan Klimaszewski, Pawel Kolodziejczyk, Dariusz Swieczkowski-Feiz, Pawel Wawrzynski
2013 Misc conf
MMAR
Pawel Wawrzynski, Jakub Mozaryn, Jan Klimaszewski
2010 conf
ICAISC (2)
Jakub Mozaryn, Jerzy E. Kurek
2010 conf
ICANN (2)
Jakub Mozaryn, Jerzy E. Kurek
2005 conf
ICANN (2)
Jakub Mozaryn, Jerzy E. Kurek
2004 Misc conf
ICAISC
Jakub Mozaryn, Jerzy E. Kurek
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