Rafael T. de Sousa Jr.

50 papers C 8Misc 1Journal 16Unranked 25
YearRankTypeTitle / Venue / Authors
2023 J jnl
Int. J. Electron. Gov. Res.
Edna Dias Canedo, Ian Nery Bandeira, Larissa Pereira Gonçalves, Alessandra de Vasconcelos Sales, Fábio L. L. Mendonça, Cláudio Azevedo Costa, Rafael T. de Sousa Jr.
2023 conf
SBRC
Jonathas A. de Oliveira, Rodolfo I. Meneguette, Vinícius P. Gonçalves, Rafael T. de Sousa Jr., Daniel L. Guidoni, José C. M. Oliveira, Geraldo P. Rocha Filho
2022 conf
ICSBT
Lucas C. de Almeida, Francisco L. de Caldas Filho, Fábio L. L. Mendonça, Rafael T. de Sousa Jr.
2022 J jnl
CoRR
Mayana Pereira, Sikha Pentyala, Anderson C. A. Nascimento, Rafael T. de Sousa Jr., Martine De Cock
2021 conf
ICEIS (1)
Edna Dias Canedo, Ana Paula Morais do Vale, Rogério Machado Gravina, Rafael Leite Patrão, Leomar Camargo de Souza, Vinicius Eloy dos Reis, Fábio Lúcio Lopes de Mendonça, Rafael T. de Sousa Jr.
2021 C conf
IoTBDS
Lucas Benevides Dias, Dennis Sávio Silva, Rafael T. de Sousa Jr., Maristela Holanda
2021 conf
ICITS (1)
Lucas C. de Almeida, Francisco L. de Caldas Filho, Natália A. Marques, Daniel S. do Prado, Fábio Lúcio Lopes de Mendonça, Rafael T. de Sousa Jr.
2021 J jnl
IEEE Commun. Lett.
João Paulo A. Maranhão, João Paulo C. L. da Costa, Edison Pignaton de Freitas, Elnaz Javidi, Rafael T. de Sousa Jr.
2021 conf
ICEIS (1)
Edna Dias Canedo, Anderson Jefferson Cerqueira, Rogério Machado Gravina, Vanessa Coelho Ribeiro, Renato Camões, Vinicius Eloy dos Reis, Fábio Lúcio Lopes de Mendonça, Rafael T. de Sousa Jr.
2021 J jnl
J. Netw. Comput. Appl.
João Paulo A. Maranhão, João Paulo C. L. da Costa, Elnaz Javidi, César Augusto Borges de Andrade, Rafael T. de Sousa Jr.
2020 J jnl
Sensors
Jayme Milanezi Jr., João Paulo C. L. da Costa, Caio C. R. Garcez, Robson de Oliveira Albuquerque, Arnaldo Arancibia, Lothar Weichenberger, Fábio Lúcio Lopes de Mendonça, Giovanni Del Galdo, Rafael T. de Sousa Jr.
2020 conf
ICEIS (2)
Renato Carauta Ribeiro, Edna Dias Canedo, Bruno J. G. Praciano, Gabriel P. M. Pinheiro, Fábio Lúcio Lopes de Mendonça, Rafael T. de Sousa Jr.
2020 J jnl
Inf.
Edna Dias Canedo, Ana Paula Morais do Vale, Rafael Leite Patrão, Leomar Camargo de Souza, Rogério Machado Gravina, Vinicius Eloy dos Reis, Fábio Lúcio Lopes de Mendonça, Rafael T. de Sousa Jr.
2020 conf
GCAIoT
Rafael Leite Patrão, Marcos B. Andrade, Fernanda F. da Silva, Lucas M. C. e Martins, Francisco L. de Caldas Filho, Rafael T. de Sousa Jr.
2020 C conf
CLOSER
Edna Dias Canedo, Fábio Lúcio Lopes de Mendonça, Georges Daniel Amvame Nze, Bruno J. G. Praciano, Gabriel P. M. Pinheiro, Rafael T. de Sousa Jr.
2020 J jnl
Digit. Signal Process.
Daniel Valle de Lima, Mateus da Rosa Zanatta, João Paulo C. L. da Costa, Rafael T. de Sousa Jr., Martin Haardt
2020 J jnl
IEEE Access
Gabriel Arquelau Pimenta Rodrigues, Robson de Oliveira Albuquerque, Gabriel De Oliveira Alves, Fábio Lúcio Lopes de Mendonça, William Ferreira Giozza, Rafael T. de Sousa Jr., Ana Lucila Sandoval Orozco
2019 conf
ICSPCS
Jayme Milanezi Jr., João Paulo C. L. da Costa, João Paulo A. Maranhão, Rafael T. de Sousa Jr., Giovanni Del Galdo
2019 J jnl
Digit. Signal Process.
Paulo R. B. Gomes, André L. F. de Almeida, João Paulo C. L. da Costa, Rafael T. de Sousa Jr.
2019 conf
FedCSIS (Communication Papers)
Guilherme de O. Kfouri, Daniel G. V. Gonçalves, Bruno V. Dutra, João F. de Alencastro, Francisco L. de Caldas Filho, Lucas M. C. e Martins, Bruno J. G. Praciano, Robson de Oliveira Albuquerque, Rafael T. de Sousa Jr.
2019 C conf
FedCSIS
Daniel Alves da Silva, José Alberto Sousa Torres, Alexandre Pinheiro, Francisco L. de Caldas Filho, Fábio L. L. Mendonça, Bruno J. G. Praciano, Guilherme Oliveira Kfouri, Rafael T. de Sousa Jr.
2019 J jnl
Wirel. Commun. Mob. Comput.
Paulo R. B. Gomes, André L. F. de Almeida, João Paulo C. L. da Costa, Rafael T. de Sousa Jr.
2019 conf
ICSPCS
João Paulo A. Maranhão, João Paulo C. L. da Costa, Elnaz Javidi, Jayme Milanezi Jr., Rafael T. de Sousa Jr.
2019 J jnl
IEEE Access
Daniel C. Araujo, André Lima Férrer de Almeida, João Paulo C. L. da Costa, Rafael T. de Sousa Jr.
2019 J jnl
Sensors
Caio C. R. Garcez, Daniel Valle de Lima, Ricardo Kehrle Miranda, Fábio L. L. Mendonça, João Paulo C. L. da Costa, André L. F. de Almeida, Rafael T. de Sousa Jr.
2019 J jnl
Digit. Signal Process.
Paulo R. B. Gomes, João Paulo C. L. da Costa, André L. F. de Almeida, Rafael T. de Sousa Jr.
2018 C conf
FIE
Fernando G. Constancio, Maria F. K. B. Couras, Danielle X. P. Nogueira, João Paulo C. L. da Costa, Mateus da Rosa Zanatta, Rafael T. de Sousa Jr., Stela Gomes, Natalia T. da Mota
2018 C conf
IoTBDS
Lucas Benevides Dias, Maristela Holanda, Ruben Cruz Huacarpuma, Rafael T. de Sousa Jr.
2017 conf
ICSPCS
Joao Paulo A. Maranhao, João Paulo C. L. da Costa, Rafael T. de Sousa Jr., Adoniran Judson de Barros Braga, Giovanni Del Galdo
2017 conf
UCC (Companion")
Francisco L. de Caldas Filho, Lucas M. C. e Martins, Ingrid Palma Araújo, Fábio Lúcio Lopes de Mendonça, João Paulo C. L. da Costa, Rafael T. de Sousa Jr.
2017 J jnl
ISPRS Int. J. Geo Inf.
Paulo Lima Machado, Rafael T. de Sousa Jr., Robson de Oliveira Albuquerque, Luis Javier García-Villalba, Tai-Hoon Kim
2017 conf
UCC (Companion")
Lucas M. C. e Martins, Francisco L. de Caldas Filho, Rafael T. de Sousa Jr., William F. Giozza, João Paulo C. L. da Costa
2016 conf
SBBD
Ruben Cruz Huacarpuma, Rafael T. de Sousa Jr., Maristela Holanda, Sérgio Lifschitz
2015 conf
SBSI
Bruno H. A. Pilon, João Paulo Carvalho Lustosa da Costa, Juan José Murillo-Fuentes, Rafael T. de Sousa Jr.
2014 conf
KMIS
Antonio Manuel Rubio Serrano, Paulo H. B. Rodrigues, Ruben Cruz Huacarpuma, João Paulo Carvalho Lustosa da Costa, Edison Pignaton de Freitas, Vera Lopes de Assis, Ararigleno Almeida Fernandes, Rafael T. de Sousa Jr., Marco A. M. Marinho, Bruno H. A. Pilon
2012 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Bernardo Machado David, Anderson C. A. Nascimento, Rafael T. de Sousa Jr.
2012 conf
SBSI
Eder Souza Gualberto, Rafael T. de Sousa Jr., Flavio Elias Gomes de Deus, Cláudio Gottschalg-Duque
2012 conf
CASoN
Sandir R. Campos, Ararigleno Almeida Fernandes, Rafael T. de Sousa Jr., Edison Pignaton de Freitas, João Paulo Carvalho Lustosa da Costa, Antonio Manuel Rubio Serrano, Daniel Da C. Rodrigues, Clauber T. Rodrigues
2011 J jnl
EURASIP J. Adv. Signal Process.
João Paulo Carvalho Lustosa da Costa, Florian Roemer, Martin Haardt, Rafael T. de Sousa Jr.
2008 Misc conf
SAC
Asmaa Adnane, Rafael T. de Sousa Jr., Christophe Bidan, Ludovic Mé
2008 conf
WOSIS
Asmaa Adnane, Christophe Bidan, Rafael T. de Sousa Jr.
2007 conf
Q2SWinet
Asmaa Adnane, Rafael T. de Sousa Jr., Christophe Bidan, Ludovic Mé
2006 conf
PWC
Ricardo Staciarini Puttini, Maíra Hanashiro, Fábio Miziara, Rafael T. de Sousa Jr., L. Javier García-Villalba, Cláudia Jacy Barenco
2004 conf
ADHOC-NOW
Fábio Buiati, Ricardo Staciarini Puttini, Rafael T. de Sousa Jr.
2004 C conf
ISCC
Ricardo Staciarini Puttini, Jean-Marc Percher, Ludovic Mé, Rafael T. de Sousa Jr.
2004 C conf
EUC
Fábio Buiati, Ricardo Staciarini Puttini, Rafael T. de Sousa Jr., Cláudia J. Barenco Abbas, L. Javier García-Villalba
2004 conf
ICCSA (1)
Robson de Oliveira Albuquerque, Rafael T. de Sousa Jr., Tamer Américo da Silva, Ricardo Staciarini Puttini, Cláudia J. Barenco Abbas, L. Javier García-Villalba
2004 C conf
EUC
Robson de Oliveira Albuquerque, Rafael T. de Sousa Jr., Tamer Américo da Silva, Ricardo Staciarini Puttini, Cláudia J. Barenco Abbas
2003 conf
ICWI
Rafael T. de Sousa Jr., Alexandre C. V. de Oliveira, Regina Tsujiguchi, Vinícius Maia Pacheco, Cláudia J. Barenco Abbas, Ricardo Staciarini Puttini, Robson de Oliveira Albuquerque
2003 conf
ICWI
Rafael T. de Sousa Jr., Alexandre C. V. de Oliveira, Regina Tsujiguchi, Vinícius Maia Pacheco, Cláudia J. Barenco Abbas, Ricardo Staciarini Puttini, Robson de Oliveira Albuquerque
redb/extractors/macho_extractors/macho_segments.py
← Index redb/extractors/macho_extractors/macho_segments.py python
import hashlib
import inspect
import base64
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachOSegment


class MachOSegmentExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_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 MachO file must have segments (at minimum __PAGEZERO, __TEXT).
        """
        # Always return False - empty segments should be treated as an error
        return False

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

    def _extract_segments_for_arch(self, arch_name):
        """Extract segment information for a specific architecture."""
        self.log.debug(f"Extracting segments for architecture: {arch_name}")
        segments = []

        try:
            # Get segments using new API with architecture parameter
            segments_data = self.macho.get_segments(arch=arch_name)
            if not segments_data:
                return segments

            # Extract segments for this architecture
            for segment in segments_data:
                try:
                    segment_name = segment.get('segname', 'Unknown')

                    # Calculate segment hash
                    segment_data = self._get_segment_data(segment)
                    if segment_data:
                        seg_sha256 = hashlib.sha256(segment_data).hexdigest()
                    else:
                        seg_sha256 = ""

                    # Use entropy already calculated by machofile module, rounded to 3 decimal places
                    seg_entropy = round(segment.get('entropy', 0.0), 3)

                    # Create segment dataclass with architecture info
                    macho_segment = MachOSegment(
                        segment_name=segment_name,
                        segment_vaddr=segment.get('vaddr', 0),
                        segment_vsize=segment.get('vsize', 0),
                        segment_offset=segment.get('offset', 0),
                        segment_size=segment.get('size', 0),
                        segment_max_vm_protection=segment.get('max_vm_protection', 0),
                        segment_initial_vm_protection=segment.get('initial_vm_protection', 0),
                        segment_nsects=segment.get('nsects', 0),
                        segment_flags=segment.get('flags', 0),
                        segment_entropy=seg_entropy,
                        segment_sha256=seg_sha256,
                    )
                    # Add architecture info to the segment
                    macho_segment.architecture = arch_name
                    segments.append(macho_segment)

                except Exception as e:
                    self.log.warning(
                        f'Unable to process segment "{segment.get("segname", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                    )
                    continue

            return segments

        except Exception as e:
            self.log.error(f"Error extracting MachO segments for architecture {arch_name}: {e}")
            return segments

    def _extract_segments(self):
        """Extract segment information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        segments = []

        if not self.macho:
            return segments

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return segments

            # Process each architecture
            for arch_name in architectures:
                arch_segments = self._extract_segments_for_arch(arch_name)
                segments.extend(arch_segments)

            return segments

        except Exception as e:
            self.log.error(f"Error extracting MachO segments: {e}")
            return segments

    def _get_segment_data(self, segment):
        """Get the raw data for a segment."""
        try:
            offset = segment.get('offset', 0)
            size = segment.get('size', 0)
            
            if size == 0:
                return None
            
            # Read segment data from file
            with open(self.filepath, 'rb') as f:
                f.seek(offset)
                return f.read(size)
                
        except Exception as e:
            self.log.warning(f"Error reading segment data: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            segments = self._extract_segments()
            return segments
        except Exception as e:
            self.log.error(f"Error extracting MachO segments: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Extract segments for this specific architecture
                segments = self._extract_segments_for_arch(arch_name)
                if not segments:
                    continue

                # Get architecture-specific sha256 and header info
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)

                    # Get raw architecture value
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                for segment in segments:
                    data.append([
                        arch_sha256,                          # sha256 (architecture-specific)
                        segment.segment_name,                 # segment_name
                        segment.segment_vaddr,                # segment_vaddr
                        segment.segment_vsize,                # segment_vsize
                        segment.segment_offset,               # segment_offset
                        segment.segment_size,                 # segment_size
                        segment.segment_max_vm_protection,    # segment_max_vm_protection
                        segment.segment_initial_vm_protection, # segment_initial_vm_protection
                        segment.segment_nsects,               # segment_nsects
                        segment.segment_flags,                # segment_flags
                        segment.segment_entropy,              # segment_entropy
                        segment.segment_sha256,               # segment_sha256
                        current_time,                         # analysis_date
                    ])

            column_names = [
                'sha256',
                'segment_name', 'segment_vaddr', 'segment_vsize', 'segment_offset',
                'segment_size', 'segment_max_vm_protection', 'segment_initial_vm_protection',
                'segment_nsects', 'segment_flags', 'segment_entropy', 'segment_sha256',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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