Carolina Ribeiro Xavier

34 papers B 2C 1Misc 2Journal 9Unranked 20
YearRankTypeTitle / Venue / Authors
2024 J jnl
Braz. J. Inf. Syst.
Carlos M. G. Barbosa, Lucas G. S. Félix, Antonio Pedro Santos Alves, Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira
2023 J jnl
Evol. Intell.
Carolina Ribeiro Xavier, João Gabriel Rocha Silva, Grasiele Regina Duarte, Iago Augusto de Carvalho, Vinícius da Fonseca Vieira, Leonardo Goliatt
2023 conf
ICCSA (1)
Vitor Elisiário Carmo, Vinícius da Fonseca Vieira, Rafael Sachetto Oliveira, Carolina Ribeiro Xavier
2023 conf
ICCSA (2)
Rafael Sachetto Oliveira, Carolina Ribeiro Xavier
2022 J jnl
J. Comput. Sci.
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Bernardo Martins Rocha, Ruy Freitas Reis, Bárbara de Melo Quintela, Marcelo Lobosco, Rodrigo Weber dos Santos
2021 conf
ICCS (2)
Rafael Sachetto Oliveira, Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira, Bernardo Martins Rocha, Ruy Freitas Reis, Bárbara de Melo Quintela, Marcelo Lobosco, Rodrigo Weber dos Santos
2021 conf
ICCS (2)
Anna Luisa de Aguiar Bergo Coelho, Ricardo Silva Campos, João Gabriel Rocha Silva, Carolina Ribeiro Xavier, Rodrigo Weber dos Santos
2020 J jnl
Appl. Netw. Sci.
Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier, Alexandre Gonçalves Evsukoff
2020 conf
ICCSA (1)
Lucas G. S. Félix, Carlos M. G. Barbosa, Iago A. Carvalho, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2020 conf
COMPLEX NETWORKS (2)
Carlos Magno Geraldo Barbosa, Lucas Gabriel da Silva Félix, Antonio Pedro Santos Alves, Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira
2020 conf
ICCSA (1)
João Gabriel Rocha Silva, Ricardo Silva Campos, Carolina Ribeiro Xavier, Rodrigo Weber dos Santos
2020 conf
ICCSA (1)
Ygor Henrique de Paula Barros Baêta, Alexandre Bittencourt Pigozzo, Carolina Ribeiro Xavier
2019 J jnl
J. Inf. Data Manag.
Vinícius da Fonseca Vieira, Lucas Gabriel da Silva Félix, Carlos Magno Geraldo Barbosa, Carolina Ribeiro Xavier
2019 J jnl
Int. J. Inf. Decis. Sci.
Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira, Alexandre Gonçalves Evsukoff
2019 J jnl
Braz. J. Inf. Syst.
Lucas Gabriel da Silva Félix, Carlos M. G. Barbosa, Iago A. Carvalho, Vinícius F. Vieira, Carolina Ribeiro Xavier
2019 J jnl
J. Inf. Data Manag.
Antonio Pedro Santos Alves, Lucas Gabriel da Silva Félix, Carlos Magno Geraldo Barbosa, Vitor Elisiário Carmo, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2018 conf
ICCSA (1)
Arthur Rodrigues da Silva, Rodrigo Ferreira Rodrigues, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2018 conf
ICCSA (2)
Rodrigo Ferreira Rodrigues, Arthur Rodrigues da Silva, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2017 conf
ICCSA (1)
João Gabriel Rocha Silva, Iago Augusto de Carvalho, Leonardo Goliatt, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2017 B conf
CEC
João Gabriel Rocha Silva, Heder Soares Bernardino, Helio José Corrêa Barbosa, Iago Augusto de Carvalho, Vinícius da Fonseca Vieira, Michelli Marlane Silva Loureiro, Carolina Ribeiro Xavier
2017 conf
ICCSA (1)
Iago Augusto de Carvalho, Daniel G. da Rocha, João Gabriel Rocha Silva, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2016 conf
ICCSA (5)
João Gabriel Rocha Silva, Iago Augusto de Carvalho, Michelli Marlane Silva Loureiro, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2016 conf
ICCSA (4)
Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira, Alexandre Gonçalves Evsukoff
2015 conf
CompleNet
Carolina Ribeiro Xavier, Vinícius da Fonseca Vieira, Nelson Francisco Favilla Ebecken, Alexandre Gonçalves Evsukoff
2014 conf
ICCSA (6)
Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier, Nelson F. F. Ebecken, Alexandre G. Evsukoff
2013 B conf
SMC
Thiago P. Leal, Amanda C. A. Goncalves, Vinícius da Fonseca Vieira, Carolina Ribeiro Xavier
2013 Misc conf
ICCS
Carolina Ribeiro Xavier, Elisa Portes dos Santos, Vinícius da Fonseca Vieira, Rodrigo Weber dos Santos
2012 conf
ICCSA (1)
Elisa Portes dos Santos Amorim, Carolina Ribeiro Xavier, Ricardo Silva Campos, Rodrigo Weber dos Santos
2012 Misc conf
ICCS
Guilherme Andrade, Felipe Teixeira, Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Leonardo Rocha, Alexandre G. Evsukoff
2010 conf
ICCSA (2)
Elisa Portes dos Santos Amorim, Paulo Goldfeld, Flavio Dickstein, Rodrigo Weber dos Santos, Carolina Ribeiro Xavier
2010 conf
ICCSA (4)
Carolina Ribeiro Xavier, Elisa Portes dos Santos Amorim, Ronan M. Amorim, Marcelo Lobosco, Paulo Goldfeld, Flavio Dickstein, Rodrigo Weber dos Santos
2009 conf
ICCS (1)
Elisa Portes dos Santos, Carolina Ribeiro Xavier, Paulo Goldfeld, Flavio Dickstein, Rodrigo Weber dos Santos
2009 J jnl
Int. J. Parallel Program.
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Rodrigo Weber dos Santos, Wagner Meira Jr.
2007 C conf
SBAC-PAD
Carolina Ribeiro Xavier, Rafael Sachetto Oliveira, Vinícius da Fonseca Vieira, Rodrigo Weber dos Santos, Wagner Meira Jr.
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"