Haining Wang

46 papers B 1C 4Misc 1Journal 30Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Qiang Li, XiangRui Zhang, Haining Wang
2026 J jnl
CoRR
Haining Wang, Jason Clark, Angelica Peña
2025 C conf
INDIN
Pengwu Liu, Yufu Hao, Huaiping Jin, Haining Wang, Shuangliang Tian, Hao Fang
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Ke Wu, Komera Musoni Bertin, Ziyang Liang, Haining Wang, Fuhao Mo
2025 J jnl
Eng. Appl. Artif. Intell.
Fuhao Mo, Zhi Yang, Yiran Cui, Dongxi Ma, Haining Wang
2025 J jnl
Comput. Mater. Continua
Hainan Wang, Junjie Hou, Haining Wang, Meng Wang, Yuting Zhu, Wenyu Zhang
2025 conf
ACL (Findings)
Kang He, Yuzhe Ding, Haining Wang, Fei Li, Chong Teng, Donghong Ji
2025 J jnl
CoRR
Kang He, Yuzhe Ding, Haining Wang, Fei Li, Chong Teng, Donghong Ji
2025 J jnl
CoRR
Vaishnav Ramesh, Junliang Liu, Haining Wang, Md Jahidul Islam
2025 C conf
INDIN
Junyu Luo, Huaiping Jin, Haining Wang, Shuangliang Tian, Nanjun Li
2025 Misc conf
ICASSP
Kang He, Yuzhe Ding, Bobo Li, Haining Wang, Fei Li, Chong Teng, Donghong Ji
2025 J jnl
CoRR
Vaishnav Ramesh, Haining Wang, Md Jahidul Islam
2025 J jnl
Expert Syst. Appl.
Wenxuan Tang, Qilong Zhang, Ling Li, Ruoyu Chen, Haihang Li, Haining Wang, Xin Liu
2025 J jnl
CoRR
XiangRui Zhang, Zeyu Chen, Haining Wang, Qiang Li
2025 conf
KDD (2)
Mengtao Yan, Qi Wang, Haining Wang, Ruizhi Chengze, Yi Zhang, Hongsheng Liu, Zidong Wang, Fan Yu, Qi Qi, Hao Sun
2025 J jnl
CoRR
Mengtao Yan, Qi Wang, Haining Wang, Ruizhi Chengze, Yi Zhang, Hongsheng Liu, Zidong Wang, Fan Yu, Qi Qi, Hao Sun
2025 conf
KDD (2)
Jian Li, Han Wan, Ning Lin, Yu-Liang Zhan, Ruizhi Chengze, Haining Wang, Yi Zhang, Hongsheng Liu, Zidong Wang, Fan Yu, Hao Sun
2025 J jnl
CoRR
Jian Li, Han Wan, Ning Lin, Yu-Liang Zhan, Ruizhi Chengze, Haining Wang, Yi Zhang, Hongsheng Liu, Zidong Wang, Fan Yu, Hao Sun
2025 C conf
INDIN
Chengzhi Yuan, Hao Fang, Haining Wang, Shuangliang Tian, Hui Zhang
2025 J jnl
Digit. Scholarsh. Humanit.
Xin Xie, Jiangqiong Li, Haining Wang
2025 conf
NAACL (Findings)
Yuzhe Yang, Yifei Zhang, Yan Hu, Yilin Guo, Ruoli Gan, Yueru He, Mingcong Lei, Xiao Zhang, Haining Wang, Qianqian Xie, Jimin Huang, Honghai Yu, Benyou Wang
2024 conf
ISSCC
Zhong Tang, Yuyan Liu, Pengpeng Chen, Haining Wang, Xiaopeng Yu, Kofi A. A. Makinwa, Nianxiong Nick Tan
2024 conf
VLSI Technology and Circuits
Zhong Tang, Haining Wang, Xiaopeng Yu, Kofi A. A. Makinwa, Nianxiong Nick Tan
2024 J jnl
IEEE J. Solid State Circuits
Zhong Tang, Yuyan Liu, Pengpeng Chen, Haining Wang, Xiao-Peng Yu, Kofi A. A. Makinwa, Nianxiong Nick Tan
2024 J jnl
CoRR
Ruiping Ren, Xing Yao, Shu Cole, Haining Wang
2024 J jnl
CoRR
Haocong Li, Yaxin Zhang, Long Cheng, Wenjia Niu, Haining Wang, Qiang Li
2024 conf
ACL (Findings)
Haining Wang, Kang He, Bobo Li, Lei Chen, Fei Li, Xu Han, Chong Teng, Donghong Ji
2024 J jnl
CoRR
Yuzhe Yang, Yifei Zhang, Yan Hu, Yilin Guo, Ruoli Gan, Yueru He, Mingcong Lei, Xiao Zhang, Haining Wang, Qianqian Xie, Jimin Huang, Honghai Yu, Benyou Wang
2024 conf
LREC/COLING
Lei Chen, Bobo Li, Li Zheng, Haining Wang, Zixiang Meng, Runfeng Shi, Hao Fei, Jun Zhou, Fei Li, Chong Teng, Donghong Ji
2023 J jnl
IEEE J. Biomed. Health Informatics
Minghan Fu, Meiyun Wang, Yaping Wu, Na Zhang, Yongfeng Yang, Haining Wang, Yun Zhou, Yue Shang, Fang-Xiang Wu, Hairong Zheng, Dong Liang, Zhanli Hu
2023 J jnl
Comput. Methods Programs Biomed.
Xianfan Gu, Yu Zhang, Wen Zeng, Sihua Zhong, Haining Wang, Dong Liang, Zhenlin Li, Zhanli Hu
2022 conf
ISCIT
Feng Pei, Yongqi Liu, Shifeng Ou, Haining Wang
2022 J jnl
Comput. Methods Programs Biomed.
Zhengyong Huang, Sijuan Zou, Guoshuai Wang, Zixiang Chen, Hao Shen, Haiyan Wang, Na Zhang, Lu Zhang, Fan Yang, Haining Wang, Dong Liang, Tianye Niu, Xiaohua Zhu, Zhanli Hu
2022 J jnl
CoRR
Zhengyong Huang, Sijuan Zou, Guoshuai Wang, Zixiang Chen, Hao Shen, Haiyan Wang, Na Zhang, Lu Zhang, Fan Yang, Haining Wang, Dong Liang, Tianye Niu, Xiaohua Zhu, Zhanli Hu
2022 J jnl
Connect. Sci.
Zaiyang Yu, Shuang Li, Linjun Sun, Liang Liu, Haining Wang
2022 J jnl
Comput. Biol. Medicine
Zhengyong Huang, Si Tang, Zixiang Chen, Guoshuai Wang, Hao Shen, Yun Zhou, Haining Wang, Wei Fan, Dong Liang, Yingying Hu, Zhanli Hu
2022 J jnl
CoRR
Tongyue Shi, Siyu Tao, Haining Wang
2021 J jnl
Displays
Changshuo Wang, Chen Wang, Weijun Li, Haining Wang
2021 J jnl
IEEE Access
Jiajia Wu, Guangliang Han, Haining Wang, Hang Yang, Qingqing Li, Dongxu Liu, Fangjian Ye, Peixun Liu
2021 J jnl
Displays
Baoli Lu, Yu He, Haining Wang
2020 J jnl
IEEE Commun. Stand. Mag.
Yue Wang, Ray Forbes, Uri Elzur, John Strassner, Antonio Gamelas, Haining Wang, Shucheng Liu, Luca Pesando, Xiangfeng Yuan, Shengming Cai
2019 J jnl
IEEE Access
Zhanyu Ma, Yifeng Ding, Shaoguo Wen, Jiyang Xie, Yifeng Jin, Zhongwei Si, Haining Wang
2019 C conf
ICIS
Haining Wang, Jimmy Huang, Zhewei Zhang
2018 J jnl
IEEE Commun. Stand. Mag.
Yue Wang, Ray Forbes, Chris Cavigioli, Haining Wang, Antonio Gamelas, Archie Wade, John Strassner, Shengming Cai, Shucheng Liu
2008 conf
CSSE (1)
Haining Wang, Huifeng Xue, Mengmeng Ge
1998 B conf
MASCOTS
Haining Wang, Carey L. Williamson
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