Manhua Liu

77 papers A 1B 1C 1Journal 45Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
Neural Networks
Hongrui Liu, Yuanyuan Gui, Binglei Zhao, Hui Lu, Manhua Liu
2026 J jnl
Pattern Recognit.
Zhiyong Han, Yelin Shi, Zhao Zhang, Mu Li, Haiguo Zhang, Jingze Tan, Wentian Zhen, Tingting Liu, Xueying Wang, Chengyan Wang, Jiucun Wang, Li Jin, Sijia Wang, Manhua Liu, Jinxi Li
2026 J jnl
IEEE Signal Process. Lett.
Jimin Joung, Yuan Tian, Yang Wang, Jian Zhang, Manhua Liu
2025 J jnl
Neurocomputing
Aitong Liu, Yelin Shi, Ajay Kumar, Xin Chen, Manhua Liu
2025 J jnl
Expert Syst. Appl.
Manhua Liu, Aitong Liu, Yelin Shi, Shuxin Liu
2025 J jnl
IEEE Trans. Medical Imaging
Rizhi Ding, Hui Lu, Manhua Liu
2025 conf
BIBM
Rizhi Ding, Junyan Yu, Manhua Liu
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Tianyu Li, Manhua Liu
2025 conf
PRIME@MICCAI
Zhijian Huang, Manhua Liu
2024 J jnl
Pattern Recognit.
Hongrui Liu, Yuanyuan Gui, Hui Lu, Manhua Liu
2024 J jnl
Pattern Anal. Appl.
Hongrui Liu, Haochen Xu, Jinheng Qiu, Shizhe Wu, Manhua Liu
2024 J jnl
Nat. Mac. Intell.
Yue Huang, Chengguang Zhu, Xiaokang Yang, Manhua Liu
2024 J jnl
IEEE J. Biomed. Health Informatics
Hsienchih Ting, Manhua Liu
2024 J jnl
Medical Image Anal.
Haiyan Zhao, Hongjie Cai, Manhua Liu
2023 J jnl
IEEE J. Biomed. Health Informatics
Xingyu Gao, Hongjie Cai, Manhua Liu
2023 J jnl
Neuroinformatics
Hongjie Cai, Aojie Li, Guangjun Yu, Xiujun Yang, Manhua Liu
2023 J jnl
IEEE J. Biomed. Health Informatics
Xingyu Gao, Hongrui Liu, Feng Shi, Dinggang Shen, Manhua Liu
2023 J jnl
Sensors
Jiani Zhu, Youwei Ma, Guoqing Ding, Manhua Liu, Xin Chen
2023 conf
PRIME@MICCAI
Xingyu Gao, Feng Shi, Dinggang Shen, Manhua Liu
2023 J jnl
IEEE Trans. Medical Imaging
Hongjie Cai, Yue Gao, Manhua Liu
2023 conf
MTSAIL/LEAF/AI4Treat/MMMI/REMIA@MICCAI
Haixing Dai, Mengxuan Hu, Qing Li, Lu Zhang, Lin Zhao, Dajiang Zhu, Ibai Díez, Jorge Sepulcre, Fan Zhang, Xingyu Gao, Manhua Liu, Quanzheng Li, Sheng Li, Tianming Liu, Xiang Li
2023 J jnl
CoRR
Haixing Dai, Mengxuan Hu, Qing Li, Lu Zhang, Lin Zhao, Dajiang Zhu, Ibai Díez, Jorge Sepulcre, Fan Zhang, Xingyu Gao, Manhua Liu, Quanzheng Li, Sheng Li, Tianming Liu, Xiang Li
2023 J jnl
Comput. Medical Imaging Graph.
Xingyu Gao, Feng Shi, Dinggang Shen, Manhua Liu
2023 J jnl
IEEE Trans. Biom. Behav. Identity Sci.
Yelin Shi, Zhao Zhang, Shuxin Liu, Manhua Liu
2022 J jnl
IEEE J. Biomed. Health Informatics
Xingyu Gao, Feng Shi, Dinggang Shen, Manhua Liu
2021 conf
CCBR
Haochen Xu, Manhua Liu
2021 B conf
IJCB
Yelin Shi, Manhua Liu
2021 J jnl
Pattern Recognit.
Zhao Zhang, Shuxin Liu, Manhua Liu
2021 J jnl
IEEE Trans. Inf. Forensics Secur.
Manhua Liu, Peng Qian
2021 ed.
CCBR
Jianjiang Feng, Junping Zhang, Manhua Liu, Yuchun Fang
2020 J jnl
NeuroImage
Manhua Liu, Fan Li, Hao Yan, Kundong Wang, Yixin Ma, Li Shen, Mingqing Xu
2020 conf
CVPR Workshops
Xijie Huang, Peng Qian, Manhua Liu
2019 J jnl
IEEE Wirel. Commun. Lett.
Zhongke Ma, Manhua Liu, Hao Yan, Lin Lin
2019 J jnl
IEEE J. Biomed. Health Informatics
Ruoxuan Cui, Manhua Liu
2019 conf
ICB
Peng Qian, Aojie Li, Manhua Liu
2019 conf
ICIT
Farzaneh Elahifasaee, Manhua Liu, Ming Yang
2019 conf
PRIME@MICCAI
Aojie Li, Ling Yue, Manhua Liu, Shifu Xiao
2019 J jnl
Comput. Medical Imaging Graph.
Ruoxuan Cui, Manhua Liu, Alzheimer's Disease Neuroimaging Initiative
2018 J jnl
Comput. Medical Imaging Graph.
Fan Li, Manhua Liu, Alzheimer's Disease Neuroimaging Initiative
2018 J jnl
Frontiers Neuroinformatics
Manhua Liu, Danni Cheng, Weiwu Yan, Alzheimer's Disease Neuroimaging Initiative
2018 J jnl
Secur. Commun. Networks
Manhua Liu, Shuxin Liu, Weiwu Yan
2018 conf
ISBI
Ruoxuan Cui, Manhua Liu, Gang Li
2018 J jnl
Neuroinformatics
Manhua Liu, Danni Cheng, Kundong Wang, Yaping Wang
2017 conf
CISP-BMEI
Danni Cheng, Manhua Liu
2017 conf
MLMI@MICCAI
Danni Cheng, Manhua Liu
2017 J jnl
Soft Comput.
Weiwu Yan, Jialong Li, Manhua Liu, Xiaohui Bai, Huihe Shao
2017 conf
CCBR
Huinan Jiang, Manhua Liu
2017 J jnl
Pattern Recognit.
Shuxin Liu, Manhua Liu, Zongyuan Yang
2016 J jnl
EURASIP J. Adv. Signal Process.
Shuxin Liu, Manhua Liu, Zhongyuan Yang
2016 conf
CCBR
Ruoxuan Cui, Minyi Liu, Manhua Liu
2016 conf
CCBR
Kaifeng Wei, Manhua Liu
2016 conf
ICB
Shuxin Liu, Manhua Liu, Zongyuan Yang
2015 conf
ICIC (2)
Xiaoying Chen, Kaifeng Wei, Manhua Liu
2015 J jnl
IEEE Trans. Inf. Forensics Secur.
Manhua Liu, Xiaoying Chen, Xiaoduan Wang
2015 conf
ICIC (1)
Kaifeng Wei, Xiaoying Chen, Manhua Liu
2015 C conf
ICICS
Manhua Liu, Shuxin Liu
2014 J jnl
Inf. Sci.
Manhua Liu, Shuxin Liu, Qijun Zhao
2014 J jnl
Neuroinformatics
Manhua Liu, Daoqiang Zhang, Dinggang Shen
2013 conf
CCBR
Xiaoduan Wang, Manhua Liu
2013 conf
ISBI
Yaping Wang, Manhua Liu, Lei Guo, Dinggang Shen
2013 conf
MLMI
Manhua Liu, Heung-Il Suk, Dinggang Shen
2012 conf
MICCAI (1)
Feng Shi, Li Wang, Guorong Wu, Yu Zhang, Manhua Liu, John H. Gilmore, Weili Lin, Dinggang Shen
2012 J jnl
NeuroImage
Manhua Liu, Daoqiang Zhang, Dinggang Shen
2012 conf
ICB
Shuxin Liu, Manhua Liu
2012 conf
MLMI
Manhua Liu, Daoqiang Zhang, Pew-Thian Yap, Dinggang Shen
2012 J jnl
Pattern Recognit.
Manhua Liu, Pew-Thian Yap
2012 conf
MICCAI (3)
Manhua Liu, Daoqiang Zhang, Pew-Thian Yap, Dinggang Shen
2011 J jnl
Sensors
Jinfeng Yang, Wei Tao, Manhua Liu, Yongjie Zhang, Haibo Zhang, Hui Zhao
2010 J jnl
Pattern Recognit.
Manhua Liu
2009 J jnl
Pattern Recognit.
Manhua Liu, Xudong Jiang, Alex C. Kot
2007 A conf
ICME
Manhua Liu, Xudong Jiang, Alex C. Kot
2007 J jnl
Pattern Recognit.
Manhua Liu, Xudong Jiang, Alex ChiChung Kot
2006 conf
ICPR (1)
Manhua Liu, Xudong Jiang, Alex ChiChung Kot
2006 J jnl
IEEE Trans. Inf. Forensics Secur.
Xudong Jiang, Manhua Liu, Alex ChiChung Kot
2005 J jnl
EURASIP J. Adv. Signal Process.
Manhua Liu, Xudong Jiang, Alex ChiChung Kot
2004 conf
ICBA
Manhua Liu, Xudong Jiang, Alex ChiChung Kot
2004 conf
ICPR (1)
Xudong Jiang, Manhua Liu, Alex ChiChung Kot
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