Omer San

72 papers Journal 71Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Muhammad Abid, Omer San
2026 J jnl
CoRR
Mrigank Dhingra, Omer San
2026 J jnl
Nat. Comput. Sci.
Omer San, Adil Rasheed, Eda Bozdemir, Jun Deng
2025 J jnl
CoRR
Arth Sojitra, Mrigank Dhingra, Omer San
2025 J jnl
CoRR
Adil Rasheed, Oscar Ravik, Omer San
2025 J jnl
CoRR
Adil Rasheed, Oscar Ravik, Omer San
2025 J jnl
CoRR
Mrigank Dhingra, Romit Maulik, Adil Rasheed, Omer San
2025 J jnl
CoRR
Arth Sojitra, Omer San
2025 J jnl
CoRR
Muhammad Abid, Omer San
2025 J jnl
J. Data-centric Mach. Learn. Res.
Pu Ren, N. Benjamin Erichson, Junyi Guo, Shashank Subramanian, Omer San, Zarija Lukic, Michael W. Mahoney
2024 J jnl
CoRR
Annalisa Quaini, Omer San, Alessandro Veneziani, Traian Iliescu
2024 J jnl
CoRR
Adil Rasheed, Florian Stadtmann, Eivind Fonn, Mandar V. Tabib, Vasileios Tsiolakis, Balram Panjwani, Kjetil André Johannessen, Trond Kvamsdal, Omer San, John Olav Giæver Tande, Idar Barstad, Tore Christiansen, Elling Rishoff, Lars Frøyd, Tore Rasmussen
2024 J jnl
Appl. Soft Comput.
Sondre Sørbø, Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2024 J jnl
Eng. Appl. Artif. Intell.
Jacob Wulff Wold, Florian Stadtmann, Adil Rasheed, Mandar V. Tabib, Omer San, Jan-Tore Horn
2023 J jnl
IEEE Access
Elias Mohammed Elfarri, Adil Rasheed, Omer San
2023 J jnl
IEEE Access
Florian Stadtmann, Adil Rasheed, Trond Kvamsdal, Kjetil André Johannessen, Omer San, Konstanze Kölle, John Olav Giæver Tande, Idar Barstad, Alexis Benhamou, Thomas Brathaug, Tore Christiansen, Anouk-Letizia Firle, Alexander Fjeldly, Lars Frøyd, Alexander Gleim, Alexander Høiberget, Catherine Meissner, Guttorm Nygård, Jørgen Olsen, Håvard Paulshus, Tore Rasmussen, Elling Rishoff, Francesco Scibilia, John Olav Skogås
2023 J jnl
CoRR
Florian Stadtmann, Adil Rasheed, Trond Kvamsdal, Kjetil André Johannessen, Omer San, Konstanze Kölle, John Olav Giæver Tande, Idar Barstad, Alexis Benhamou, Thomas Brathaug, Tore Christiansen, Anouk-Letizia Firle, Alexander Fjeldly, Lars Frøyd, Alexander Gleim, Alexander Høiberget, Catherine Meissner, Guttorm Nygård, Jørgen Olsen, Håvard Paulshus, Tore Rasmussen, Elling Rishoff, John Olav Skogås
2023 J jnl
CoRR
Sondre Sørbø, Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2023 J jnl
Comput. Math. Appl.
Shady E. Ahmed, Omer San
2023 J jnl
CoRR
Jacob Wulff Wold, Florian Stadtmann, Adil Rasheed, Mandar V. Tabib, Omer San, Jan-Tore Horn
2023 J jnl
CoRR
Shady E. Ahmed, Omer San, Sivaramakrishnan Lakshmivarahan, John M. Lewis
2023 J jnl
SIAM J. Sci. Comput.
Shady E. Ahmed, Omer San, Adil Rasheed, Traian Iliescu, Alessandro Veneziani
2023 J jnl
CoRR
Pu Ren, N. Benjamin Erichson, Shashank Subramanian, Omer San, Zarija Lukic, Michael W. Mahoney
2022 J jnl
CoRR
Changhong Mou, Elia Merzari, Omer San, Traian Iliescu
2022 J jnl
CoRR
Elias Mohammed Elfarri, Adil Rasheed, Omer San
2022 J jnl
Appl. Soft Comput.
Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2022 J jnl
CoRR
Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2022 J jnl
CoRR
Omer San, Suraj Pawar, Adil Rasheed
2022 J jnl
Neural Networks
Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2022 J jnl
CoRR
Shady E. Ahmed, Omer San, Adil Rasheed, Traian Iliescu, Alessandro Veneziani
2022 J jnl
CoRR
Haakon Robinson, Suraj Pawar, Adil Rasheed, Omer San
2022 J jnl
Neural Networks
Haakon Robinson, Suraj Pawar, Adil Rasheed, Omer San
2022 J jnl
CoRR
Omer San, Suraj Pawar, Adil Rasheed
2022 J jnl
CoRR
William Snyder, Changhong Mou, Honghu Liu, Omer San, Raffaella De Vita, Traian Iliescu
2022 J jnl
Neural Networks
Amalie Heiberg, Thomas Nakken Larsen, Eivind Meyer, Adil Rasheed, Omer San, Damiano Varagnolo
2022 J jnl
CoRR
Shady E. Ahmed, Omer San, Diana Alina Bistrian, Ionel Michael Navon
2022 J jnl
CoRR
Omer San, Suraj Pawar, Adil Rasheed
2021 J jnl
CoRR
Changhong Mou, Elia Merzari, Omer San, Traian Iliescu
2021 J jnl
Ecol. Informatics
Herman Stavelin, Adil Rasheed, Omer San, Arne Johan Hestnes
2021 J jnl
CoRR
Sindre Stenen Blakseth, Adil Rasheed, Trond Kvamsdal, Omer San
2021 J jnl
CoRR
Tiril Sundby, Julia Maria Graham, Adil Rasheed, Mandar V. Tabib, Omer San
2021 J jnl
Digit.
Tiril Sundby, Julia Maria Graham, Adil Rasheed, Mandar V. Tabib, Omer San
2021 J jnl
CoRR
Omer San, Adil Rasheed, Trond Kvamsdal
2021 J jnl
CoRR
Shady E. Ahmed, Omer San, Adil Rasheed, Traian Iliescu
2021 J jnl
CoRR
Thomas Nakken Larsen, Amalie Heiberg, Eivind Meyer, Adil Rasheed, Omer San, Damiano Varagnolo
2021 J jnl
Nat. Comput. Sci.
Omer San
2020 J jnl
CoRR
Shady E. Ahmed, Suraj Pawar, Omer San, Adil Rasheed, Mandar V. Tabib
2020 J jnl
IEEE Access
Eivind Meyer, Amalie Heiberg, Adil Rasheed, Omer San
2020 J jnl
CoRR
Eivind Meyer, Amalie Heiberg, Adil Rasheed, Omer San
2020 J jnl
CoRR
Changhong Mou, Birgul Koc, Omer San, Traian Iliescu
2020 J jnl
Frontiers Robotics AI
Simen Theie Havenstrøm, Adil Rasheed, Omer San
2020 J jnl
CoRR
Simen Theie Havenstrøm, Adil Rasheed, Omer San
2020 J jnl
IEEE Access
Adil Rasheed, Omer San, Trond Kvamsdal
2020 J jnl
CoRR
Shady E. Ahmed, Omer San, Kursat Kara, Rami M. Younis, Adil Rasheed
2020 J jnl
CoRR
Herman Stavelin, Adil Rasheed, Omer San, Arne Johan Hestnes
2020 J jnl
J. Comput. Appl. Math.
Romit Maulik, Omer San
2020 J jnl
CoRR
Andrine Elsetrønning, Adil Rasheed, Jon Bekker, Omer San
2020 J jnl
CoRR
Suraj Pawar, Omer San, Burak Aksoylu, Adil Rasheed, Trond Kvamsdal
2020 J jnl
CoRR
Simen Theie Havenstrøm, Camilla Sterud, Adil Rasheed, Omer San
2020 J jnl
IEEE Access
Eivind Meyer, Haakon Robinson, Adil Rasheed, Omer San
2019 J jnl
CoRR
Sk. Mashfiqur Rahman, Suraj Pawar, Omer San, Adil Rasheed, Traian Iliescu
2019 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Omer San, Romit Maulik, Mansoor Ahmed
2019 J jnl
CoRR
Haakon Robinson, Adil Rasheed, Omer San
2019 J jnl
CoRR
Eivind Meyer, Haakon Robinson, Adil Rasheed, Omer San
2018 J jnl
J. Comput. Appl. Math.
Romit Maulik, Omer San
2018 J jnl
J. Sci. Comput.
Omer San, Prakash Vedula
2018 J jnl
Adv. Comput. Math.
Omer San, Romit Maulik
2018 conf
CDC
Weiwei Hu, Omer San
2017 J jnl
Comput. Math. Appl.
Romit Maulik, Omer San
2017 J jnl
CoRR
Omer San, Prakash Vedula
2015 J jnl
Adv. Comput. Math.
Omer San, Traian Iliescu
2013 J jnl
J. Comput. Phys.
Omer San, Anne E. Staples
redb/extractors/pe_extractors/pe_resources.py
← Index redb/extractors/pe_extractors/pe_resources.py python
from hashlib import sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika
import pefile
from pefile import UnicodeStringWrapperPostProcessor

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEResource


