Carlos Blanco

43 papers A 1B 5C 1Journal 24Unranked 9
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Stand. Interfaces
Luis Enrique Sánchez, Antonio Santos-Olmo, David Garcia Rosado, Carlos Blanco, Manuel A. Serrano, Haralambos Mouratidis, Eduardo Fernández-Medina
2024 J jnl
Comput. Stand. Interfaces
Manuel Paneque, María del Mar Roldán-García, Carlos Blanco, Alejandro Maté, David Garcia Rosado, Juan Trujillo
2024 J jnl
Softw. Qual. J.
Manuel A. Serrano, Luis Enrique Sánchez, Antonio Santos-Olmo, David Garcia Rosado, Carlos Blanco, Vita Santa Barletta, Danilo Caivano, Eduardo Fernández-Medina
2024 J jnl
Inf.
Carlos Blanco, Antonio Santos-Olmo, Luis Enrique Sánchez
2024 J jnl
Frontiers Comput. Sci.
Antonio Santos-Olmo, Luis Enrique Sánchez, David Garcia Rosado, Manuel A. Serrano, Carlos Blanco, Haralambos Mouratidis, Eduardo Fernández-Medina
2023 J jnl
Internet Things
Carlos Blanco, David Garcia Rosado, Ángel Jesús Varela-Vaca, María Teresa Gómez-López, Eduardo Fernández-Medina
2023 conf
IS-EUD Workshops
Manuel A. Serrano, Luis Enrique Sánchez Crespo, Antonio Santos-Olmo, David Garcia Rosado, Carlos Blanco, Eduardo Fernández-Medina
2022 J jnl
Comput. Ind.
David Garcia Rosado, Antonio Santos-Olmo, Luis Enrique Sánchez, Manuel A. Serrano, Carlos Blanco, Haralambos Mouratidis, Eduardo Fernández-Medina
2022 J jnl
J. Inf. Secur. Appl.
Carlos Blanco, Diego García-Saiz, David Garcia Rosado, Antonio Santos-Olmo, Jesús Peral, Alejandro Maté, Juan Trujillo, Eduardo Fernández-Medina
2021 J jnl
Knowl. Inf. Syst.
Alejandro Maté, Jesús Peral, Juan Trujillo, Carlos Blanco, Diego García-Saiz, Eduardo Fernández-Medina
2020 J jnl
Future Gener. Comput. Syst.
Alfonso de la Vega, Diego García-Saiz, Carlos Blanco, Marta E. Zorrilla, Pablo Sánchez
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo
2018 A conf
ER
Carlos Blanco, Diego García-Saiz, Jesús Peral, Alejandro Maté, Alejandro Oliver, Eduardo Fernández-Medina
2018 C conf
MEDI
Alfonso de la Vega, Diego García-Saiz, Carlos Blanco, Marta E. Zorrilla, Pablo Sánchez
2016 J jnl
J. Grid Comput.
Shashank Gugnani, Carlos Blanco, Tamás Kiss, Gábor Terstyánszky
2015 J jnl
Comput. Sci. Inf. Syst.
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo
2015 J jnl
Inf. Softw. Technol.
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo
2015 J jnl
Comput. J.
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo
2014 J jnl
Comput. Stand. Interfaces
Carlos Blanco, David Garcia Rosado, Luis Enrique Sánchez, Jan Jürjens
2014 J jnl
J. Univers. Comput. Sci.
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo
2014 ed.
WOSIS
David Garcia Rosado, Carlos Blanco, Daniel Mellado, Jan Jürjens, Luis Enrique Sánchez
2013 J jnl
Inf. Softw. Technol.
Belén Vela, Jose-Norberto Mazón, Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo, Esperanza Marcos
2012 J jnl
Decis. Support Syst.
Belén Vela, Carlos Blanco, Eduardo Fernández-Medina, Esperanza Marcos
2011 J jnl
Comput. Stand. Interfaces
Carlos Blanco, Joaquín Lasheras, Eduardo Fernández-Medina, Rafael Valencia-García, José Ambrosio Toval Álvarez
2010 J jnl
Comput. Stand. Interfaces
Daniel Mellado, Carlos Blanco, Luis Enrique Sánchez, Eduardo Fernández-Medina
2010 J jnl
Int. J. Bus. Intell. Data Min.
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2010 conf
EDBT/ICDT Workshops
Belén Vela, Carlos Blanco, Eduardo Fernández-Medina, Esperanza Marcos
2010 conf
Secure Data Management
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo, Jan Jürjens
2009 J jnl
J. Res. Pract. Inf. Technol.
Carlos Blanco, Ignacio García Rodríguez de Guzmán, David Garcia Rosado, Eduardo Fernández-Medina, Juan Trujillo
2009 B conf
ARES
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2009 ch.
Encyclopedia of Database Systems
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2009 J jnl
J. Univers. Comput. Sci.
Emilio Soler, Juan Trujillo, Carlos Blanco, Eduardo Fernández-Medina
2009 B conf
ARES
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2009 conf
JISBD
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo
2009 B conf
DaWaK
Carlos Blanco, Ricardo Pérez-Castillo, Arnulfo Hernández, Eduardo Fernández-Medina, Juan Trujillo
2008 B conf
ARES
Carlos Blanco, Joaquín Lasheras, Rafael Valencia-García, Eduardo Fernández-Medina, José Ambrosio Toval Álvarez, Mario Piattini
2008 conf
MODSEC@MoDELS
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 conf
OTM Conferences (2)
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 conf
JISBD
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 conf
JISBD
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 J jnl
Int. J. Bus. Intell. Data Min.
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 B conf
ARES
Carlos Blanco, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
2008 conf
WOSIS
Carlos Blanco, Ignacio García Rodríguez de Guzmán, Eduardo Fernández-Medina, Juan Trujillo, Mario Piattini
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"