Rafael Pastor Vargas

54 papers B 7C 7Journal 29Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
PeerJ Comput. Sci.
José Carlos García-Merino, Llanos Tobarra, Antonio Robles-Gómez, Rafael Pastor Vargas, João Sarraipa
2026 J jnl
Expert Syst. J. Knowl. Eng.
Sergio A. Falcón-López, Llanos Tobarra, Antonio Robles-Gómez, Rafael Pastor Vargas
2025 J jnl
IEEE Access
Lauren Genith Isaza Domínguez, Antonio Robles-Gómez, Rafael Pastor Vargas
2025 ed.
BLOCKCHAIN
Javier Prieto, Rafael Pastor Vargas, Oscar Lage, José Manuel F. Machado, Bálint Molnár
2025 J jnl
Health Inf. Sci. Syst.
Rafael Pastor Vargas, Cristina Antón-Munárriz, Juan Mario Haut, Antonio Robles-Gómez, Mercedes Eugenia Paoletti, José Alberto Benítez-Andrades
2025 J jnl
Clust. Comput.
Daniel Blanco-Aza, Antonio Robles-Gómez, Rafael Pastor Vargas, Llanos Tobarra, Pedro Vidal-Balboa, Mariano Méndez-Suárez
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Carlos Cañada, Mercedes Eugenia Paoletti, María B. García-Flores, Xuanwen Tao, Rafael Pastor Vargas, Juan Mario Haut
2025 J jnl
Future Internet
Daniel Sernández-Iglesias, Llanos Tobarra, Rafael Pastor Vargas, Antonio Robles-Gómez, Pedro Vidal-Balboa, João Sarraipa
2025 J jnl
Internet Things
Enrique Fernández-Morales, Llanos Tobarra, Antonio Robles-Gómez, Rafael Pastor Vargas, Roberto Hernández, João Sarraipa
2024 B conf
CBMS
Enrique Fernández-Morales, Carlos Luis Sánchez-Bocanegra, Rafael Pastor Vargas, José-Juan Pereyra-Rodriguez, Juan Mario Haut, José Alberto Benítez-Andrades
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Juan Mario Haut, Sergio Moreno-Álvarez, Rafael Pastor Vargas, Ámbar Pérez-García, Mercedes Eugenia Paoletti
2024 J jnl
Future Internet
Jesús Calle-Cancho, Carlos Cañada, Rafael Pastor Vargas, Mercedes Eugenia Paoletti, Juan Mario Haut
2024 conf
BLOCKCHAIN
Jesús Hernando Corrochano, Rafael Pastor Vargas, Roberto Hernández Berlinches
2024 J jnl
PeerJ Comput. Sci.
Pablo Morán, Antonio Robles-Gómez, Andrés Duque, Llanos Tobarra, Rafael Pastor Vargas
2024 J jnl
CoRR
José Alberto Benítez-Andrades, José-Manuel Alija-Pérez, Maria-Esther Vidal, Rafael Pastor Vargas, María Teresa García-Ordás
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Juan Mario Haut, Sergio Moreno-Álvarez, Enrique Moreno-Ávila, Victor Andres Ayma, Rafael Pastor Vargas, Mercedes Eugenia Paoletti
2023 conf
UCAmI (2)
Sergio A. Falcón-López, Antonio Robles-Gómez, Llanos Tobarra, Rafael Pastor Vargas
2023 conf
WHISPERS
Zhaoyue Wu, Xuanwen Tao, Mercedes Eugenia Paoletti, Juan Mario Haut, Rafael Pastor Vargas, Antonio Plaza
2023 B conf
CBMS
Cristina Antón-Munárriz, Rafael Pastor Vargas, Juan Mario Haut, Antonio Robles-Gómez, Mercedes Eugenia Paoletti, José Alberto Benítez-Andrades
2023 J jnl
IT Prof.
Elio San Cristóbal Ruiz, Rafael Pastor Vargas, Rosario Gil Ortego, Russ Meier, Hamadou Saliah-Hassane, Manuel Castro
2022 conf
IWINAC (1)
Laura Almón-Manzano, Rafael Pastor Vargas, José Manuel Cuadra Troncoso
2022 conf
BLOCKCHAIN
Pablo Santamaría, Llanos Tobarra, Rafael Pastor Vargas, Antonio Robles-Gómez
2022 conf
CSCI
David García, Llanos Tobarra, Antonio Robles-Gómez, Rafael Pastor Vargas
2021 B conf
CBMS
Ruben Vasallo González, Antonio Robles-Gómez, Rafael Pastor Vargas, Juan Mario Haut, Nicolás A. Passadore, Mercedes Eugenia Paoletti, Carlos Luis Sánchez-Bocanegra, Llanos Tobarra, Karla A. Chacón-Vargas, Roberto Hernández Berlinches, Francesc Saigí Rubió
2021 C conf
IGARSS
Juan Mario Haut, Mercedes Eugenia Paoletti, Rafael Pastor Vargas, Llanos Tobarra, Antonio Robles-Gómez, Roberto Hernández, Eligius M. T. Hendrix, J. Li
2021 J jnl
IEEE Access
Antonio Robles-Gómez, Llanos Tobarra, Rafael Pastor Vargas, Roberto Hernández, Juan Mario Haut
2021 B conf
CBMS
José Alberto Benítez-Andrades, José-Manuel Alija-Pérez, Isaías García-Rodríguez, Carmen Benavides, Héctor Alaiz-Moretón, Rafael Pastor Vargas, María Teresa García-Ordás
2021 J jnl
IEEE Access
Swalpa Kumar Roy, Purbayan Kar, Mercedes Eugenia Paoletti, Juan Mario Haut, Rafael Pastor Vargas, Antonio Robles-Gómez
2021 C conf
EDUCON
Llanos Tobarra, Antonio Robles-Gómez, Rafael Pastor Vargas, Roberto Hernández, Juan Mario Haut
2020 J jnl
Sensors
Rafael Pastor Vargas, Llanos Tobarra, Antonio Robles-Gómez, Sergio Martín, Roberto Hernández, Jesús Cano
2020 J jnl
Sensors
Antonio Robles-Gómez, Llanos Tobarra, Rafael Pastor Vargas, Roberto Hernández, Jesús Cano
2020 conf
LASI Spain
Antonio Uzal, Llanos Tobarra, Alejandro Utrilla, Antonio Robles-Gómez, Rafael Pastor Vargas, Roberto Hernández
2018 C conf
EDUCON
Rafael Pastor Vargas, Miguel Romero Hortelano, Llanos Tobarra Abad, Jesús Cano Carrillo, Roberto Hernández Berlinches
2016 conf
TEEM
Manuel Caeiro-Rodríguez, Miguel Á. Conde, Mariluz Guenaga, Ángel Hernández-García, Mikel Larrañaga, Alejandra Martínez-Monés, Pedro J. Muñoz Merino, Rafael Pastor Vargas, Asier Perallos-Ruiz, María José Rodríguez-Conde
2015 C conf
FIE
Llanos Tobarra, Salvador Ros, Roberto Hernández, Rafael Pastor Vargas, Manuel Castro, Abdullah Y. Al-Zoubi, Bashar Hammad, Mamoun Dmour, Antonio Robles-Gómez, Agustín C. Caminero
2015 J jnl
Rev. Iberoam. de Tecnol. del Aprendiz.
Llanos Tobarra, Salvador Ros, Roberto Hernández, Alejandro Marcos-Barreiro, Antonio Robles-Gómez, Agustín C. Caminero, Rafael Pastor Vargas, Manuel Castro
2014 J jnl
Int. J. Online Eng.
Rafael Pastor Vargas, Llanos Tobarra, Salvador Ros, Roberto Hernández, Antonio Robles-Gómez, Manuel Castro
2014 C conf
EDUCON
Agustín C. Caminero, Antonio Robles-Gómez, Salvador Ros, Llanos Tobarra, Roberto Hernández, Rafael Pastor Vargas, Manuel Castro
2014 J jnl
Int. J. Interact. Multim. Artif. Intell.
Llanos Tobarra, Salvador Ros, Roberto Hernández, Antonio Robles-Gómez, Agustín C. Caminero, Rafael Pastor Vargas
2014 C conf
EDUCON
Rafael Pastor Vargas, Llanos Tobarra, Salvador Ros, Roberto Hernández, Agustín C. Caminero, Antonio Robles-Gómez, Manuel Castro, Gabriel Díaz, Elio Sancristobal Ruiz, Mohamed Tawfik
2014 J jnl
Int. J. Online Eng.
Agustín C. Caminero, Antonio Robles-Gómez, Salvador Ros, Llanos Tobarra, Roberto Hernández, Rafael Pastor Vargas, Manuel Castro
2014 J jnl
IEEE Trans. Educ.
Salvador Ros, Roberto Hernández, Timothy Read, Miguel Rodríguez-Artacho, Rafael Pastor Vargas, Gabriel Díaz Orueta
2013 J jnl
Int. J. Online Biomed. Eng.
Rafael Pastor Vargas, Daniel Sánchez Rama, Salvador Ros Muñoz, Roberto Hernández Berlinches, Agustín Carlos Caminero, Llanos Tobarra, Antonio Robles-Gómez, Manuel Castro Gil, Gabriel Díaz Orueta, Elio San Cristóbal, Mohamed Tawfik
2013 C conf
EDUCON
Rafael Pastor Vargas, Daniel Sánchez Rama, Salvador Ros Muñoz, Roberto Hernández Berlinches
2013 J jnl
J. Univers. Comput. Sci.
Rafael Pastor Vargas, Agustín Carlos Caminero, Daniel Sánchez Rama, Roberto Hernández, Salvador Ros, Antonio Robles-Gómez, Llanos Tobarra
2012 J jnl
IEEE Trans. Educ.
Salvador Ros, Antonio Robles-Gómez, Roberto Hernández, Agustín C. Caminero, Rafael Pastor Vargas
2011 B conf
ICALT
Antonio Robles-Gómez, Llanos Tobarra, Salvador Ros, Roberto Hernández, Agustín C. Caminero, Rafael Pastor Vargas
2011 B conf
ITiCSE
Salvador Ros, Agustín C. Caminero, Antonio Robles-Gómez, Roberto Hernández, Rafael Pastor Vargas, Timothy Read, Alberto Pesquera, Raul Muñoz
2011 B conf
ICALT
Agustín C. Caminero, Salvador Ros, Roberto Hernández, Antonio Robles-Gómez, Rafael Pastor Vargas
2010 J jnl
Int. J. Online Eng.
Nourdine Aliane, Rafael Pastor Vargas, Gonzalo Vivas Mariscal
2010 conf
ADNTIIC
Timothy Read, Salvador Ros, Rafael Pastor Vargas, Roberto Hernández, Covadonga Rodrigo
2009 J jnl
Rev. Iberoam. de Tecnol. del Aprendiz.
Rafael Pastor Vargas, Edmundo Tovar, Inmaculada Plaza, Manuel Castro, Martín Llamas Nistal, Francisco Arcega, Gabriel Díaz, Francisco Falcone, Francisco Jurado, José Ángel Sánchez, Manuel Domínguez, Francisco Mur, José Carpio
2009 conf
HCI (12)
Rafael Pastor Vargas, Timothy Read, Salvador Ros, Roberto Hernández, Rocael Hernández
2006 J jnl
Rev. Iberoam. de Tecnol. del Aprendiz.
Rafael Pastor Vargas, Roberto Hernández, Salvador Ros, Manuel Castro
redb/extractors/elf_extractors/elf_segments.py
← Index redb/extractors/elf_extractors/elf_segments.py python
import inspect
import hashlib
import math
from collections import Counter
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFSegment


