Jairo R. Montoya-Torres

86 papers B 2C 5Misc 9Journal 53Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
J. Oper. Res. Soc.
Rafael David Tordecilla, Angie Ramírez-Villamil, Jairo R. Montoya-Torres, Oscar Nieto-Garzon, Oscar Fabián Velásquez-Rodríguez, Daniel Prato-Sánchez
2026 C conf
ICORES
Jairo R. Montoya-Torres
2026 J jnl
IEEE Access
Luis A. Gonzalez-Guevara, David Celeita, Alben Cardenas, Jairo R. Montoya-Torres
2025 conf
IN4PL (2)
Andrés Muñoz-Villamizar, Jairo R. Montoya-Torres, Christopher Mejía-Argueta, Julian Queirolo, Daniel Hernandez
2025 J jnl
Int. J. Prod. Res.
Yenny Alexandra Paredes-Astudillo, Valerie Botta-Genoulaz, Jairo R. Montoya-Torres, Martha Caro, Jose-Fernando Jimenez
2025 J jnl
Int. Trans. Oper. Res.
Rafael David Tordecilla, Jairo R. Montoya-Torres, William J. Guerrero
2024 C conf
SIMULTECH
Angie Ramírez-Villamil, Anicia Jaegler, Jairo R. Montoya-Torres
2024 conf
ICCL
Jesús Velásquez-Bermúdez, Carlos D. Paternina-Arboleda, Jairo R. Montoya-Torres
2024 J jnl
J. Simulation
José Ruiz-Meza, Ricardo Sotaquirá, Jairo R. Montoya-Torres
2024 J jnl
Int. J. Prod. Res.
Yenny Alexandra Paredes-Astudillo, Valerie Botta-Genoulaz, Jairo R. Montoya-Torres
2024 C conf
ICORES
María Sol Cavallieri, Elisabeth Viles, Jairo R. Montoya-Torres
2023 Misc conf
WSC
Rafael David Tordecilla, Jairo R. Montoya-Torres, William J. Guerrero
2023 conf
SOHOMA
Yenny A. Paredes-Astudillo, Jose-Fernando Jimenez, Jairo R. Montoya-Torres, Valerie Botta-Genoulaz
2023 J jnl
Comput. Ind. Eng.
Angie Ramírez-Villamil, Jairo R. Montoya-Torres, Anicia Jaegler, Juan M. Cuevas-Torres
2023 J jnl
Ann. Oper. Res.
Carlos A. Moreno-Camacho, Jairo R. Montoya-Torres, Anicia Jaegler
2023 J jnl
Int. Trans. Oper. Res.
Rafael David Tordecilla, Jairo R. Montoya-Torres, Carlos L. Quintero-Araujo, Javier Panadero, Angel A. Juan
2023 J jnl
J. Oper. Res. Soc.
Jairo R. Montoya-Torres, Carlos A. Moreno-Camacho, Mario C. Vélez-Gallego
2022 J jnl
Appl. Soft Comput.
José Ruiz-Meza, Julio Brito, Jairo R. Montoya-Torres
2022 conf
WEA
William Torres-Tapia, Jairo R. Montoya-Torres, José Ruiz-Meza
2022 ch.
Computational Intelligence Methodologies Applied to Sustainable Development Goals
José Ruiz-Meza, Julio Brito, Jairo R. Montoya-Torres
2022 J jnl
Adv. Oper. Res.
José Ruiz-Meza, Julio Brito, Jairo R. Montoya-Torres, Ana Castro-Vergara
2022 conf
WEA
William Torres-Tapia, Jairo R. Montoya-Torres, José Ruiz-Meza
2022 conf
ICCL
Angie Ramírez-Villamil, Jairo R. Montoya-Torres, Anicia Jaegler, Juan M. Cuevas-Torres, David Leonardo Cortés-Murcia, William J. Guerrero
2022 J jnl
Comput. Electron. Agric.
Nestor E. Caicedo Solano, Guisselle A. Garcia Llinas, Jairo R. Montoya-Torres
2022 J jnl
IEEE Access
David Leonardo Cortés-Murcia, William J. Guerrero, Jairo R. Montoya-Torres
2022 J jnl
Algorithms
Yenny Alexandra Paredes-Astudillo, Jairo R. Montoya-Torres, Valerie Botta-Genoulaz
2021 J jnl
Comput. Ind. Eng.
José Ruiz-Meza, Julio Brito, Jairo R. Montoya-Torres
2021 J jnl
Algorithms
Eliana María González-Neira, Jairo R. Montoya-Torres, Jose-Fernando Jimenez
2021 J jnl
Algorithms
Rafael David Tordecilla, Pedro J. Copado-Méndez, Javier Panadero, Carlos L. Quintero-Araujo, Jairo R. Montoya-Torres, Angel A. Juan
2021 J jnl
Comput. Ind. Eng.
Leandro do C. Martins, Eliana María González-Neira, Sara Hatami, Angel A. Juan, Jairo R. Montoya-Torres
2021 J jnl
Axioms
José Ruiz-Meza, Karen Meza-Peralta, Jairo R. Montoya-Torres, Jesús González-Feliu
2021 conf
APMS (3)
Jairo R. Montoya-Torres, Valerie Botta-Genoulaz, Nick Materzok, Þorgeir Páll Gíslason, Sélène Mendiela
2021 J jnl
Int. J. Inf. Decis. Sci.
Johanna Camargo-Perez, Jairo R. Montoya-Torres
2021 J jnl
Simul. Model. Pract. Theory
Rafael David Tordecilla, Angel A. Juan, Jairo R. Montoya-Torres, Carlos L. Quintero-Araujo, Javier Panadero
2021 J jnl
Ann. Oper. Res.
José Ruiz-Meza, Jairo R. Montoya-Torres
2021 J jnl
Int. Trans. Oper. Res.
Daniela Rojas Viloria, Elyn L. Solano-Charris, Andrés Muñoz-Villamizar, Jairo R. Montoya-Torres
2020 Misc conf
WSC
Rafael David Tordecilla, Javier Panadero, Angel A. Juan, Carlos L. Quintero-Araujo, Jairo R. Montoya-Torres
2020 Misc conf
WSC
Angie Ramírez-Villamil, Jairo R. Montoya-Torres, Anicia Jaegler
2020 J jnl
Comput. Electron. Agric.
Nestor E. Caicedo Solano, Guisselle A. Garcia Llinas, Jairo R. Montoya-Torres, Luis E. Ramírez Polo
2020 conf
WEA
Angie Ramírez-Villamil, Jairo R. Montoya-Torres, Anicia Jaegler
2019 J jnl
J. Simulation
Eliana María González-Neira, Jairo R. Montoya-Torres, Juan Pablo Caballero-Villalobos
2019 J jnl
Int. Trans. Oper. Res.
Carlos Alberto Vega-Mejia, Jairo R. Montoya-Torres, Sardar M. N. Islam
2019 J jnl
Ann. Oper. Res.
Carlos Alberto Vega-Mejia, Jairo R. Montoya-Torres, Sardar M. N. Islam
2019 conf
SOHOMA
Carlos A. Moreno-Camacho, Jairo R. Montoya-Torres, Anicia Jaegler
2019 J jnl
Comput. Oper. Res.
Santiago Sánchez-Herrera, Jairo R. Montoya-Torres, Elyn L. Solano-Charris
2019 conf
ICCL
Andrés Muñoz-Villamizar, Elyn L. Solano-Charris, Javier Santos, Jairo R. Montoya-Torres
2019 J jnl
Comput. Ind. Eng.
Eliana María González-Neira, Ana María Urrego-Torres, Ana María Cruz-Riveros, Catalina Henao-García, Jairo R. Montoya-Torres, Lina Paola Molina-Sánchez, Jose-Fernando Jimenez
2018 J jnl
Int. J. Web Inf. Syst.
Luis Fernando Morales-Alzate, Clara Mabel Solano-Vanegas, Angela Carrillo Ramos, Jairo R. Montoya-Torres, Ramón Fabregat, Jaime A. Pavlich-Mariscal
2017 J jnl
J. Decis. Syst.
Eliana María González-Neira, Jairo R. Montoya-Torres
2017 J jnl
Int. Trans. Oper. Res.
Carlos L. Quintero-Araujo, Juan Pablo Caballero-Villalobos, Angel A. Juan, Jairo R. Montoya-Torres
2017 conf
SOHOMA
Andrés Muñoz-Villamizar, Javier Santos, Jairo R. Montoya-Torres, Marta Ormazábal
2017 J jnl
Simul.
Jorge A. Alvarado-Valencia, Gabriela C. Tueti Silva, Jairo R. Montoya-Torres
2016 J jnl
Comput. Oper. Res.
Mario C. Vélez-Gallego, Jairo Maya, Jairo R. Montoya-Torres
2016 Misc conf
WSC
Carlos L. Quintero-Araujo, Angel A. Juan, Jairo R. Montoya-Torres, Andrés Muñoz-Villamizar
2016 J jnl
Comput. Ind. Eng.
Eliana María González-Neira, Rafael Guillermo García Cáceres, Juan Pablo Caballero-Villalobos, Lina Paola Molina-Sánchez, Jairo R. Montoya-Torres
2015 J jnl
Comput. Ind. Eng.
Jairo R. Montoya-Torres, Julián López Franco, Santiago Nieto Isaza, Heriberto Felizzola Jiménez, Nilson Herazo-Padilla
2015 conf
ICCL
Ana Ximena Halabi Echeverry, Jairo R. Montoya-Torres, Deborah Richards, Nelson Obregón Neira
2015 C conf
PRO-VE
Clara Mabel Solano-Vanegas, Angela Carrillo Ramos, Jairo R. Montoya-Torres
2015 J jnl
Ann. Oper. Res.
Johanna Camargo-Perez, Martha Helena Carrillo, Jairo R. Montoya-Torres
2015 J jnl
J. Simulation
Nilson Herazo-Padilla, Jairo R. Montoya-Torres, Santiago Nieto Isaza, Jorge A. Alvarado-Valencia
2015 conf
SOHOMA
Carlos A. Moreno-Camacho, Jairo R. Montoya-Torres
2014 conf
CIPLS
Helga J. Hernandez-Hernandez, Jairo R. Montoya-Torres, Fabricio Niebles Atencio
2014 J jnl
Int. J. Adv. Oper. Manag.
Jaime E. Amador-Fontalvo, Carlos D. Paternina-Arboleda, Jairo R. Montoya-Torres
2013 Misc conf
WSC
Andrés Muñoz-Villamizar, Jairo R. Montoya-Torres, Angel A. Juan, José Cáceres-Cruz
2013 J jnl
J. Heuristics
Jair J. De la Cruz, Carlos D. Paternina-Arboleda, Víctor Cantillo, Jairo R. Montoya-Torres
2013 Misc conf
WSC
Nilson Herazo-Padilla, Jairo R. Montoya-Torres, Andrés Muñoz-Villamizar, Santiago Nieto Isaza, Luis E. Ramírez Polo
2013 conf
DEST
Lucile Faure, Guillaume Battaia, Guillaume Marquès, Romain Guillaume, Carlos Alberto Vega-Mejia, Jairo R. Montoya-Torres, Andrés Muñoz-Villamizar, Carlos L. Quintero-Araujo
2013 B conf
SMC
Johanna Camargo-Perez, Jairo R. Montoya-Torres, Martha H. Carrillo Ramirez
2013 B conf
SMC
Jose-Fernando Jimenez, Abdelghani Bekrar, Damien Trentesaux, Jairo R. Montoya-Torres, Paulo Leitão
2012 C conf
CLEI
Fabricio Niebles Atencio, Elyn L. Solano-Charris, Jairo R. Montoya-Torres
2012 J jnl
Int. J. Adv. Oper. Manag.
Jairo R. Montoya-Torres, Fernando González-Solano, Milton Soto-Ferrari
2011 J jnl
J. Intell. Manuf.
Elyn L. Solano-Charris, Jairo R. Montoya-Torres, Carlos D. Paternina-Arboleda
2011 J jnl
J. Intell. Manuf.
Jairo R. Montoya-Torres
2011 J jnl
J. Intell. Manuf.
Jairo R. Montoya-Torres, Gonzalo Oñate Bello
2011 J jnl
Int. J. Inf. Syst. Supply Chain Manag.
Jairo R. Montoya-Torres, Fabián Vargas-Nieto
2011 conf
CIPLS
Luis Francisco López-Castro, Jairo R. Montoya-Torres
2010 J jnl
Ann. Oper. Res.
Jairo R. Montoya-Torres, Alejandra Gomez-Padilla
2010 J jnl
Int. J. Appl. Decis. Sci.
Jairo R. Montoya-Torres, Andres Aponte, Paula Rosas, Juan Pablo Caballero-Villalobos
2010 J jnl
Int. J. Oper. Res. Inf. Syst.
Jairo R. Montoya-Torres, Libardo S. Gómez-Vizcaíno, Elyn L. Solano-Charris, Carlos D. Paternina-Arboleda
2009 J jnl
Int. J. Inf. Syst. Supply Chain Manag.
Mauricio Núñez-Muñoz, Jairo R. Montoya-Torres
2009 J jnl
Int. J. Inf. Syst. Supply Chain Manag.
Gloria Rodríguez-Verján, Jairo R. Montoya-Torres
2009 Misc conf
WSC
Jairo R. Montoya-Torres, Edgar H. Alfonso Lizarazo, Edgar Gutierrez-Franco, Ana X. Halabi
2008 J jnl
Ann. Oper. Res.
Carlos D. Paternina-Arboleda, Jairo R. Montoya-Torres, Milton J. Acero-Dominguez, Maria C. Herrera-Hernandez
2008 Misc conf
WSC
Carlos D. Paternina-Arboleda, Jairo R. Montoya-Torres, Aldo Fabregas-Ariza
2007 Misc conf
WSC
Jairo R. Montoya-Torres, Gloria Rodríguez-Verján
2003 J jnl
J. Glob. Optim.
Jairo R. Montoya-Torres
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