Oleksandr Husev

57 papers C 19Journal 28Unranked 10
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Ind. Electron.
Parham Mohseni, Oleksandr Husev, Matthias Kasper, Gerald Deboy
2025 J jnl
IEEE Access
Deniss Stepins, Janis Zakis, Aleksandrs Sokolovs, Oleksandr Husev, Ryszard Strzelecki, Rik W. De Doncker
2025 J jnl
CoRR
Hossein Nourollahi Hokmabad, Tala Hemmati Shahsavar, Pedro P. Vergara, Oleksandr Husev, Juri Belikov
2025 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Matiushkin, Oleksandr Husev, Hossein Afshari, Enrique Romero-Cadaval, Carlos Roncero-Clemente
2025 J jnl
Math. Comput. Simul.
Cheikh Elekbir Sidi Lekhel, Rita Mbayed, Oleksandr Velihorskyi, Oleksandr Husev, Eric Monmasson
2025 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Mykola Lukianov, Enrique Romero-Cadaval, Andrzej Kasprowicz, Oleksandr Husev, Ryszard Strzelecki
2024 J jnl
IEEE Trans. Ind. Electron.
Saeed Rahimpour, Oleksandr Husev, Dmitri Vinnikov
2024 J jnl
IEEE Trans. Ind. Electron.
Saeed Pourjafar, Tala Hemmati Shahsavar, Seyed Majid Hashemzadeh, Oleksandr Husev, Oleksandr Matiushkin, Dmitri Vinnikov
2024 J jnl
IEEE Access
Javier Gutiérrez-Escalona, Carlos Roncero-Clemente, Oleksandr Husev, Oleksandr Matiushkin, Frede Blaabjerg
2024 J jnl
IEEE Access
Viktor Shevchenko, Oleksandr Husev, Bohdan Pakhaliuk, Dmitri Vinnikov, Ryszard Strzelecki
2024 C conf
IECON
Javier Gutiérrez-Escalona, Carlos Roncero-Clemente, Oleksandr Husev, Oleksandr Matiushkin, Fermín Barrero-González, Eva González Romera
2023 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Husev, Naser Vosoughi Kurdkandi, Milad Ghavipanjeh Marangalu, Dmitri Vinnikov, Seyed Hossein Hosseini
2023 conf
ISGT EUROPE
Hossein Nourollahi Hokmabad, Oleksandr Husev, Dmitri Vinnikov, Juri Belikov, Eduard Petlenkov
2023 J jnl
IEEE Access
Saeed Rahimpour, Oleksandr Husev, Dmitri Vinnikov, Naser Vosoughi Kurdkandi, Hadi Tarzamni
2023 J jnl
IEEE Access
Javier Gutiérrez-Escalona, Carlos Roncero-Clemente, Eva González Romera, María Isabel Milanés-Montero, Oleksandr Husev, Enrique Romero-Cadaval
2022 C conf
IECON
Javier Gutiérrez-Escalona, Carlos Roncero-Clemente, Oleksandr Husev, V. Fernão Pires, María Isabel Milanés-Montero, Eva González Romera
2022 C conf
IECON
Naser Vosoughi Kurdkandi, Oleksandr Husev, Saeed Rahimpour, Carlos Roncero-Clemente, Oleksandr Matiushkin, Dmitri Vinnikov
2022 J jnl
IEEE Access
Saeed Rahimpour, Hadi Tarzamni, Naser Vosoughi Kurdkandi, Oleksandr Husev, Dmitri Vinnikov, Farzad Tahami
2022 J jnl
IEEE Access
Noman Shabbir, Lauri Kütt, Victor Astapov, Muhammad Jawad, Alo Allik, Oleksandr Husev
2022 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Matiushkin, Oleksandr Husev, José Rodríguez, Héctor A. Young, Indrek Roasto
2022 conf
ISIE
Bohdan Pakhaliuk, Oleksandr Husev, Viktor Shevchenko, Kaspars Kroics, Deniss Stepins, Ryszard Strzelecki
2022 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Husev, Dmitri Vinnikov, Carlos Roncero-Clemente, Frede Blaabjerg, Ryszard Strzelecki
2022 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Husev, Oleksandr Matiushkin, Dmitri Vinnikov, Carlos Roncero-Clemente, Samir Kouro
2021 J jnl
IEEE Access
Nicolás Mayorga, Carlos Roncero-Clemente, Ana M. Llor, Oleksandr Husev
2021 C conf
IECON
Deniss Stepins, Neeraja Kathari, Janis Zakis, Oleksandr Husev, Bohdan Pakhaliuk, Viktor Shevchenko
2021 C conf
IECON
Oleksandr Matiushkin, Dmitri Vinnikov, Oleksandr Husev
2021 J jnl
IEEE Access
Mahdieh Najafzadeh, Roya Ahmadiahangar, Oleksandr Husev, Indrek Roasto, Tanel Jalakas, Andrei Blinov
2021 J jnl
IEEE Access
Hadi Tarzamni, Naser Vosoughi Kurdkandi, Homayon Soltani Gohari, Matti Lehtonen, Oleksandr Husev, Frede Blaabjerg
2020 C conf
IECON
Roya Ahmadiahangar, Oleksandr Husev, Andrei Blinov, Hossein Karami, Argo Rosin
2020 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Husev, Carlos Roncero-Clemente, Elena Makovenko, Sergio Pires Pimentel, Dmitri Vinnikov, João Martins
2020 C conf
IECON
Deniss Stepins, Janis Zakis, Janis Audze, Oleksandr Husev, Bohdan Pakhaliuk, Viktor Shevchenko
2019 J jnl
IEEE Access
Viktor Shevchenko, Oleksandr Husev, Ryszard Strzelecki, Bohdan Pakhaliuk, Nikolai Poliakov, Natalia Strzelecka
2019 C conf
IECON
Oleksandr Husev, Serhii Stepenko, Dmitri Vinnikov, Carlos Roncero-Clemente, Elena Santasheva, Enrique Romero-Cadaval
2019 C conf
IECON
Carlos Roncero-Clemente, Oleksandr Husev, Mercedes Ruiz-Cortés, Enrique Romero-Cadaval, Fermín Barrero-González, Eva González Romera
2019 C conf
IECON
Oleksandr Husev, Sergio Pires Pimentel, Dmitri Vinnikov, Lauri Kütt, José Rodríguez
2018 C conf
IECON
Oleksandr Husev, Oleksandr Matiushkin, Dmitri Vinnikov, Carlos Roncero-Clemente, Enrique Romero-Cadaval, Lauri Kütt
2018 J jnl
IEEE Trans. Ind. Electron.
Carlos Roncero-Clemente, Enrique Romero-Cadaval, Mercedes Ruiz-Cortés, Oleksandr Husev
2018 C conf
IECON
Serhii Stepenko, Oleksandr Husev, Sergio Pires Pimentel, Dmitri Vinnikov, Carlos Roncero-Clemente, Elena Makovenko
2017 conf
DoCEIS
Oleksandr Matiushkin, Oleksandr Husev, Kostiantyn Tytelmaier, Kaspars Kroics, Oleksandr Veligorskyi, Janis Zakis
2017 conf
ISIE
V. Fernão Pires, João F. A. Martins, Carlos Roncero-Clemente, Enrique Romero-Cadaval, Oleksandr Husev
2017 C conf
IECON
Carlos Roncero-Clemente, Serhii Stepenko, Oleksandr Husev, Enrique Romero-Cadaval, Dmitri Vinnikov
2017 J jnl
IEEE Trans. Ind. Electron.
Andrii Chub, Oleksandr Husev, Andrei Blinov, Dmitri Vinnikov
2016 C conf
IECON
Pedro Roncero-Sánchez, Carlos Roncero-Clemente, Enrique Romero-Cadaval, Oleksandr Husev, Elena Makovenko
2016 J jnl
Int. J. Circuit Theory Appl.
Oleksandr Husev, Andrii Chub, Enrique Romero-Cadaval, Carlos Roncero-Clemente, Dmitri Vinnikov
2016 conf
DoCEIS
Elena Makovenko, Oleksandr Husev, Carlos Roncero-Clemente, Enrique Romero-Cadaval
2015 C conf
IECON
Tatiana Shults, Oleksandr Husev, Carlos Roncero-Clemente, Frede Blaabjerg, Ryszard Strzelecki
2015 J jnl
IEEE Trans. Ind. Electron.
Oleksandr Husev, Lisa Liivik, Frede Blaabjerg, Andrii Chub, Dmitri Vinnikov, Indrek Roasto
2015 conf
ICIT
Dmitri Vinnikov, Andrii Chub, Oleksandr Husev, Janis Zakis
2015 conf
ICIT
Carlos Roncero-Clemente, Oleksandr Husev, Enrique Romero-Cadaval, Janis Zakis, Dmitri Vinnikov, María Isabel Milanés-Montero
2014 conf
ISIE
Carlos Roncero-Clemente, Enrique Romero-Cadaval, Oleksandr Husev, Dmitri Vinnikov
2013 C conf
IECON
Oleksandr Husev, Serhii Stepenko, Carlos Roncero-Clemente, Enrique Romero-Cadaval, Ryszard Strzelecki
2013 C conf
IECON
Carlos Roncero-Clemente, Enrique Romero-Cadaval, Oleksandr Husev, Dmitri Vinnikov, Serhii Stepenko
2013 J jnl
IEEE Trans. Ind. Informatics
Indrek Roasto, Dmitri Vinnikov, Janis Zakis, Oleksandr Husev
2013 conf
DoCEIS
Carlos Roncero-Clemente, Serhii Stepenko, Oleksandr Husev, Víctor Miñambres-Marcos, Enrique Romero-Cadaval, Dmitri Vinnikov
2012 conf
DoCEIS
Oleksandr Husev, Andrei Blinov, Dmitri Vinnikov
2012 C conf
IECON
Andrei Blinov, Volodymyr Ivakhno, Volodymyr Zamaruev, Dmitri Vinnikov, Oleksandr Husev
2012 C conf
IECON
Oleksandr Husev, Serhii Stepenko, Carlos Roncero-Clemente, Enrique Romero-Cadaval, Dmitri Vinnikov
redb/extractors/pe_extractors/pe_inconsistency_tests.py
← Index redb/extractors/pe_extractors/pe_inconsistency_tests.py python
import inspect
from redb.ext.spoof_check import (
    Result,
    checksum_test,
    duplicate_test,
    import_count_test,
    linker_test,
)
from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import (
    DotNetInconsistencyTests,
    PEInconsistencyTests,
)
from datetime import datetime, timezone
from typing import Any