class ELFSegmentExtractor(ELFExtractor):

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

    def _is_empty_result(self, extracted_data) -> bool:
        """
        Override: Empty segments is an ERROR, not a valid empty case.
        A valid ELF file must have segments (program headers).
        """
        # Always return False - empty segments should be treated as an error
        return False

    def _calculate_entropy(self, data: bytes) -> float:
        """Calculate Shannon entropy of data."""
        if not data:
            return 0.0

        try:
            # Count frequency of each byte
            byte_counts = Counter(data)
            data_len = len(data)

            # Calculate entropy
            entropy = 0.0
            for count in byte_counts.values():
                if count > 0:
                    frequency = count / data_len
                    entropy -= frequency * math.log2(frequency)

            return entropy
        except Exception as e:
            self.log.error(f"Error calculating entropy: {e}")
            return 0.0

    def _map_segment_type(self, p_type_str: str) -> int:
        """Map segment type string to enum value."""
        type_map = {
            'PT_NULL': 0,
            'PT_LOAD': 1,
            'PT_DYNAMIC': 2,
            'PT_INTERP': 3,
            'PT_NOTE': 4,
            'PT_SHLIB': 5,
            'PT_PHDR': 6,
            'PT_TLS': 7
        }
        return type_map.get(p_type_str, 0)

    def _decode_segment_flags(self, flags: int) -> List[str]:
        """Decode segment flags to human-readable strings."""
        flag_strings = []

        if flags & 0x1:  # PF_X
            flag_strings.append('EXECUTE')
        if flags & 0x2:  # PF_W
            flag_strings.append('WRITE')
        if flags & 0x4:  # PF_R
            flag_strings.append('READ')

        return flag_strings if flag_strings else ['NONE']

    def _extract_segment_data(self, segment) -> ELFSegment:
        """Extract data from a single segment with granular error handling."""
        # Initialize with safe defaults
        segment_type = 0
        segment_type_str = 'unknown'
        segment_flags = 0
        segment_flags_str = ['NONE']
        segment_offset = 0
        segment_vaddr = 0
        segment_paddr = 0
        segment_filesz = 0
        segment_memsz = 0
        segment_align = 0
        segment_entropy = 0.0
        segment_sha256 = ""
        segment_md5 = ""

        # Try to get segment header
        header = None
        try:
            header = segment.header
        except Exception as e:
            self.log.warning(f"Could not access segment header: {e}")
            return ELFSegment(
                segment_type=segment_type, segment_type_str=segment_type_str,
                segment_flags=segment_flags, segment_flags_str=segment_flags_str,
                segment_offset=segment_offset, segment_vaddr=segment_vaddr,
                segment_paddr=segment_paddr, segment_filesz=segment_filesz,
                segment_memsz=segment_memsz, segment_align=segment_align,
                segment_entropy=segment_entropy, segment_sha256=segment_sha256,
                segment_md5=segment_md5
            )

        # Extract segment type
        try:
            p_type_str = header.get('p_type', 'PT_NULL')
            segment_type = self._map_segment_type(p_type_str)
            segment_type_str = p_type_str.replace('PT_', '') if p_type_str.startswith('PT_') else p_type_str
        except Exception as e:
            self.log.warning(f"Could not extract segment type: {e}")

        # Extract segment flags
        try:
            segment_flags = header.get('p_flags', 0)
            segment_flags_str = self._decode_segment_flags(segment_flags)
        except Exception as e:
            self.log.warning(f"Could not extract segment flags: {e}")

        # Extract segment addresses and sizes
        try:
            segment_offset = header.get('p_offset', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment offset: {e}")

        try:
            segment_vaddr = header.get('p_vaddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment vaddr: {e}")

        try:
            segment_paddr = header.get('p_paddr', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment paddr: {e}")

        try:
            segment_filesz = header.get('p_filesz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment filesz: {e}")

        try:
            segment_memsz = header.get('p_memsz', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment memsz: {e}")

        try:
            segment_align = header.get('p_align', 0)
        except Exception as e:
            self.log.warning(f"Could not extract segment align: {e}")

        # Calculate entropy and hashes for segment data (most likely to fail)
        try:
            if segment_filesz > 0:
                segment_data = segment.data()
                if segment_data:
                    # Calculate entropy
                    segment_entropy = self._calculate_entropy(segment_data)

                    # Calculate hashes
                    segment_sha256 = hashlib.sha256(segment_data).hexdigest()
                    segment_md5 = hashlib.md5(segment_data).hexdigest()
        except Exception as e:
            self.log.warning(f"Could not read segment data for hashing: {e}")
            # Keep defaults (0.0, "", "")

        return ELFSegment(
            segment_type=segment_type,
            segment_type_str=segment_type_str,
            segment_flags=segment_flags,
            segment_flags_str=segment_flags_str,
            segment_offset=segment_offset,
            segment_vaddr=segment_vaddr,
            segment_paddr=segment_paddr,
            segment_filesz=segment_filesz,
            segment_memsz=segment_memsz,
            segment_align=segment_align,
            segment_entropy=segment_entropy,
            segment_sha256=segment_sha256,
            segment_md5=segment_md5
        )

    def tag(self):
        return Tag.ELF_SEGMENTS.value if hasattr(Tag, 'ELF_SEGMENTS') else "elf_segments"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_segments(elf):
                segments_data = []

                # Iterate through all segments with per-segment error handling
                for segment_index, segment in enumerate(elf.iter_segments()):
                    try:
                        segment_data = self._extract_segment_data(segment)
                        if segment_data:
                            segments_data.append(segment_data)
                        else:
                            self.log.warning(f"Failed to extract data for segment {segment_index}")
                    except Exception as e:
                        self.log.warning(f"Error processing segment {segment_index}: {e}")
                        # Continue processing other segments

                return segments_data

            # Check if file is valid ELF
            if not self._is_elf_file():
                self.log.error(f"No valid ELF file for {self.hash.sha256}")
                return None

            segments_data = self._with_elf_file(extract_segments)
            if segments_data is None:
                return None

            self.elf_segments = segments_data
            return self.elf_segments

        except Exception as e:
            self.log.error(f"Error extracting ELF segments {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_segments
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_segments:
                    return None

                # Prepare data arrays for all segments
                data = []
                current_time = datetime.now(timezone.utc)
                for segment in self.elf_segments:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        segment.segment_type,
                        segment.segment_type_str,
                        segment.segment_flags,
                        segment.segment_flags_str,
                        segment.segment_offset,
                        segment.segment_vaddr,
                        segment.segment_paddr,
                        segment.segment_filesz,
                        segment.segment_memsz,
                        segment.segment_align,
                        segment.segment_entropy,
                        segment.segment_sha256,
                        segment.segment_md5,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'segment_type', 'segment_type_str', 'segment_flags', 'segment_flags_str',
                    'segment_offset', 'segment_vaddr', 'segment_paddr',
                    'segment_filesz', 'segment_memsz', 'segment_align',
                    'segment_entropy', 'segment_sha256', 'segment_md5',
                    'analysis_date'
                ]

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    "Enum8('NULL'=0, 'LOAD'=1, 'DYNAMIC'=2, 'INTERP'=3, 'NOTE'=4, 'SHLIB'=5, 'PHDR'=6, 'TLS'=7)",
                    'LowCardinality(String)',
                    'UInt32',
                    'Array(LowCardinality(String))',
                    'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64', 'UInt64',
                    'Float64',
                    'FixedString(64)', 'FixedString(32)',
                    'DateTime64(3, \'UTC\')'
                ]

                if not data:
                    return None

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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