Weihua Jiang

63 papers B 2Journal 41Unranked 20
YearRankTypeTitle / Venue / Authors
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Yong Wang, Huazhen Liu, Weihua Jiang, Peng Wu
2026 conf
CNML
Tianlong Ma, Xinyuan Wan, Kexin Bi, Bin Li, Weihua Jiang
2026 J jnl
Appl. Math. Lett.
Xun Cao, Weihua Jiang
2025 J jnl
IEEE Internet Things J.
Haoci Zheng, Yanfeng Zhao, Dongsheng Chen, Feng Tong, Weihua Jiang, Fumin Zhang
2025 J jnl
J. Nonlinear Sci.
Shuangrui Zhao, Pei Yu, Weihua Jiang, Hongbin Wang
2025 J jnl
IEEE Internet Things J.
Weihua Jiang, Caineng Pan, Feng Tong, Zhengliang Zhu, Lingji Xu
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Weihua Jiang, Caineng Pan, Feng Tong, Lingji Xu, Zhengliang Zhu
2025 J jnl
IEEE Internet Things J.
Yanfeng Zhao, Feng Tong, Weihua Jiang, Yuehai Zhou, Qiaoning Zheng
2024 J jnl
SIAM J. Appl. Dyn. Syst.
Meng Liu, Hongbin Wang, Weihua Jiang
2024 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Dongxu Geng, Hao Wang, Weihua Jiang, Hongbin Wang
2024 J jnl
IEEE Access
Derek Abbott, Sonia Aissa, Anuradha Annaswamy, Nirwan Ansari, Jun Cai, Kun-Shan Chen, Yixin Chen, J.-C. Chiao, Ayman El-Baz, Shaikh Fattah, Hoay Gooi, Maya B. Gokhale, Chih-Lin I, Giuseppe Iannaccone, Yumi Iwashita, Bruce Jacob, Abbas Jamalipour, Bahram Javidi, Weihua Jiang, Okyay Kaynak, Hulya Kirkici, Germano Lambert-Torres, Shengtao Li, Michal Mrozowski, Michele Nappi, Dalma Novak, Hugo Proença, Yi Qian, Zhihua Qu, Susanto Rahardja, Mehrdad Saif, Ali Serpengüzel, Peter H. Siegel, Ashitey Trebi-Ollennu, Daniela Tuninetti, Ge Wang, Keith A. Wear, Andreas Weisshaar, C. Patrick Yue, Enrico Zio
2024 conf
WUWNet
Haoci Zheng, Qiaoning Zheng, Weihua Jiang, Feng Tong, Dongsheng Chen
2024 J jnl
IEEE Wirel. Commun. Lett.
Jiaheng Li, Feng Tong, Weihua Jiang, Fumin Zhang
2024 J jnl
Digit. Signal Process.
Lingji Xu, Lixing Chen, Zixin Wang, Weihua Jiang, Zhenglin Li
2023 conf
ICSPCC
Zixin Wang, Lingji Xu, Lixing Chen, Weihua Jiang, Fanchang Zeng, Xinzhe Chen
2023 J jnl
IEEE Trans. Wirel. Commun.
Weihua Jiang, Roee Diamant
2022 J jnl
Remote. Sens.
Weihua Jiang, Xiaoyu Yang, Feng Tong, Yijun Yang, Tianhua Zhou
2022 J jnl
IEEE Trans. Veh. Technol.
Weihua Jiang, Feng Tong, Zhengliang Zhu
2022 J jnl
IEEE Internet Things J.
Weihua Jiang, Feng Tong
2022 J jnl
EURASIP J. Adv. Signal Process.
Weihua Jiang, Qiuyang Tao, Junhui Yao, Feng Tong, Fumin Zhang
2021 conf
WUWNet
Zhengliang Zhu, Feng Tong, Weihua Jiang, Fumin Zhang, Ziqiao Zhang
2020 J jnl
Proc. VLDB Endow.
Xiaowei Jiang, Yuejun Hu, Yu Xiang, Guangran Jiang, Xiaojun Jin, Chen Xia, Weihua Jiang, Jun Yu, Haitao Wang, Yuan Jiang, Jihong Ma, Li Su, Kai Zeng
2020 conf
CRC
Weihua Jiang, Tai Li, Bokai Shi
2020 conf
WNS3
Sian Jin, Sumit Roy, Weihua Jiang, Thomas R. Henderson
2020 conf
HCI (40)
Mei Rong, Ying Liu, Weihua Jiang
2019 conf
WUWNet
Siyuan Zheng, Weihua Jiang, Feng Tong, Bin Li, Yougan Chen
2019 conf
WNGW@WNS3
Weihua Jiang, Sumit Roy, Colin McGuire
2019 J jnl
IEEE Access
Jing Qiu, Weihua Jiang, Bingzhi Sun, Chunsheng Zhu, Lei Du, Zhaoquan Gu
2018 conf
WUWNet
Junkai Liu, Weihua Jiang, Feng Tong, Dongsheng Chen, Gangqiang Zhang, Yangze Dong
2018 J jnl
Int. J. Bifurc. Chaos
Qi An, Weihua Jiang
2017 conf
ICSPCC
Weihua Jiang, Xiaoyang Wang, Feng Tong
2017 conf
ICSPCC
Xiuling Cao, Feng Tong, Weihua Jiang, Dongsheng Chen
2017 conf
ICSPCC
Siyuan Zheng, Xiaoyang Wang, Weihua Jiang, Feng Tong
2017 J jnl
Int. J. Bifurc. Chaos
Rui Yuan, Weihua Jiang, Yong Wang
2016 conf
WUWNet
Weihua Jiang, Feng Tong, Yuehai Zhou
2016 conf
WUWNet
Weihua Jiang, Feng Tong, Dongsheng Chen
2015 conf
ISBI
Jiangtao Li, Weihua Jiang, Zheng Liang, Zhijie Zhao, Jianhao Li
2015 J jnl
Int. J. Bifurc. Chaos
Yuxiao Guo, Weihua Jiang
2015 J jnl
Appl. Math. Comput.
Weihua Jiang
2014 B conf
DSAA
Kai Zheng, Weihua Jiang
2014 J jnl
Int. J. Bifurc. Chaos
Pei Yu, Yuting Ding, Weihua Jiang
2014 J jnl
Appl. Math. Comput.
Weihua Jiang
2014 J jnl
J. Appl. Math.
Haitao Song, Qiaochu Wang, Weihua Jiang
2013 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Yuting Ding, Weihua Jiang, Pei Yu
2013 J jnl
J. Frankl. Inst.
Yuxiao Guo, Weihua Jiang, Ben Niu
2013 J jnl
Appl. Math. Comput.
Yuting Ding, Weihua Jiang, Pei Yu
2013 J jnl
Int. J. Bifurc. Chaos
Yuting Ding, Weihua Jiang, Pei Yu
2013 J jnl
Appl. Math. Comput.
Weihua Jiang
2013 J jnl
Int. J. Bifurc. Chaos
Ben Niu, Weihua Jiang
2013 J jnl
Int. J. Bifurc. Chaos
Shuang Guo, Weihua Jiang
2013 conf
IEEE BigData
Dong Yang, Xiang Zhong, Dong Yan, Fangqin Dai, Xusen Yin, Cheng Lian, Zhongliang Zhu, Weihua Jiang, Gansha Wu
2013 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Yanqiu Li, Weihua Jiang
2013 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Weihua Jiang, Ben Niu
2012 J jnl
J. Appl. Math.
Shuang Guo, Weihua Jiang
2011 J jnl
Int. J. Bifurc. Chaos
Yanqiu Li, Weihua Jiang
2010 J jnl
Appl. Math. Comput.
Weihua Jiang, Bin Wang
2009 J jnl
Appl. Math. Comput.
Weihua Jiang
2008 conf
CNSR
Kewang Zhang, Deyun Zhang, Weihua Jiang
2007 conf
SKG
Kewang Zhang, Deyun Zhang, Weihua Jiang
2007 conf
SNPD (3)
Weihua Jiang, Xiuming Li, Bin Wang
2005 B conf
CC
Weihua Jiang, Chao Mei, Bo Huang, Jianhui Li, Jiahua Zhu, Binyu Zang, Chuanqi Zhu
2004 J jnl
Proc. IEEE
Weihua Jiang, Kiyoshi Yatsui, Ken Takayama, Mitsuo Akemoto, Eiji Nakamura, Naohiro Shimizu, Akira Tokuchi, Sergei N. Rukin, Victor Tarasenko, Alexei N. Panchenko
2004 J jnl
Proc. IEEE
Timothy J. Renk, Paula P. Provencio, Somuri V. Prasad, Anatoli S. Shlapakovski, Anatoly V. Petrov, Kiyoshi Yatsui, Weihua Jiang, Hisayuki Suematsu
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