Rafael Maiani de Mello

67 papers A* 1A 8C 2Misc 1Journal 19Unranked 35
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Softw. Technol.
Talita Vieira Ribeiro, Breno Bernard Nicolau de França, Paulo Sérgio Medeiros dos Santos, Rafael Maiani de Mello, Cecilia Apa, Diego Vallespir, Guilherme Horta Travassos
2025 J jnl
CoRR
João Lucas Correia, Daniel Coutinho, Marco Castelluccio, Caio Barbosa, Rafael Maiani de Mello, Anita Sarma, Alessandro Garcia, Marco Aurélio Gerosa, Igor Steinmacher
2025 conf
SAST
Bruno Pedraça de Souza, Rebeca Campos Motta, Jéssica Soares da Costa, Elaine Nunes, Gustavo da Rocha Barreto Pinto, Rafael Maiani de Mello
2025 J jnl
Empir. Softw. Eng.
Diego André Cerqueira, Rafael Maiani de Mello, Jéssica Soares da Costa, Guilherme Horta Travassos
2025 conf
ISSREW
Rafael Maiani de Mello
2024 J jnl
J. Softw. Eng. Res. Dev.
João Antonio D. M. Bastos, Rafael Maiani de Mello, Alessandro Fabricio Garcia
2024 C conf
SCAM
Ana Carla Bibiano, Daniel Coutinho, Anderson G. Uchôa, Wesley K. G. Assunção, Alessandro Garcia, Rafael Maiani de Mello, Thelma Elita Colanzi, Daniel Tenório Martins de Oliveira, Audrey Vasconcelos, Baldoino Fonseca, Márcio Ribeiro
2024 conf
CIbSE
Bruno Dantas de Paiva, Alexandre C. Esteves, Rafael Maiani de Mello, Guilherme H. Travassos
2024 J jnl
Braz. J. Inf. Syst.
Adriano Neves de Souza, Fernanda dos Santos, Lidvaldo dos Santos, Patrick Helder Alvarenga Belém, Sírius Thadeu Ferreira da Silva, Adriana S. Vivacqua, Rafael Maiani de Mello
2024 J jnl
J. Softw. Eng. Res. Dev.
Rodrigo Lima, Jairo Souza, Baldoino Fonseca, Leopoldo Teixeira, Rafael Maiani de Mello, Márcio Ribeiro, Rohit Gheyi, Alessandro F. Garcia
2024 C conf
SCAM
João Lucas Correia, Daniel Coutinho, Alessandro Garcia, Rafael Maiani de Mello, Caio Barbosa, Anderson Oliveira, Wesley K. G. Assunção, Juliana Alves Pereira, Igor Steinmacher, Marco Aurélio Gerosa, Jairo Souza, Johny Arriel
2024 J jnl
IEEE Trans. Software Eng.
Luiz Carvalho, Thelma Elita Colanzi, Wesley K. G. Assunção, Alessandro F. Garcia, Juliana Alves Pereira, Marcos Kalinowski, Rafael Maiani de Mello, Maria Julia de Lima, Carlos Lucena
2024 J jnl
Softw. Qual. J.
Anderson Gonçalves Uchôa, Rafael Maiani de Mello, Jairo Souza, Leopoldo Teixeira, Baldoino Fonseca, Alessandro Garcia
2024 J jnl
Proc. ACM Softw. Eng.
Anderson Oliveira, João Lucas Correia, Wesley K. G. Assunção, Juliana Alves Pereira, Rafael Maiani de Mello, Daniel Coutinho, Caio Barbosa, Paulo Vítor C. F. Libório, Alessandro Garcia
2023 conf
CIbSE
Diego Cerqueira, Rafael Maiani de Mello, Guilherme Horta Travassos
2023 J jnl
CoRR
Diego André Cerqueira, Rafael Maiani de Mello, Guilherme Horta Travassos
2023 conf
SBES
Patrick Helder Alvarenga Belém, Rafael Maiani de Mello, Adriana S. Vivacqua, Adriano Neves de Souza
2023 conf
SBES
Joao Bastos, Rafael Maiani de Mello, Alessandro Garcia
2023 ch.
Handbook of Re-Engineering Software Intensive Systems into Software Product Lines
Luiz Carvalho, Alessandro F. Garcia, Wesley K. G. Assunção, Thelma Elita Colanzi, Rodrigo Bonifácio, Leonardo P. Tizzei, Rafael Maiani de Mello, Renato Cerqueira, Márcio Ribeiro, Carlos Lucena
2023 J jnl
IEEE Softw.
Rafael Maiani de Mello, Roberto Oliveira, Anderson G. Uchôa, Willian Nalepa Oizumi, Alessandro F. Garcia, Baldoino Fonseca, Fernanda de Mello
2022 conf
CIBSE
Cláudio Nascimento, Rafael Maiani de Mello
2021 J jnl
World Wide Web
Flavio Primo, Alexander B. Romanovsky, Rafael Maiani de Mello, Alessandro F. Garcia, Paolo Missier
2021 J jnl
CoRR
Rafael Maiani de Mello, Matheus Coelho
2021 conf
CIbSE
Rafael Maiani de Mello, Matheus Coelho
2021 conf
CHASE@ICSE
Rafael Maiani de Mello, José Aldo Silva da Costa, Benedito de Oliveira, Márcio Ribeiro, Baldoino Fonseca, Rohit Gheyi, Alessandro F. Garcia, Willy Tiengo
2021 conf
VEM
Luiz Felipi Junionello, Rafael Maiani de Mello, Roberto Oliveira, Leonardo da Silva Sousa, Alexander López, Alessandro Garcia
2021 J jnl
CoRR
Luiz Felipi Junionello, Rafael Maiani de Mello
2021 conf
CIbSE
Luiz Felipi Junionello, Rafael Maiani de Mello
2020 conf
SBES
João Antonio D. M. Bastos, Rafael Maiani de Mello, Alessandro Fabricio Garcia
2020 conf
SBES
Benedito de Oliveira, Márcio Ribeiro, José Aldo Silva da Costa, Rohit Gheyi, Guilherme Amaral, Rafael Maiani de Mello, Anderson Oliveira, Alessandro F. Garcia, Rodrigo Bonifácio, Baldoino Fonseca
2020 conf
SBQS
João Lucas Correia, Juliana Alves Pereira, Rafael Maiani de Mello, Alessandro Garcia, Baldoino Fonseca, Márcio Ribeiro, Rohit Gheyi, Marcos Kalinowski, Renato Cerqueira, Willy Tiengo
2020 J jnl
Inf. Softw. Technol.
Roberto Felicio Oliveira, Rafael Maiani de Mello, Eduardo Fernandes, Alessandro Garcia, Carlos Lucena
2020 conf
SBES
João Antonio D. M. Bastos, Rafael Maiani de Mello, Alessandro Garcia
2020 conf
SBES
Rodrigo Lima, Jairo Souza, Baldoino Fonseca, Leopoldo Teixeira, Rohit Gheyi, Márcio Ribeiro, Alessandro F. Garcia, Rafael Maiani de Mello
2019 conf
CESSER-IP@ICSE
Luiz Carvalho, Alessandro Garcia, Wesley K. G. Assunção, Rafael Maiani de Mello, Maria Julia de Lima
2019 A conf
ESEM
Rafael Maiani de Mello, Anderson G. Uchôa, Roberto Felicio Oliveira, Willian Nalepa Oizumi, Jairo Souza, Kleyson Mendes, Daniel Oliveira, Baldoino Fonseca, Alessandro Garcia
2019 conf
SBES
Rafael Maiani de Mello, Anderson G. Uchôa, Roberto Felicio Oliveira, Daniel Oliveira, Willian Nalepa Oizumi, Jairo Souza, Baldoino Fonseca, Alessandro Garcia
2019 conf
CHASE@ICSE
Rafael Maiani de Mello, Anderson G. Uchôa, Roberto Felicio Oliveira, Daniel Tenório Martins de Oliveira, Baldoino Fonseca, Alessandro Garcia, Fernanda de Mello
2019 conf
SEH@ICSE
Anderson G. Uchôa, Eduardo Fernandes, Baldoino Fonseca, Rafael Maiani de Mello, Caio Barbosa, Gabriel Nunes, Alessandro Garcia, Leopoldo Teixeira
2018 A* conf
ICSE
Leonardo da Silva Sousa, Anderson Oliveira, Willian Nalepa Oizumi, Simone D. J. Barbosa, Alessandro Garcia, Jaejoon Lee, Marcos Kalinowski, Rafael Maiani de Mello, Baldoino Fonseca, Roberto Felicio Oliveira, Carlos Lucena, Rodrigo B. de Paes
2018 conf
ICSE (Companion Volume)
Isabella Ferreira, Eduardo Fernandes, Diego Cedrim, Anderson G. Uchôa, Ana Carla Bibiano, Alessandro Garcia, João Lucas Correia, Filipe Santos, Gabriel Nunes, Caio Barbosa, Baldoino Fonseca, Rafael Maiani de Mello
2018 J jnl
Inf. Syst.
Leonardo da Silva Sousa, Rafael Maiani de Mello, Diego Cedrim, Alessandro Garcia, Paolo Missier, Anderson G. Uchôa, Anderson Oliveira, Alexander B. Romanovsky
2017 conf
ICSE-SEIP
Roberto Felicio Oliveira, Leonardo da Silva Sousa, Rafael Maiani de Mello, Natasha M. Costa Valentim, Adriana Lopes, Tayana Conte, Alessandro F. Garcia, Edson César Cunha de Oliveira, Carlos José Pereira de Lucena
2017 conf
SBES
Leonardo da Silva Sousa, Roberto Felicio Oliveira, Alessandro Garcia, Jaejoon Lee, Tayana Conte, Willian Nalepa Oizumi, Rafael Maiani de Mello, Adriana Lopes, Natasha M. Costa Valentim, Edson César Cunha de Oliveira, Carlos Lucena
2017 conf
CESI@ICSE
Marco Torchiano, Daniel Méndez Fernández, Guilherme Horta Travassos, Rafael Maiani de Mello
2017 J jnl
CoRR
Marco Torchiano, Daniel Méndez Fernández, Guilherme Horta Travassos, Rafael Maiani de Mello
2017 A conf
ESEM
Rafael Maiani de Mello, Roberto Felicio Oliveira, Alessandro Fabricio Garcia
2017 conf
CHASE@ICSE
Rafael Maiani de Mello, Roberto Felicio Oliveira, Leonardo da Silva Sousa, Alessandro Garcia
2017 conf
ESEC/SIGSOFT FSE
Diego Cedrim, Alessandro Garcia, Melina Mongiovi, Rohit Gheyi, Leonardo da Silva Sousa, Rafael Maiani de Mello, Baldoino Fonseca, Márcio Ribeiro, Alexander Chávez
2016 conf
BPM (Forum)
Rafael Maiani de Mello, Rebeca Campos Motta, Guilherme Horta Travassos
2016 conf
SBQS
Iuri Santos Souza, Rafael Maiani de Mello, Eduardo Santana de Almeida, Cláudia M. L. Werner, Guilherme H. Travassos
2016 A conf
ESEM
Rafael Maiani de Mello, Guilherme Horta Travassos
2015 conf
CIbSE
Rafael Maiani de Mello, Guilherme Horta Travassos
2015 A conf
ESEM
Rafael Maiani de Mello, Kathryn T. Stolee, Guilherme H. Travassos
2015 J jnl
J. Softw. Eng. Res. Dev.
Rafael Maiani de Mello, Pedro Correa da Silva, Guilherme Horta Travassos
2015 conf
CIbSE
Eldânae Nogueira Teixeira, Rafael Maiani de Mello, Rebeca Campos Motta, Cláudia Maria Lima Werner, Aline Vasconcelos
2014 conf
SBQS
Rafael Maiani de Mello, Pedro Correa da Silva, Guilherme H. Travassos
2014 conf
CIbSE
Rafael Maiani de Mello, Pedro Correa da Silva, Guilherme Travassos
2014 A conf
ESEM
Rafael Maiani de Mello, Pedro Correa da Silva, Guilherme Horta Travassos
2014 A conf
ESEM
Rafael Maiani de Mello, Pedro Correa da Silva, Per Runeson, Guilherme Horta Travassos
2014 J jnl
J. Univers. Comput. Sci.
Rafael Maiani de Mello, Eldânae Nogueira, Marcelo Schots, Cláudia Maria Lima Werner, Guilherme Horta Travassos
2013 A conf
EASE
Rafael Maiani de Mello, Guilherme H. Travassos
2013 A conf
ESEM
Rafael Maiani de Mello, Guilherme Horta Travassos
2012 conf
SBCARS
Rafael Maiani de Mello, Eldânae Teixeira, Marcelo Schots, Cláudia Maria Lima Werner, Guilherme Horta Travassos
2012 Misc conf
QUATIC
Jobson L. Massollar, Rafael Maiani de Mello, Guilherme H. Travassos
2011 conf
SBQS
Rafael Maiani de Mello, Jobson L. Massollar, Guilherme H. Travassos
2010 conf
SBES
Rafael Maiani de Mello, Wallace M. Pereira, Guilherme Horta Travassos
redb/extractors/pe_extractors/pe_signature_old.py
← Index redb/extractors/pe_extractors/pe_signature_old.py python
import inspect
import pefile

