Wael M. Mohammed

37 papers C 15Journal 11Unranked 11
YearRankTypeTitle / Venue / Authors
2026 J jnl
Pattern Recognit. Lett.
Junze Yuan, Wael M. Mohammed, Manuel Ferre, Jose L. Martinez Lastra
2025 J jnl
IEEE Access
Hoang Pham, Pablo Malvido Fresnillo, Saigopal Vasudevan, Wael M. Mohammed, Jose L. Martinez Lastra
2025 J jnl
IEEE Access
Nadun Ranasinghe, Wael M. Mohammed, Kostas Stefanidis, Jose L. Martinez Lastra
2024 conf
I-ESA Workshops
Tuan Vu, Ali Jedari Heidarzadeh, Seyedamir Ahmadi, Wael M. Mohammed, Mika Tuomola, José Luis Martínez Lastra
2024 conf
ERF (2)
Wael M. Mohammed, Angela Lago Alvarez, Jose L. Martinez Lastra
2024 J jnl
Mach. Vis. Appl.
Pablo Malvido Fresnillo, Wael M. Mohammed, Saigopal Vasudevan, José A. Pérez García, José L. Martínez Lastra
2024 J jnl
IEEE Access
Saigopal Vasudevan, Mohamed Lamine Mekhalfi, Carlos Blanes, Michela Lecca, Fabio Poiesi, Paul Chippendale, Pablo Malvido Fresnillo, Wael M. Mohammed, Jose L. Martinez Lastra
2023 J jnl
Robotics Auton. Syst.
Pablo Malvido Fresnillo, Saigopal Vasudevan, Wael M. Mohammed, Jose L. Martinez Lastra, José A. Pérez García
2023 J jnl
Robotics Comput. Integr. Manuf.
Pablo Malvido Fresnillo, Saigopal Vasudevan, Wael M. Mohammed, Jose L. Martinez Lastra, José A. Pérez García
2022 conf
ICPS
Pablo Malvido Fresnillo, Saigopal Vasudevan, Wael M. Mohammed
2021 J jnl
Knowl. Inf. Syst.
Borja Ramis Ferrer, Wael M. Mohammed, Mussawar Ahmad, Sergii Iarovyi, Jiayi Zhang, Robert Harrison, José Luis Martínez Lastra
2021 conf
ICPS
Pablo Malvido Fresnillo, Saigopal Vasudevan, Wael M. Mohammed, Jose L. Martinez Lastra, Gianluca Laudante, Salvatore Pirozzi, Kevin Galassi, Gianluca Palli
2021 J jnl
Sensors
Aitor Toichoa Eyam, Wael M. Mohammed, Jose L. Martinez Lastra
2020 conf
ICPS
Wael M. Mohammed, Pablo Malvido Fresnillo, Saigopal Vasudevan, Ziga Gosar, Jose L. Martinez Lastra
2020 conf
ICPS
Wael M. Mohammed, Miroslaw Nejman, Fernando Castaño, Jose L. Martinez Lastra, Stanislaw Strzelczak, Alberto Villalonga
2019 C conf
IECON
Borja Ramis Ferrer, Wael M. Mohammed, José L. Martínez Lastra, Stanislaw Strzelczak
2019 C conf
INDIN
Olatz De Miguel Lázaro, Wael M. Mohammed, Borja Ramis Ferrer, Ronal Bejarano, Jose L. Martinez Lastra
2019 C conf
INDIN
Ronal Bejarano, Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra
2019 C conf
INDIN
Leire Amezua Hormaza, Wael M. Mohammed, Borja Ramis Ferrer, Ronal Bejarano, Jose L. Martinez Lastra
2018 C conf
INDIN
Umer Iftikhar, Wael M. Mohammed, Borja Ramis Ferrer, Jose L. Martinez Lastra
2018 conf
ICPS
Usman Muhammad, Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra
2018 J jnl
Int. J. Comput. Integr. Manuf.
Wael M. Mohammed, Borja Ramis Ferrer, Sergii Iarovyi, Elisa Negri, Luca Fumagalli, Andrei Lobov, Jose L. Martinez Lastra
2018 conf
I-ESA
Maria Marques, Adriana Cunha, Wael M. Mohammed, Ricardo Jardim-Gonçalves, Carlos Agostinho
2018 C conf
INDIN
Wael M. Mohammed, Borja Ramis Ferrer, Umer Iftikhar, Jose L. Martinez Lastra, Javier Hitado Simarro
2018 C conf
INDIN
Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra, Alberto Villalonga, Gerardo Beruvides, Fernando Castaño, Rodolfo E. Haber
2017 conf
ICE/ITMC
Wael M. Mohammed, Borja Ramis Ferrer, José L. Martínez Lastra, Raquel Sanchis, Beatriz Andrés, Carlos Agostinho
2017 conf
ICE/ITMC
Artem Katasonov, Toni Lastusilta, Timo Korvola, Leila Saari, Dan Bendas, Wael M. Mohammed, Angelica N. Nieto Lee
2017 conf
ICE/ITMC
Wael M. Mohammed, Borja Ramis Ferrer, José L. Martínez Lastra
2017 C conf
IECON
Borja Ramis Ferrer, Wael M. Mohammed, Enbo Chen, Jose L. Martinez Lastra
2017 C conf
INDIN
Enbo Chen, Wael M. Mohammed, Borja Ramis Ferrer, Jose L. Martinez Lastra
2017 C conf
IECON
Borja Ramis Ferrer, Wael M. Mohammed, Andrei Lobov, Amalia Moreno-Galera, Jose L. Martinez Lastra
2017 C conf
INDIN
Khurshid Ali Qureshi, Wael M. Mohammed, Borja Ramis Ferrer, Jose L. Martinez Lastra, Carlos Agostinho
2017 C conf
IECON
Arsalan Shah, Petr Belyaev, Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra
2017 C conf
INDIN
Samuel Olaiya Afolaranmi, Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra, Mussawar Ahmad, Robert Harrison
2016 C conf
IECON
Borja Ramis Ferrer, Wael M. Mohammed, Jose L. Martinez Lastra
2016 C conf
IECON
Wael M. Mohammed, Andrei Lobov, Borja Ramis Ferrer, Sergii Iarovyi, Jose L. Martinez Lastra
2016 J jnl
Proc. IEEE
Sergii Iarovyi, Wael M. Mohammed, Andrei Lobov, Borja Ramis Ferrer, Jose L. Martinez Lastra
redb/extractors/pe_extractors/pe_overlay.py
← Index redb/extractors/pe_extractors/pe_overlay.py python
from hashlib import md5, sha1, sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika

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


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

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

    def _extract_pe_overlay(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        overlay = self.pe.get_overlay()
        if overlay:
            return PEOverlay(
                _id=sha256(overlay).hexdigest(),
                overlay_size=len(overlay),
                overlay_entropy=self.calculate_entropy(overlay),
                overlay_offset=self.pe.get_overlay_data_start_offset(),
                overlay_mimetype=magic.from_buffer(overlay, mime=True),
                overlay_type=magic.from_buffer(overlay),
                overlay_magika=Magika().identify_bytes(overlay).output.ct_label,
                overlay_sha256=sha256(overlay).hexdigest(),
                overlay_sha1=sha1(overlay).hexdigest(),
                overlay_md5=md5(overlay).hexdigest(),
            )
        return None

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            overlay = self._extract_pe_overlay()
            # self.export_to_elastic([overlay])  # Let the exporters handle this
            return overlay
        except Exception as e:
            self.log.error(f"Error extracting PE overlay: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            overlay = self.extract()
            if overlay is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            data.append([
                self.sha256,              # sha256
                self.md5,                 # md5
                self.sha1,                # sha1
                overlay.overlay_size,     # overlay_size
                overlay.overlay_entropy,  # overlay_entropy
                overlay.overlay_offset,   # overlay_offset
                overlay.overlay_mimetype, # overlay_mimetype
                overlay.overlay_type,     # overlay_type
                overlay.overlay_magika,   # overlay_magika
                overlay.overlay_sha256,   # overlay_sha256
                overlay.overlay_sha1,     # overlay_sha1
                overlay.overlay_md5,      # overlay_md5
                current_time             # analysis_date
            ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'overlay_size', 'overlay_entropy',
                'overlay_offset', 'overlay_mimetype', 'overlay_type', 'overlay_magika',
                'overlay_sha256', 'overlay_sha1', 'overlay_md5',
                'analysis_date'
            ]
            
            if not data:
                return None

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

            return (data, column_names, column_type_names)

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