Olga Cherednichenko

53 papers B 1C 1Misc 1Journal 3Unranked 40
YearRankTypeTitle / Venue / Authors
2025 conf
CLW-CoLInS
Olga Cherednichenko, Glib Tereshchenko, Iryna Kyrychenko, Oleksandr Shanidze, Anzhelika Vorzhevitina
2025 conf
ISW-CoLInS
Olga Cherednichenko, Dmytro Sytnikov, Nazarii Romankiv, Nataliia Sharonova, Polina Sytnikova
2025 conf
AICS-CoLInS
Olga Cherednichenko, Maryna Vovk, Nataliia Sharonova, Anzhelika Vorzhevitina
2025 conf
CLW-CoLInS
Natalia Grabar, Olena Yurchenko, Olga Cherednichenko, Arsenii Lukashevskyi
2025 ed.
ISW-CoLInS
Olga Cherednichenko, Vasyl Lytvyn, Victoria Vysotska, Agnieszka Kowalska-Styczen, Yevgeniy V. Bodyanskiy
2025 ed.
AICS-CoLInS
Olga Cherednichenko, Nina Khairova, Lyubomyr Chyrun, Vasyl Lytvyn, Yevgeniy V. Bodyanskiy
2024 conf
COLINS (3)
Olga Cherednichenko, Iryna Kyrychenko, Glib Tereshchenko, Denys Miand, Serhii Pylypenko
2024 conf
COLINS (2)
Olga Cherednichenko, Iryna Kyrychenko, Kostiantyn Nechvolod, Kirill Smelyakov, Oleksandr Dolhanenko
2024 conf
ADBIS (Short Papers)
Olga Cherednichenko, Oleksandr Sutiahin
2024 conf
ICSBT
Olga Cherednichenko, Lubomir Nebesky, Marián Kovác
2024 conf
COLINS (1)
Olga Cherednichenko, Dmytro Chernyshov, Dmytro Sytnikov, Polina Sytnikova
2024 J jnl
CoRR
Olga Cherednichenko, Dmytro Chernyshov, Dmytro Sytnikov, Polina Sytnikova
2024 conf
COLINS (1)
Olga Cherednichenko, Nataliia Sharonova, Ganna Pliekhova, Nadiia Babkova
2024 conf
COLINS (4)
Olga Cherednichenko, Olha Yanholenko, Antonina Badan, Nataliia Onishchenko, Nunu Akopiants
2024 conf
COLINS (4)
Olga Cherednichenko, Dmytro Sytnikov, Nazarii Romankiv, Nataliia Sharonova, Polina Sytnikova
2023 J jnl
CoRR
Olga Cherednichenko, Muhammad Fahad, Jérôme Darmont, Cécile Favre
2023 conf
MoMLeT+DS
Olga Cherednichenko, Muhammad Fahad
2023 J jnl
CoRR
Olga Cherednichenko, Muhammad Fahad
2023 ed.
COLINS (3)
Olga Cherednichenko, Lyubomyr Chyrun, Victoria Vysotska
2023 conf
ADBIS (Short Papers)
Olga Cherednichenko, Muhammad Fahad
2023 conf
COLINS (3)
Olga Cherednichenko, Muhammad Fahad, Jérôme Darmont, Cécile Favre
2023 conf
COLINS (2)
Olena Yurchenko, Olga Cherednichenko, Alina Trofimova-Herman, Yevhen Kupriianov
2022 ed.
COLINS
Vasyl Lytvyn, Natalia Sharonova, Izabela Jonek-Kowalska, Agnieszka Kowalska-Styczen, Victoria Vysotska, Yevhen Kupriianov, Olga Kanishcheva, Olga Cherednichenko, Thierry Hamon, Natalia Grabar
2021 conf
COLINS
Olga Cherednichenko, Maryna Vovk, Oksana Ivashchenko, Alenka Baggia, Nataliia Stratiienko
2021 conf
IntelITSIS
Yaroslav Hnatchuk, Alina Hnatchuk, Maryan Pityn, Ivan Hlukhov, Olga Cherednichenko
2021 conf
IntelITSIS
Vyacheslav Repeta, Valeriy Zhydetskyy, Olga Cherednichenko, Ihor Liakh
2021 conf
ITPM
Olga Cherednichenko, Oleksandr Matveiev, Olha Yanholenko, Rositsa Maneva
2021 ed.
COLINS
Natalia Sharonova, Vasyl Lytvyn, Olga Cherednichenko, Yevhen Kupriianov, Olga Kanishcheva, Thierry Hamon, Natalia Grabar, Victoria Vysotska, Agnieszka Kowalska-Styczen, Izabela Jonek-Kowalska
2021 conf
COLINS
Olga Cherednichenko, Olga Kanishcheva
2021 conf
MoMLeT+DS
Oleksandr Matveiev, Anastasiia Zubenko, Dmitry Yevtushenko, Olga Cherednichenko
2020 conf
IntelITSIS
Olha Yanholenko, Olga Cherednichenko, Olena Yakovleva, Denis Arkatov
2020 conf
COLINS
Irina Gruzdo, Iryna Kyrychenko, Glib Tereshchenko, Olga Cherednichenko
2020 conf
COLINS
Olga Cherednichenko, Olga Kanishcheva, Olena Yakovleva, Denis Arkatov
2020 conf
MoMLeT+DS
Olga Cherednichenko, Olha Yanholenko, Olga Kanishcheva
2020 conf
ICTERI Workshops
Olga Cherednichenko, Maryna Vovk, Oksana Ivashchenko
2020 ed.
COLINS
Vasyl Lytvyn, Victoria Vysotska, Thierry Hamon, Natalia Grabar, Natalia Sharonova, Olga Cherednichenko, Olga Kanishcheva
2020 conf
COLINS
Olga Cherednichenko, Olha Yanholenko, Maryna Vovk, Natalia Sharonova
2019 conf
DCSMart
Olga Kanishcheva, Olga Cherednichenko, Natalia Sharonova
2019 ed.
COLINS
Vasyl Lytvyn, Natalia Sharonova, Thierry Hamon, Olga Cherednichenko, Natalia Grabar, Agnieszka Kowalska-Styczen, Victoria Vysotska
2018 C conf
IDDM
Olga Cherednichenko, Nadiia Babkova, Olga Kanishcheva
2018 conf
COLINS
Natalia Sharonova, Anastasiia Doroshenko, Olga Cherednichenko
2018 conf
COLINS
Olga Cherednichenko, Maryna Vovk, Olga Kanishcheva, Mikhail Godlevskyi
2018 conf
SIGSAND/PLAIS
Olga Cherednichenko, Maryna Vovk, Olga Kanishcheva, Mikhail Godlevskyi
2015 conf
SIGSAND
Olga Cherednichenko, Olha Yanholenko
2014 conf
SIGSAND
Olga Cherednichenko, Olha Yanholenko, Olena Iakovleva, Oleksii Kustov
2013 B conf
CSEDU
Olga Cherednichenko, Olha Yanholenko, Iryna Liutenko, Olena Iakovleva
2012 Misc conf
ICTERI
Olga Cherednichenko, Olga Yangolenko, Iryna Liutenko
2012 conf
UNISCON
Marina Grinchenko, Olga Cherednichenko, Igor Babych
2012 conf
CSEDU (2)
Olga Cherednichenko, Olga Yangolenko
2012 conf
UNISCON
Karina Melnik, Olga Cherednichenko, Vitaliy Glushko
2012 conf
UNISCON
Olga Cherednichenko, Olga Yangolenko
2007 conf
ISTA
Olga Cherednichenko, Dmytro Kuklenko, Sergiy Zlatkin
2006 conf
ISTA
Olga Cherednichenko, Dmytro Kuklenko, Sergiy Zlatkin
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
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 MachODylib


class MachODylibExtractor(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_dylibs"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {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 dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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