from hashlib import md5, sha1, sha256

from asn1crypto import cms, pem, x509, core

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PECertificate, PESigner


class PESignatureExtractor(PEExtractor):
    """
    RFC 3161 - Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)
    Section 2.4.2 defines the TSTInfo structure.
    https://tools.ietf.org/html/rfc3161#section-2.4.2

    Microsoft Authenticode Time Stamping Specification
    https://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx
    """

    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_signature"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    @staticmethod
    def _extract_certificate_info(cert_data):
        # self.log.debug(inspect.currentframe().f_code.co_name)

        certificate = x509.Certificate.load(cert_data)
        certificate_serial_number = format(certificate.serial_number, "x").upper()
        grouped_serial_number = ":".join(
            [
                certificate_serial_number[i : i + 2]
                for i in range(0, len(certificate_serial_number), 2)
            ]
        )
        return PECertificate(
            _id=format(certificate.serial_number, "x").upper(),
            certificate_serial_number=grouped_serial_number,
            certificate_issuer=certificate.issuer.human_friendly,
            certificate_subject=certificate.subject.human_friendly,
            certificate_valid_from=certificate["tbs_certificate"]["validity"][
                "not_before"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_valid_to=certificate["tbs_certificate"]["validity"][
                "not_after"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_thumbprint=sha1(cert_data).hexdigest().upper(),
            certificate_md5=md5(cert_data).hexdigest().upper(),
            certificate_sha256=sha256(cert_data).hexdigest().upper(),
        )

    @staticmethod
    def _parse_microsoft_time_stamp(ts_token):
        class TSTInfo(core.Sequence):
            _fields = [
                ("version", core.Integer),
                ("policy_id", core.ObjectIdentifier),
                ("message_imprint", core.Sequence),
                ("serial_number", core.Integer),
                ("gen_time", core.GeneralizedTime),
                ("accuracy", core.Sequence, {"optional": True}),
                ("ordering", core.Boolean, {"optional": True}),
                ("nonce", core.Integer, {"optional": True}),
                ("tsa", core.Sequence, {"optional": True}),
                ("extensions", core.Sequence, {"optional": True}),
            ]

        # The content should be SignedData
        signed_data = ts_token["content"]

        # The actual timestamp should be in the encapContentInfo
        encap_content_info = signed_data["encap_content_info"]
        tst_info = TSTInfo.load(encap_content_info["content"])

        # Extract the genTime field from TSTInfo, type(genTime): <class 'datetime.datetime'>
        gen_time = tst_info["gen_time"].native

        return gen_time

    def _extract_signer_info(self, signer):
        self.log.debug(inspect.currentframe().f_code.co_name)
        signing_time = None

        for attr_set in [signer["signed_attrs"], signer["unsigned_attrs"]]:
            if attr_set:
                for attribute in attr_set:
                    attr_type = attribute["type"].dotted
                    if attr_type == "1.2.840.113549.1.9.5":  # signingTime
                        signing_time = attribute["values"][0].native
                        break
                    elif (
                        attr_type == "1.3.6.1.4.1.311.3.2.1"
                        or attr_type == "1.3.6.1.4.1.311.3.3.1"
                    ):  # microsoft_time_stamp_token
                        try:
                            ts_token = attribute["values"][0].native
                            signing_time = self._parse_microsoft_time_stamp(ts_token)
                            self.log.debug(
                                f"Signing Time from Microsoft Time Stamp Token: {signing_time}"
                            )
                        except Exception as e:
                            self.log.error(
                                f"Error parsing Microsoft Time Stamp Token: {e}"
                            )
                            self.log.error("Token structure:", attribute["values"][0])
                    elif attr_type == "1.2.840.113549.1.9.6":  # counterSignature
                        counter_sig_values = attribute["values"]
                        for counter_sig_value in counter_sig_values:
                            try:
                                counter_sig_info = cms.SignerInfo.load(
                                    counter_sig_value.native
                                )
                                cs_signed_attrs = counter_sig_info["signed_attrs"]
                                for cs_attr in cs_signed_attrs:
                                    cs_attr_type = cs_attr["type"].dotted
                                    if (
                                        cs_attr_type == "1.2.840.113549.1.9.5"
                                    ):  # signingTime
                                        signing_time = cs_attr["values"][0].native
                                        self.log.debug(
                                            "Signing Time (from countersignature):",
                                            signing_time,
                                        )
                                        break
                                if signing_time:
                                    break
                            except Exception as e:
                                self.log.error(
                                    f"Error processing countersignature: {e}"
                                )
                    if signing_time:
                        break
            if signing_time:
                break
        signer_serial_number = format(
            signer["sid"].native["serial_number"], "x"
        ).upper()
        grouped_serial_number = " ".join(
            [
                signer_serial_number[i : i + 2]
                for i in range(0, len(signer_serial_number), 2)
            ]
        )
        return PESigner(
            # this is to avoid duplicate _id with the Signer certificate used to sign as they are in the same ES index
            _id=format(signer["sid"].native["serial_number"], "x").upper()
            + signer["digest_algorithm"]["algorithm"].native,
            signer_serial_number=grouped_serial_number,
            signer_digest_algorithm=signer["digest_algorithm"]["algorithm"].native,
            signer_signature_algorithm=signer["signature_algorithm"][
                "algorithm"
            ].native,
            signing_time=(
                signing_time.strftime("%Y-%m-%d %H:%M:%S") if signing_time else None
            ),
            # "countersigners": extract_countersigners(signer), # TODO: Implement this
        )

    def _extract_signature_info(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        address = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        size = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].Size

        addr_8 = address + 8
        signature_data = bytes(
            self.pe.write()[addr_8 : addr_8 + size]  # noqa E203
        )  # Ensure this is a bytes object
        if pem.detect(signature_data):
            signature_data = pem.unarmor(signature_data)

        content_info = cms.ContentInfo.load(signature_data)
        signed_data = content_info["content"]

        certificates = signed_data["certificates"]
        signers = signed_data["signer_infos"]

        certificates_list = []
        for cert in certificates:
            cert_info = self._extract_certificate_info(cert.chosen.dump())
            certificates_list.append(cert_info)

        signer_info_list = []
        for signer in signers:
            signer_info = self._extract_signer_info(signer)
            signer_info_list.append(signer_info)

        return certificates_list, signer_info_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            if self._is_signed():
                certificates_list, signers_list = self._extract_signature_info()
                # self.export_to_elastic([PECodeSigning(certificates_list, signers_list)])
                self.export_to_elastic(certificates_list, Tag.PE_CERTIFICATE.value)
                self.export_to_elastic(signers_list, Tag.PE_SIGNER.value)
            return True
        except Exception as e:
            self.log.error(f"Error extracting PE Signature: {e}")
            return None