Octavian Prostean

67 papers C 2Misc 34Journal 14Unranked 17
YearRankTypeTitle / Venue / Authors
2024 Misc conf
SACI
Cezara-Liliana Rat, Octavian Prostean, Catalin Ichim-Burlacu
2023 Misc conf
SACI
Ioan Filip, Octavian Prostean, Iosif Szeidert, Dorin Bordeasu, Cristian Vasar
2022 Misc conf
SACI
Cezara-Liliana Rat, Octavian Prostean, Ioan Filip, Catalin Ichim-Burlacu
2022 Misc conf
SACI
Dorin Bordeasu, Octavian Prostean, Cristian Vasar, Ali Debes
2020 Misc conf
SACI
Ioan Filip, Cristian Vasar, Iosif Szeidert, Octavian Prostean
2020 J jnl
J. Sens. Actuator Networks
Madalin-Dorin Pop, Octavian Prostean, Gabriela Prostean
2020 J jnl
Sensors
Madalin-Dorin Pop, Octavian Prostean, Tudor-Mihai David, Gabriela Prostean
2020 Misc conf
SACI
Dan Ungureanu-Anghel, Raul Robu, Octavian Prostean
2020 conf
GOL
Madalin-Dorin Pop, Octavian Prostean, Gabriela Prostean
2019 Misc conf
SACI
Iosif Szeidert, Ioan Filip, Octavian Prostean, Cristian Vasar
2019 Misc conf
SACI
Cristian Vasar, Octavian Prostean, Ioan Filip, Iosif Szeidert
2019 conf
ICFNDS
Madalin-Dorin Pop, Octavian Prostean, Gabriela Prostean
2019 Misc conf
SACI
Cezara Rat, Octavian Prostean, Ioan Filip
2019 J jnl
Eur. J. Control
Ioan Filip, Cristian Vasar, Iosif Szeidert, Octavian Prostean
2018 J jnl
CoRR
Ioan Filip, Daniel Curiac, Octavian Prostean, Iosif Szeidert
2018 Misc conf
SACI
Iosif Szeidert, Ioan Filip, Octavian Prostean, Cristian Vasar
2018 J jnl
CoRR
Iosif Szeidert, Ioan Filip, Octavian Prostean, Cristian Vasar
2018 J jnl
CoRR
Ioan Filip, Octavian Prostean, Cristian Vasar, Iosif Szeidert
2018 J jnl
CoRR
Iosif Szeidert, Octavian Prostean, Ioan Filip, Cristian Vasar
2018 J jnl
CoRR
Iosif Szeidert, Octavian Prostean, Ioan Filip, Nicolae Budisan
2018 J jnl
CoRR
Cristian Vasar, Octavian Prostean, Ioan Filip, Iosif Szeidert
2018 J jnl
Trans. Comput. Collect. Intell.
Loredana Ghiormez, Octavian Prostean, Manuela Panoiu, Caius Panoiu
2018 J jnl
CoRR
Octavian Prostean, Iosif Szeidert, Nicolae Budisan, Gabriela Prostean, Cristian Vasar
2018 Misc conf
SACI
Noemi-Clara Rohatinovici, Octavian Prostean, Valentina Emilia Balas
2018 conf
SOFA (1)
Cezara-Liliana Rat, Octavian Prostean, Ioan Filip, Cristian Vasar
2018 J jnl
CoRR
Gabriela Prostean, Octavian Prostean, Iosif Szeidert, Ioan Filip
2018 J jnl
CoRR
Cristian Vasar, Octavian Prostean, Ioan Filip, Iosif Szeidert
2018 Misc conf
SACI
Cristian Vasar, Octavian Prostean, Ioan Filip, Iosif Szeidert
2016 Misc conf
SACI
Iosif Szeidert, Ioan Filip, Cristian Vasar, Octavian Prostean
2016 conf
SOFA (2)
Loredana Ghiormez, Octavian Prostean, Ioan Filip, Manuela Panoiu
2016 conf
ICCCI (1)
Loredana Ghiormez, Octavian Prostean, Manuela Panoiu, Caius Panoiu
2016 conf
SOFA (1)
Ioan Filip, Iosif Szeidert, Octavian Prostean, Cristian Vasar
2015 Misc conf
SACI
Loredana Ghiormez, Octavian Prostean
2015 Misc conf
SACI
Gelu-Ovidiu Tirian, Octavian Prostean, Ioan Filip, Cezara Rat
2015 Misc conf
SACI
Iosif Szeidert, Ioan Filip, Octavian Prostean, Cristian Vasar
2014 Misc conf
SACI
Radu Boraci, Octavian Prostean, Nicolae Budisan, Cristian Vasar
2014 J jnl
Comput. Appl. Eng. Educ.
Ana Daniela Cristea, Octavian Prostean, Thomas Muschalik, Ovidiu Tirian
2014 conf
SOFA (2)
Dan Ungureanu-Anghel, Octavian Prostean, Ioan Filip, Mihai Popescu
2014 conf
SOFA (2)
Ioan Filip, Iosif Szeidert, Octavian Prostean
2014 conf
SOFA (2)
Cristian Vasar, Marius Babescu, Doru-Ionut Petrescu, Octavian Prostean, Radu Boraci
2013 conf
TSP
Calin Cirstea, Octavian Prostean, Cosmin Cirstea
2013 conf
TSP
Calin Cirstea, Octavian Prostean, Cosmin Cirstea
2013 Misc conf
SACI
Loredana Ghiormez, Octavian Prostean
2013 Misc conf
SACI
Cosmin Koch-Ciobotaru, Radu Boraci, Octavian Prostean, Iosif Szeidert
2012 Misc conf
SACI
Alina Madalina Lonea, Daniela E. Popescu, Octavian Prostean
2012 Misc conf
SOFA
Alina Madalina Lonea, Daniela Elena Popescu, Octavian Prostean, Huaglory Tianfield
2012 Misc conf
SOFA
Ovidiu Horia Gana, Octavian Prostean, Marius Babescu
2012 Misc conf
SACI
Ovidiu Horia Gana, Octavian Prostean, Cristian Vasar, Marius Babescu
2012 Misc conf
SACI
Emanuel Ciprian Sasu, Octavian Prostean
2012 Misc conf
SACI
Emanuel Ciprian Sasu, Octavian Prostean
2012 Misc conf
SOFA
Emanuel Ciprian Sasu, Octavian Prostean
2011 conf
EUROCON
Doru Vatau, Flavius Dan Surianu, Sorin Musuroi, Flaviu-Mihai Frigura-Iliasa, Octavian Prostean
2011 Misc conf
SACI
Radu Boraci, Cosmin Koch-Ciobotaru, Octavian Prostean, Nicolae Budisan
2011 Misc conf
SACI
Cosmin Koch-Ciobotaru, Radu Boraci, Octavian Prostean, Nicolae Budisan
2011 conf
EUROCON
Ioan Filip, Octavian Prostean, Dan Ionescu, Cristian Vasar, Iosif Szeidert
2009 conf
ICAT
Cristian Vasar, Octavian Prostean, Ioan Filip, Raul Robu, Dan Popescu
2009 Misc conf
SACI
Gelu-Ovidiu Tirian, Octavian Prostean, Ioan Filip
2009 Misc conf
SACI
Ana Daniela Cristea, Octavian Prostean
2009 Misc conf
SACI
Emanuel Ciprian Sasu, Octavian Prostean, Voicu Groza
2009 Misc conf
SACI
Doru Paunescu, Marius Babescu, Octavian Prostean, Iosif Szeidert
2008 conf
VECIMS
Mircea Trifan, Bogdan Ionescu, Dan Ionescu, Octavian Prostean, Gabriela Prostean
2007 Misc conf
SACI
Dan Ungureanu-Anghel, Octavian Prostean
2007 Misc conf
SACI
Nicolae Budisan, Ioan Filip, Octavian Prostean, Iosif Szeidert, Lucian Mihet-Popa
2007 C conf
ETFA
Lucian Mihet-Popa, Octavian Prostean, Ioan Filip, Iosif Szeidert, Cristian Vasar
2006 C conf
ETFA
Ioan Filip, Octavian Prostean, Iosif Szeidert, Cristian Vasar, Gabriela Prostean
2003 conf
Modelling, Identification and Control
Ioan Filip, Octavian Prostean, Iosif Szeidert, Cristian Vasar
1999 conf
Fuzzy Days
Ioan Filip, Octavian Prostean, Daniel Curiac
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOExport


class MachOExportExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_exports"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'UInt32', 'Array(Nullable(String))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_exports"