class PEResourceExtractor(PEExtractor):

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

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

    def _extract_resources(self):
        """
        Returns:
        resources: a list of dictionaries, one per each resources type found.
                    each dictionary the key represents the name of the content,
                    which is the value itself.
                    Empty list if no resources present.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        resources_list = []
        try:
            if hasattr(self.pe, "DIRECTORY_ENTRY_RESOURCE"):
                for resource_type in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:
                    # if resource_type.name is not None:
                    #     name = resource_type.name
                    # else:
                    #     name = pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    # if not name:
                    #     name = resource_type.struct.Id
                    name = (
                        resource_type.name
                        if resource_type.name is not None
                        else pefile.RESOURCE_TYPE.get(resource_type.struct.Id)
                    )
                    if isinstance(name, UnicodeStringWrapperPostProcessor):
                        name = name.decode()
                    try:
                        if hasattr(resource_type, "directory"):
                            for resource_id in resource_type.directory.entries:
                                if hasattr(resource_id, "directory"):
                                    for resource_lang in resource_id.directory.entries:
                                        rsrc_data = self.pe.get_data(
                                            resource_lang.data.struct.OffsetToData,
                                            resource_lang.data.struct.Size,
                                        )
                                        file_type = magic.from_buffer(rsrc_data)
                                        magik = Magika().identify_bytes(rsrc_data).output.label

                                        rsrc_entropy = (
                                            "%.2f"
                                            % pefile.SectionStructure.entropy_H(
                                                self.pe, rsrc_data
                                            )
                                        )
                                        rsrc_sha256 = sha256(rsrc_data).hexdigest()
                                        lang = pefile.LANG.get(
                                            resource_lang.data.lang, "*unknown*"
                                        )
                                        sublang = pefile.get_sublang_name_for_lang(
                                            resource_lang.data.lang,
                                            resource_lang.data.sublang,
                                        )
                                        pe_resource = PEResource(
                                            _id=rsrc_sha256,
                                            resource_type=name,
                                            resource_entropy=rsrc_entropy,
                                            resource_sha256=rsrc_sha256,
                                            resource_filetype=file_type,
                                            resource_magika=magik,
                                            resource_language=lang,
                                            resource_rva=resource_lang.data.struct.OffsetToData,
                                            resource_size=resource_lang.data.struct.Size,
                                            resource_sub_lang=sublang,
                                        )
                                        resources_list.append(pe_resource)
                    except Exception as e:
                        self.log.warning(
                            f"Continue after Error in {self.hash.sha256}: {resource_type.name} "
                            f"Exception: {e}",
                            stack_info=True,
                        )
                        # resources_list.append({f"{e} - {resource_type.name}"})
                        continue
        except Exception as e:
            self.log.exception(
                f"Extract exports error {self.hash.sha256} Exception: {e}"
            )
        self.log.debug(f"Resource list {resources_list}")
        return resources_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            resources = self._extract_resources()
            # self.export_to_elastic(resources)  # Let the exporters handle this
            return resources
        except Exception as e:
            self.log.error(f"Extract resources error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            resources = self.extract()
            if resources is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            for resource in resources:
                data.append([
                    self.sha256,                    # sha256
                    self.md5,                       # md5
                    self.sha1,                      # sha1
                    resource.resource_type,         # resource_type
                    resource.resource_entropy,      # resource_entropy
                    resource.resource_sha256,       # resource_sha256
                    resource.resource_filetype,     # resource_filetype
                    resource.resource_magika,       # resource_magika
                    resource.resource_language,     # resource_language
                    resource.resource_sub_lang,     # resource_sub_lang
                    resource.resource_size,         # resource_size
                    resource.resource_rva,          # resource_rva
                    current_time                    # analysis_date
                ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'resource_type', 'resource_entropy',
                'resource_sha256', 'resource_filetype', 'resource_magika',
                'resource_language', 'resource_sub_lang', 'resource_size',
                'resource_rva', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'LowCardinality(Nullable(String))', 'Float64',
                'FixedString(64)', 'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))',
                'LowCardinality(Nullable(String))', 'LowCardinality(Nullable(String))', 'UInt64',
                'UInt64', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

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