Wanli Ma

107 papers B 40C 2Misc 3Journal 13Unranked 49
YearRankTypeTitle / Venue / Authors
2025 conf
EuroS&P (Workshops)
Ye Li, Abu Barkat Ullah, Dat Tran, Elisa Martínez Marroquín, Wanli Ma
2025 B conf
KES
Jiaxiang Mao, Wanli Ma, Dat Tran, Nenad Naumovski, Jane Kellett, Elisa Martínez Marroquin, Andrew Slattery, Yibeltal Alem
2024 J jnl
CoRR
Kalam Khadka, Abu Barkat Ullah, Wanli Ma, Elisa Martínez Marroquín
2023 B conf
TrustCom
Kalam Khadka, Abu Barkat Ullah, Wanli Ma, Elisa Martínez Marroquín, Yibeltal Alem
2021 J jnl
Log. J. IGPL
Binh Nguyen, Wanli Ma, Dat Tran
2021 conf
ICDM (Workshops)
Utkarsh Raghav, Elisa Martínez Marroquín, Wanli Ma
2020 conf
SSCI
Jiaxiang Mao, Dat Tran, Wanli Ma, Nenad Naumovski, Jane Kellett, Elisa Martínez Marroquín, Andrew Slattery
2020 conf
SSCI
Binh Nguyen, Wanli Ma, Dat Tran, Younjin Chung
2019 J jnl
Aust. J. Intell. Inf. Process. Syst.
Dang Nguyen, Dat Tran, Wanli Ma
2019 B conf
KES
Yue Qu, Dat Tran, Wanli Ma
2019 B conf
NSS
Huyen Tran, Dat Tran, Wanli Ma, Phuoc Nguyen
2019 conf
NER
Nga Tran, Dat Tran, Shuangzhe Liu, Wanli Ma, Tien Pham
2019 B conf
KES
Binh Nguyen, Wanli Ma, Dat Tran
2019 conf
ICONIP (4)
Huyen Tran, Dat Tran, Wanli Ma, Phuoc Nguyen
2018 conf
SOCO-CISIS-ICEUTE
Binh Nguyen, Wanli Ma, Dat Tran
2018 B conf
KES
Binh Nguyen, Wanli Ma, Dat Tran
2018 B conf
KES
Dang Nguyen, Dat Tran, Dharmendra Sharma, Wanli Ma
2018 B conf
ICPR
Binh Nguyen, Wanli Ma, Dat Tran
2018 B conf
KES
Dang Nguyen, Dat Tran, Dharmendra Sharma, Wanli Ma
2017 B conf
IJCNN
Trung Duy Pham, Dat Tran, Wanli Ma
2017 J jnl
Log. J. IGPL
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2017 B conf
NSS
Dang Nguyen, Dat Tran, Wanli Ma, Khoa Nguyen
2017 conf
ICONIP (6)
Trung Duy Pham, Dat Tran, Wanli Ma
2017 B conf
KES
Dang Nguyen, Dat Tran, Dharmendra Sharma, Wanli Ma
2017 B conf
IJCNN
Binh Nguyen, Dang Nguyen, Wanli Ma, Dat Tran
2017 B conf
KES
Dang Nguyen, Dat Tran, Dharmendra Sharma, Wanli Ma
2017 J jnl
Australas. J. Inf. Syst.
Trung Duy Pham, Dat Tran, Wanli Ma
2017 J jnl
J. Cyber Secur. Mobil.
Dang Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2017 B conf
IJCNN
Binh Nguyen, Dang Nguyen, Wanli Ma, Dat Tran
2016 B conf
ICPR
Trung Duy Pham, Dat Tran, Wanli Ma
2016 B conf
IJCNN
Tuan Nguyen, Phuong Duong, Trung Le, Anh Le, Viet Ngo, Dat Tran, Wanli Ma
2015 conf
CISIS-ICEUTE
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2015 conf
ICONIP (4)
Trung Duy Pham, Dat Tran, Wanli Ma
2015 conf
NER
Tien Pham, Wanli Ma, Dat Tran, Duc Su Tran, Dinh Q. Phung
2015 conf
ICONIP (4)
Salahiddin Altahat, Girija Chetty, Dat Tran, Wanli Ma
2015 conf
CISIS-ICEUTE
Dinh Q. Phung, Dat Tran, Wanli Ma, Tien Pham
2015 conf
ICONIP (4)
Trung Duy Pham, Dat Tran, Wanli Ma, Nga Thuy Tran
2015 B conf
IJCNN
Phuong Duong, Van Nguyen, Mi Dinh, Trung Le, Dat Tran, Wanli Ma
2015 conf
CISIS-ICEUTE
Dinh Q. Phung, Dat Tran, Wanli Ma, Tien Pham
2015 B conf
IJCNN
Khanh Nguyen, Trung Le, Vinh Lai, Duy Nguyen, Dat Tran, Wanli Ma
2015 J jnl
Neurocomputing
Tan Vo, Dat Tran, Wanli Ma
2014 B conf
NSS
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2014 B conf
ICPR
Phuoc Nguyen, Dat Tran, Xu Huang, Wanli Ma
2014 B conf
NSS
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2014 conf
FSKD
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2014 conf
SOCO-CISIS-ICEUTE
Tien Pham, Wanli Ma, Dat Tran, Phuoc Nguyen, Dinh Q. Phung
2014 B conf
IJCNN
Dinh Q. Phung, Dat Tran, Wanli Ma, Phuoc Nguyen, Tien Pham
2014 B conf
IJCNN
Tien Pham, Wanli Ma, Dat Tran, Phuoc Nguyen, Dinh Q. Phung
2014 B conf
IJCNN
Trung Le, Dat Tran, Wanli Ma, Thien Pham, Phuong Duong, Minh Nguyen
2014 J jnl
Int. J. Comput. Linguistics Appl.
Dat Huynh, Dat Tran, Wanli Ma, Dharmendra Sharma
2014 B conf
ESANN
Tan Vo, Dat Tran, Wanli Ma
2014 Misc conf
ICNC
Khoa Nguyen, Dat Tran, Wanli Ma, Dharmendra Sharma
2014 B conf
IJCNN
Wanli Ma, Dat Tran, Trung Le, Hong Lin, Shang-Ming Zhou
2014 B conf
ESANN
Dinh Q. Phung, Dat Tran, Wanli Ma, Phuoc Nguyen, Tien Pham
2013 conf
ICONIP (2)
Tien Pham, Wanli Ma, Dat Tran, Phuoc Nguyen, Dinh Q. Phung
2013 B conf
IJCNN
Tuan Hoang, Dat Tran, Xu Huang, Wanli Ma
2013 conf
ICONIP (2)
Phuoc Nguyen, Dat Tran, Tan Vo, Xu Huang, Wanli Ma, Dinh Q. Phung
2013 conf
PAKDD (1)
Phuoc Nguyen, Dat Tran, Trung Le, Xu Huang, Wanli Ma
2013 conf
ADMA (2)
Tien Pham, Wanli Ma, Dat Tran, Phuoc Nguyen, Dinh Q. Phung
2013 conf
PAKDD (2)
Trung Le, Dat Tran, Wanli Ma
2013 B conf
IJCNN
Trung Le, Dat Tran, Tien Tran, Khanh Nguyen, Wanli Ma
2013 conf
ICONIP (3)
Tan Vo, Dat Tran, Wanli Ma, Khoa Nguyen
2013 B conf
IJCNN
Trung Le, Dat Tran, Van Nguyen, Wanli Ma
2013 conf
IWANN (2)
Phuoc Nguyen, Dat Tran, Xu Huang, Wanli Ma
2013 B conf
IJCNN
Tan Vo, Dat Tran, Wanli Ma
2013 conf
IWANN (1)
Phuoc Nguyen, Dat Tran, Xu Huang, Wanli Ma
2013 J jnl
Neural Comput. Appl.
Trung Le, Dat Tran, Phuoc Nguyen, Wanli Ma, Dharmendra Sharma
2012 conf
ICA3PP (2)
Mohammad A. Rahman, Wanli Ma, Dat Tran, John Campbell
2012 B conf
IJCNN
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2012 conf
ICONIP (3)
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2012 B conf
FUZZ-IEEE
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 conf
ACSC
Dat Huynh, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 conf
ICONIP (2)
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 conf
CICLing (2)
Dat Huynh, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 conf
ICONIP (1)
Trung Le, Dat Tran, Tuan Hoang, Wanli Ma, Dharmendra Sharma
2011 conf
PAKDD (1)
Dat Huynh, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 J jnl
Behav. Inf. Technol.
John Campbell, Wanli Ma, Dale Kleeman
2011 conf
ICONIP (2)
Trung Le, Dat Tran, Phuoc Nguyen, Wanli Ma, Dharmendra Sharma
2011 conf
PAKDD (2)
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2011 B conf
IJCNN
Trung Le, Dat Tran, Phuoc Nguyen, Wanli Ma, Dharmendra Sharma
2010 conf
ICONIP (2)
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2010 conf
EUVIP
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2010 B conf
IEEE Congress on Evolutionary Computation
Wanli Ma, Dat Tran, Dharmendra Sharma
2010 B conf
IJCNN
Trung Le, Dat Tran, Wanli Ma, Dharmendra Sharma
2010 B conf
FUZZ-IEEE
Dat Tran, Wanli Ma, Dharmendra Sharma, Phuoc Nguyen
2010 B conf
NSS
Wanli Ma, John Campbell, Dat Tran, Dale Kleeman
2009 B conf
NSS
Rossilawati Sulaiman, Dharmendra Sharma, Wanli Ma, Dat Tran
2009 conf
RIVF
Dat Tran, Wanli Ma, Dharmendra Sharma
2008 C conf
ISI
Wanli Ma, Dat Tran, Dharmendra Sharma
2008 C conf
ISI
Dat Tran, Wanli Ma, Dharmendra Sharma
2008 conf
SoSE
Dat Tran, Wanli Ma, Dharmendra Sharma
2008 conf
ICARIS
Wanli Ma, Dat Tran, Dharmendra Sharma
2007 conf
KES (2)
Rossilawati Sulaiman, Dharmendra Sharma, Wanli Ma, Dat Tran
2007 conf
IMECS
Dat Tran, Wanli Ma, Dharmendra Sharma, Girija Chetty
2007 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Dat Tran, Wanli Ma, Dharmendra Sharma
2007 Misc conf
GrC
Dat Tran, Wanli Ma, Dharmendra Sharma, Thien Nguyen
2007 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Dat Tran, Wanli Ma, Dharmendra Sharma
2007 conf
IMECS
Wanli Ma, Dat Tran, Dharmendra Sharma
2007 Misc conf
GrC
Dat Tran, Wanli Ma, Dharmendra Sharma, Thien Nguyen
2007 J jnl
Inf. Secur. J. A Glob. Perspect.
John Campbell, Dale Kleeman, Wanli Ma
2007 conf
KES (2)
Wanli Ma, Dat Tran, Dharmendra Sharma
2006 conf
KES (3)
Dharmendra Sharma, Wanli Ma, Dat Tran, Mary Anderson
2006 conf
ICHIT
Wanli Ma, Dat Tran, Dharmendra Sharma
2006 conf
ACIS
John Campbell, Dale Kleeman, Wanli Ma
2006 conf
KES (3)
Wanli Ma, Dat Tran, Dharmendra Sharma, Abhishek Mathur
2005 conf
KES (1)
Wanli Ma, Dharmendra Sharma
2005 conf
KES (1)
Dharmendra Sharma, Wanli Ma, Dat Tran
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