Nazmul H. Siddique

82 papers A* 1B 6C 4Journal 55Unranked 14
YearRankTypeTitle / Venue / Authors
2025 J jnl
Expert Syst. Appl.
Md. Mijanur Rahman, Ashik Uzzaman, Fatema Khatun, Md. Aktaruzzaman, Nazmul H. Siddique
2025 J jnl
Neural Comput. Appl.
Md. Rajib Hossain, Mohammed Moshiul Hoque, M. Ali Akber Dewan, Enamul Hoque, Nazmul H. Siddique
2025 J jnl
Expert Syst. Appl.
Md. Rajib Hossain, Mohammed Moshiul Hoque, M. Ali Akber Dewan, Enamul Hoque, Nazmul H. Siddique
2025 J jnl
Int. J. Neural Syst.
Zahrul Jannat Peya, Mahfuza Akter Maria, Sk. Imran Hossain, M. A. H. Akhand, Nazmul H. Siddique
2025 J jnl
Pattern Recognit.
John Doherty, Bryan Gardiner, Emmett Kerr, Nazmul H. Siddique
2025 J jnl
Biomed. Signal Process. Control.
Md Najib Hasan, Md Ehashan Rabbi Pial, Sunanda Das, Nazmul H. Siddique, Hui Wang
2025 J jnl
Knowl. Based Syst.
Md. Rajib Hossain, Sadia Afroze, Asif Ekbal, Mohammed Moshiul Hoque, Nazmul H. Siddique
2024 B conf
IJCNN
John Doherty, Bryan Gardiner, Nazmul H. Siddique, Emmett Kerr
2024 J jnl
Sensors
Avishek Das, Moumita Sen Sarma, Mohammed Moshiul Hoque, Nazmul H. Siddique, M. Ali Akber Dewan
2024 J jnl
Eng. Appl. Artif. Intell.
Md. Rajib Hossain, Mohammed Moshiul Hoque, Nazmul H. Siddique, M. Ali Akber Dewan
2024 conf
IST
Yasir Ijaz, Sonya Coleman, Dermot Kerr, Nazmul H. Siddique, Cormac McAteer, Khoi Nguyen
2024 C conf
INDIN
Kevin McCready, Sonya Coleman, Dermot Kerr, Nazmul H. Siddique, Emmett Kerr, Yiannis Aloimonos, Cornelia Fermüller
2023 J jnl
Expert Syst. Appl.
Sunanda Das, Md. Samir Imtiaz, Nieb Neom, Nazmul H. Siddique, Hui Wang
2023 J jnl
IEEE Trans. Cogn. Dev. Syst.
Paresh Dhakan, Kathryn Kasmarik, Philip J. Vance, Iñaki Rañó, Nazmul H. Siddique
2023 J jnl
Neural Comput. Appl.
Md. Rajib Hossain, Mohammed Moshiul Hoque, Nazmul H. Siddique, Iqbal H. Sarker
2023 conf
ICAR
John Doherty, Bryan Gardiner, Emmett Kerr, Nazmul H. Siddique
2023 J jnl
Eng. Appl. Artif. Intell.
Md. Rajib Hossain, Mohammed Moshiul Hoque, Nazmul H. Siddique
2023 conf
AICS
James Gillespie, Iñaki Rañó, José Santos, Nazmul H. Siddique
2023 J jnl
IEEE Access
Avishek Das, Mohammed Moshiul Hoque, Omar Sharif, M. Ali Akber Dewan, Nazmul H. Siddique
2022 conf
MIET (2)
Zahrul Jannat Peya, Bipasha Zaman, M. A. H. Akhand, Nazmul H. Siddique
2022 conf
MIET (1)
Md. Tasnin Tanvir, Asfia Moon Oishy, M. A. H. Akhand, Nazmul H. Siddique
2022 conf
ICPRAI (2)
John Doherty, Bryan Gardiner, Emmett Kerr, Nazmul H. Siddique, Sunilkumar S. Manvi
2022 conf
MIET (1)
Rabindra Nath Nandi, Aminul Haque Palash, Nazmul H. Siddique, Mohammed Golam Zilani
2022 J jnl
CoRR
Rabindra Nath Nandi, Aminul Haque Palash, Nazmul H. Siddique, Mohammed Golam Zilani
2022 J jnl
J. King Saud Univ. Comput. Inf. Sci.
M. I. R. Shuvo, M. A. H. Akhand, Nazmul H. Siddique
2022 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Eftekhar Hossain, Omar Sharif, Mohammed Moshiul Hoque, M. Ali Akber Dewan, Nazmul H. Siddique, Md. Azad Hossain
2022 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Christopher Millar, Nazmul H. Siddique, Emmett Kerr
2021 J jnl
IEEE Access
Lamia Alam, Mohammed Moshiul Hoque, M. Ali Akber Dewan, Nazmul H. Siddique, Iñaki Rañó, Iqbal H. Sarker
2021 J jnl
IEEE Access
Md. Rajib Hossain, Mohammed Moshiul Hoque, M. Ali Akber Dewan, Nazmul H. Siddique, Md. Nazmul Islam, Iqbal H. Sarker
2021 J jnl
Expert Syst. Appl.
Md. Rajib Hossain, Mohammed Moshiul Hoque, Nazmul H. Siddique, Iqbal H. Sarker
2021 conf
ISWCS
Kunal Soni, Syed Faraz Hasan, Mohammad Hossain Dehghan Shoar, Nazmul H. Siddique
2021 J jnl
IEEE Access
Sunanda Das, Awal Ahmed Fime, Nazmul H. Siddique, M. M. A. Hashem
2021 J jnl
IEEE Trans. Cogn. Dev. Syst.
Paresh Dhakan, Kathryn Kasmarik, Iñaki Rañó, Nazmul H. Siddique
2020 J jnl
Neural Comput. Appl.
Kazi Md. Rokibul Alam, Nazmul H. Siddique, Hojjat Adeli
2020 J jnl
Appl. Soft Comput.
M. A. H. Akhand, Safial Islam Ayon, Shaikh Akib Shahriyar, Nazmul H. Siddique, Hojjat Adeli
2020 A* conf
CcS
Christopher Millar, Nazmul H. Siddique, Emmett Kerr
2019 B conf
IJCNN
Kazi Shah Nawaz Ripon, Lasker Ershad Ali, Nazmul H. Siddique, Jinwen Ma
2019 J jnl
Frontiers Neurorobotics
Attila Korik, Ronen Sosnik, Nazmul H. Siddique, Damien Coyle
2019 C conf
ISPA
Ryan Melaugh, Nazmul H. Siddique, Sonya Coleman, Pratheepan Yogarajah
2019 C conf
IJCCI
M. I. R. Shuvo, M. A. H. Akhand, Nazmul H. Siddique
2019 C conf
IJCCI
M. A. H. Akhand, Md. Ijaj Sayim, Shuvendu Roy, Nazmul H. Siddique
2019 J jnl
Expert Syst. Appl.
Sk. Imran Hossain, M. A. H. Akhand, M. I. R. Shuvo, Nazmul H. Siddique, Hojjat Adeli
2019 conf
SSCI
James Gillespie, Iñaki Rañó, Nazmul H. Siddique, José Santos, Mehdi Khamassi
2018 J jnl
Frontiers Neurorobotics
Paresh Dhakan, Kathryn E. Merrick, Iñaki Rañó, Nazmul H. Siddique
2017 J jnl
Paladyn J. Behav. Robotics
Nazmul H. Siddique, Paresh Dhakan, Iñaki Rañó, Kathryn E. Merrick
2017 conf
GBCIC
Alain Desire Bigirimana, Nazmul H. Siddique, Damien Coyle
2017 J jnl
Cogn. Comput.
Nazmul H. Siddique, Hojjat Adeli
2017 conf
TAROS
James Gillespie, Iñaki Rañó, Nazmul H. Siddique, José Santos, Mehdi Khamassi
2016 B conf
SMC
Alain Desire Bigirimana, Nazmul H. Siddique, Damien Coyle
2016 J jnl
Paladyn J. Behav. Robotics
Kathryn E. Merrick, Nazmul H. Siddique, Iñaki Rañó
2016 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Nazmul H. Siddique, Hojjat Adeli
2016 B conf
SMC
Attila Korik, Ronen Sosnik, Nazmul H. Siddique, Damien Coyle
2016 J jnl
Expert Syst. J. Knowl. Eng.
Nazmul H. Siddique, Hojjat Adeli
2016 J jnl
Int. J. Artif. Intell. Tools
Nazmul H. Siddique, Hojjat Adeli
2015 J jnl
Int. J. Artif. Intell. Tools
Nazmul H. Siddique, Hojjat Adeli
2015 conf
EMBC
Attila Korik, Nazmul H. Siddique, Ronen Sosnik, Damien Coyle
2015 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Nazmul H. Siddique, Hojjat Adeli
2015 J jnl
Int. J. Artif. Intell. Tools
Nazmul H. Siddique, Hojjat Adeli
2015 J jnl
Cogn. Comput.
Nazmul H. Siddique, Hojjat Adeli
2014 J jnl
Int. J. Appl. Pattern Recognit.
Akira Ikuta, Nazmul H. Siddique
2014 book
Nazmul H. Siddique
2014 J jnl
Int. J. Neural Syst.
Nazmul H. Siddique, Bernard Widrow, Liam P. Maguire
2014 J jnl
Integr. Comput. Aided Eng.
Salmiah Ahmad, Nazmul H. Siddique, M. Osman Tokhi
2014 J jnl
Int. J. Artif. Intell. Tools
Nazmul H. Siddique, Hojjat Adeli
2014 J jnl
J. Inf. Sci. Eng.
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty
2014 J jnl
Int. J. Artif. Intell. Tools
Nazmul H. Siddique, Hojjat Adeli
2013 J jnl
IEEE Trans. Cybern.
Eric Nichols, Liam McDaid, Nazmul H. Siddique
2013 J jnl
Wirel. Pers. Commun.
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty
2013 ch.
Intrinsically Motivated Learning in Natural and Artificial Systems
Ulrich Nehmzow, Yiannis Gatsoulis, Emmett Kerr, Joan Condell, Nazmul H. Siddique, T. Martin McGinnity
2013 J jnl
Wirel. Pers. Commun.
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty, Xuemei Ding, Wei Gao
2012 J jnl
Int. J. Comput. Intell. Appl.
Salmiah Ahmad, Nazmul H. Siddique, M. Osman Tokhi
2012 J jnl
Wirel. Pers. Commun.
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty
2012 J jnl
Paladyn J. Behav. Robotics
Md. Ahsan Habib, Mohammad S. Alam, Nazmul H. Siddique
2011 J jnl
J. Intell. Robotic Syst.
Salmiah Ahmad, Nazmul H. Siddique, Mohammad Osman Tokhi
2011 J jnl
Evol. Syst.
Kazi Shah Nawaz Ripon, Nazmul H. Siddique, Jim Tørresen
2011 J jnl
IEEE Trans. Veh. Technol.
Syed Faraz Hasan, Xuemei Ding, Nazmul H. Siddique, Shyam S. Chakraborty
2010 conf
CSNDSP
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty, Swades De
2010 conf
CSNDSP
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty
2010 J jnl
IEEE Commun. Lett.
Syed Faraz Hasan, Nazmul H. Siddique, Shyam S. Chakraborty
2009 B conf
SMC
Laxmidhar Behera, P. Prem Kumar, Nazmul H. Siddique, Girijesh Prasad
2007 J jnl
Artif. Intell. Rev.
Nazmul H. Siddique, Bala P. Amavasai
2003 B conf
SMC
Karol Warne, Girijesh Prasad, Nazmul H. Siddique, Liam P. Maguire
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