class PEInconstistencyTestsExtractor(PEExtractor):
    """Collection of functions to perform features inconsistency tests

    A Test where the result is True means that there is an inconsistency.
    At the moments it runs a series of inconsistency tests on PE metadata from
    - spoof_check
    - pescanner
    - dotnetfile
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
        dotnet=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.dotnet = dotnet if dotnet else None
        self.pe_inconsistency_tests = None
        self.dotnet_inconsistency_tests = None
        self.elastic_index = self.index_prefix + "-pe_inconsistency_tests"

    def tag(self):
        return [Tag.PE_INCONSISTENCY_TESTS.value, Tag.DOTNET_INCONSISTENCY_TESTS.value]

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        tests_performed = False

        # Handle PE rich header tests
        try:
            rich_header = self.pe.parse_rich_header()
            if rich_header:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=checksum_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_duplicate=duplicate_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_linker=linker_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_import_count=import_count_test(self.pe, rich_header) == Result.INVALID,
                )
                tests_performed = True
            else:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=None,
                    test_rich_header_duplicate=None,
                    test_rich_header_linker=None,
                    test_rich_header_import_count=None,
                )
        except Exception as e:
            self.log.error(f"Error processing rich header tests for {self.hash.sha256}: {e}")
            self.pe_inconsistency_tests = None

            # self.export_to_elastic([self.pe_inconsistency_tests])

        # Handle .NET tests
        try:
            if self._check_dotnet():
                if not self.dotnet:
                    self.dotnet, self.error = self._generate_dotnetfile_object()
                if self.error:
                    self.log.error(f"Error generating .NET object {self.hash.sha256}: {self.error}")
                self.dotnet_inconsistency_tests = DotNetInconsistencyTests(
                    test_dotnet_data_dir_hidden=self.dotnet.AntiMetadataAnalysis.is_dotnet_data_directory_hidden,
                    test_dotnet_extra_data=self.dotnet.AntiMetadataAnalysis.has_metadata_table_extra_data,
                    test_dotnet_fake_types=self.dotnet.AntiMetadataAnalysis.has_self_referenced_typeref_entries,
                    test_dotnet_invalid_type_ref=self.dotnet.AntiMetadataAnalysis.has_invalid_typeref_entries,
                    test_dotnet_fake_datastreams=self.dotnet.AntiMetadataAnalysis.has_fake_data_streams,
                    test_dotnet_extra_module_table=self.dotnet.AntiMetadataAnalysis.module_table_has_multiple_rows,
                    test_dotnet_extra_assembly_table=self.dotnet.AntiMetadataAnalysis.assembly_table_has_multiple_rows,
                    test_dotnet_invalid_strings_stream=self.dotnet.AntiMetadataAnalysis.has_invalid_strings_stream_entries,
                    test_dotnet_streams_mixed_case=self.dotnet.AntiMetadataAnalysis.has_mixed_case_stream_names,
                    test_dotnet_method_def_invalid_table=self.dotnet.AntiMetadataAnalysis.has_invalid_methoddef_entries,
                    test_dotnet_max_len_exceeding_strings=self.dotnet.AntiMetadataAnalysis.has_max_len_exceeding_strings,
                )
                tests_performed = True
        except Exception as e:
            self.log.error(f"Error processing .NET tests for {self.hash.sha256}: {e}")
            self.dotnet_inconsistency_tests = None

        # self.export_to_elastic([self.dotnet_inconsistency_tests])

        # If no tests were performed, return False to skip database insertion
        if not tests_performed:
            self.log.info("No inconsistency tests were performed.")
            return False

        return True

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return [self.pe_inconsistency_tests, self.dotnet_inconsistency_tests]
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)

            # For PE tests: if no rich header (all True), store NULL instead
            has_rich_header = any([
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_checksum'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_duplicate'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_linker'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_import_count')
            ])
            
            pe_tests = [
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_checksum,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_duplicate,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_linker,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_import_count,
            ]
            
            # For .NET tests: if not a .NET file, store NULL instead of False
            dotnet_tests = [
                self.dotnet_inconsistency_tests.test_dotnet_data_dir_hidden if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_data if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_types if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_type_ref if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_datastreams if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_module_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_assembly_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_strings_stream if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_streams_mixed_case if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_method_def_invalid_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_max_len_exceeding_strings if self.dotnet_inconsistency_tests else None,
            ]
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                *pe_tests,
                *dotnet_tests,
                current_time
            ]]

            column_names = [
                'sha256', 'md5', 'sha1',
                'test_rich_header_checksum', 'test_rich_header_duplicate', 'test_rich_header_linker', 'test_rich_header_import_count',
                'test_dotnet_data_dir_hidden', 'test_dotnet_extra_data',
                'test_dotnet_fake_types', 'test_dotnet_invalid_type_ref',
                'test_dotnet_fake_datastreams', 'test_dotnet_extra_module_table',
                'test_dotnet_extra_assembly_table', 'test_dotnet_invalid_strings_stream',
                'test_dotnet_streams_mixed_case', 'test_dotnet_method_def_invalid_table',
                'test_dotnet_max_len_exceeding_strings', 'analysis_date'
            ]
            
            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'DateTime64(3, \'UTC\')'
            ]

            if not data:
                return None

            return (data, column_names, column_type_names)

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