Haibo Xu

64 papers A 1B 6C 2Journal 33Unranked 22
YearRankTypeTitle / Venue / Authors
2026 J jnl
npj Digit. Medicine
Yuxuan Zeng, Gonghao Ling, Haojie Zhang, Wei Cao, Xuan Zheng, Xiaoxian Deng, Lan Lan, Rongqing Sun, Xintian Liu, Lin Tian, Haibo Xu, Ziyu Wang, Gangcheng Zhang
2025 A conf
IROS
Yuanchen Li, Zhichao Wu, Xia Dong, Haibo Xu, Kedian Wang
2025 conf
PRCV (15)
Tingting Xian, Haibo Xu, Jiachang Wang, Kurban Ubul
2025 J jnl
CoRR
Zi Wang, Mingkai Huang, Zhang Shi, Hongjie Hu, Lan Lan, Hui Zhang, Yan Li, Xi Hu, Qing Lu, Zongming Zhu, Qiong Yao, Yuxiang Dai, Fanwen Wang, Yinzhe Wu, Jun Lyu, Qianqian Gao, Guangming Xu, Zhenxuan Zhang, Haosen Zhang, Qing Li, Guangming Wang, Tianxing He, Lizhen Lan, Siyue Li, Le Xue, Mengting Sun, Yuntong Lyu, Junpu Hu, Jiayu Zhu, Rizwan Ahmad, Zhengyu Bu, Xianling Qian, Guanke Cai, Ruiyu Cao, Weirui Cai, Chang Xu, Yuyang Ren, Feidan Yu, Siying Ma, Ziqiang Xu, Xinran Chen, Sha Hua, Daniel Kim, Yajing Zhang, Chen Ouyang, Wenjia Bai, Jing Qin, Yucheng Yang, Daniel Rueckert, He Wang, Qian Tao, Claudia Prieto, Michael Markl, Alistair A. Young, Lianming Wu, Shuo Wang, Chen Qin, Mengsu Zeng, Xihong Hu, Haibo Xu, Xiaobo Qu, Hao Li, Guang Yang, Chengyan Wang
2024 J jnl
BMC Medical Imaging
Zhiyong Jiang, Wenbo Sun, Dan Xu, Hao Mei, Jianmin Yuan, Xiaopeng Song, Chao Ma, Haibo Xu
2023 conf
ICARM
Jing Zhang, Jinliang Zhu, Na Wang, Aibin Zhu, Xin Wang, Zheng Zhang, Haibo Xu
2023 conf
ICARM
Yulin Zhang, Han Mao, Shuting Yu, Aibin Zhu, Xin Wang, Na Wang, Zheng Zhang, Haibo Xu
2023 conf
ICARM
Bingsheng Bao, Yao Tu, Diyang Dang, Aibin Zhu, Xin Wang, Xu Zhou, Chong Gao, Zheng Zhang, Haibo Xu
2023 conf
CECNet
Anming Xiong, Haibo Xu, Zhenglong Chen
2023 conf
ICARM
Yue Jia, Diyang Dang, Han Mao, Aibin Zhu, Xin Wang, Na Wang, Zheng Zhang, Haibo Xu
2023 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Shuhui Gong, Jiaxin Qin, Haibo Xu, Rui Cao, Yu Liu, Changfeng Jing, Yuxiu Hao, Yuchen Yang
2022 conf
HPCC/DSS/SmartCity/DependSys
Haibo Xu, Xiaoxiong Zhu, Qinglin Wang, Jie Liu
2022 J jnl
Comput. Biol. Medicine
Haibo Xu, Xiaowen Hu, Xiaoguang Yan, Wei Zhong, Dongsheng Yin, Yunfeng Gai
2022 J jnl
Int. J. Comput. Intell. Syst.
Jiao Bai, Jia Yang, Wanwan Song, Yumin Liu, Haibo Xu, Yang Liu
2022 J jnl
IEEE J. Biomed. Health Informatics
Yuexiang Li, Jiawei Chen, Dong Wei, Yanchun Zhu, Jianrong Wu, Junfeng Xiong, Yadong Gang, Wenbo Sun, Haibo Xu, Tianyi Qian, Kai Ma, Yefeng Zheng
2022 J jnl
Appl. Soft Comput.
Zhongwei Huang, Haijun Lei, Guoliang Chen, Haimei Li, Chuandong Li, Wenwen Gao, Yue Chen, Yaofa Wang, Haibo Xu, Guolin Ma, Baiying Lei
2022 J jnl
Frontiers Robotics AI
Ahmad Bala Alhassan, Xiaodong Zhang, Haiming Shen, Haibo Xu, Hamza K. Kadry, Gilbert Masengo
2021 J jnl
IEEE Access
Shumin Ma, Xiangning Lin, Zhengtian Li, Neng Jin, Zirui Rong, Peifu Zhang, Haibo Xu
2021 J jnl
IEEE Access
Shumin Ma, Xiangning Lin, Zhengtian Li, Neng Jin, Zirui Rong, Peifu Zhang, Haibo Xu
2021 J jnl
Games Econ. Behav.
Haibo Xu
2021 J jnl
Appl. Soft Comput.
Bo Wang, Shuo Jin, Qingsen Yan, Haibo Xu, Chuan Luo, Lai Wei, Wei Zhao, Xuexue Hou, Wenshuo Ma, Zhengqing Xu, Zhuozhao Zheng, Wenbo Sun, Lan Lan, Wei Zhang, Xiangdong Mu, Chenxi Shi, Zhongxiao Wang, Jihae Lee, Jiahong Dong
2021 J jnl
CoRR
Raunak Dey, Wenbo Sun, Haibo Xu, Yi Hong
2021 conf
ROBIO
Cunxin Li, Xiaodong Zhang, Hanzhe Li, Haibo Xu
2021 J jnl
NeuroImage
Bo Rao, Dan Xu, Chaoyang Zhao, Shouchao Wang, Xuan Li, Wenbo Sun, Yadong Gang, Jian Fang, Haibo Xu
2021 J jnl
Pattern Recognit.
Jipeng Wu, Haibo Xu, Shengchuan Zhang, Xi Li, Jie Chen, Jiawen Zheng, Yue Gao, Yonghong Tian, Yongsheng Liang, Rongrong Ji
2021 J jnl
Sci. Program.
Chao Zeng, Jing Chen, Wenbing Liu, Kang Liang, Hui Li, Jing Wang, Jingge Li, Haibo Xu
2020 J jnl
IEEE Trans. Instrum. Meas.
Liang Xu, Haibo Xu, Xiuxi Li, Ming Pan
2020 J jnl
Neural Comput. Appl.
Haibo Xu, Chengshun Jiang
2020 J jnl
KSII Trans. Internet Inf. Syst.
Cunbo Lu, Wengu Chen, Haibo Xu
2020 J jnl
IEEE J. Biomed. Health Informatics
Yuexiang Li, Dong Wei, Jiawei Chen, Shilei Cao, Hongyu Zhou, Yanchun Zhu, Jianrong Wu, Lan Lan, Wenbo Sun, Tianyi Qian, Kai Ma, Haibo Xu, Yefeng Zheng
2020 J jnl
J. Medical Imaging Health Informatics
Xu Li, Fei Weng, Wenbo Sun, Ruolan Liu, Haibo Xu
2020 J jnl
Neural Comput. Appl.
Haibo Xu, Chengshun Jiang
2019 J jnl
Sensors
Lanjun Liu, Zhibo Liao, Caiyi Chen, Jialin Chen, Jiong Niu, Yonggang Jia, Xiujun Guo, Zhaowei Chen, Li Deng, Haibo Xu, Tao Liu
2019 J jnl
KSII Trans. Internet Inf. Syst.
Cunbo Lu, Wengu Chen, Haibo Xu
2019 conf
ICIRA (6)
Haibo Xu, Li Liu, Jun Wang, Rui Wang, Xiaodong Liu
2019 conf
ICIRA (5)
Rui Wang, Haibo Xu, Jun Wang, Xiaodong Liu, Li Liu
2019 conf
ICIRA (6)
Xing Fan, Haibo Xu, Wenyu Huang, Yufeng Lin
2019 J jnl
Inf.
Qingming Zhang, Buhai Shi, Haibo Xu
2019 conf
RICAI
Wengyang Shen, Haibo Xu, Li Wang, Yingkun Qian
2019 J jnl
Comput. Aided Geom. Des.
Xinge Li, Yongjie Jessica Zhang, Xuyang Yang, Haibo Xu, Guoliang Xu
2019 conf
ICIRA (6)
Xiaodong Liu, Haibo Xu, Jun Wang, Rui Wang, Li Liu
2019 conf
RCAR
Jian Guo, Xiaodong Zhang, Haiming Shen, Haibo Xu
2019 conf
RICAI
Haibo Xu, Rui Wang, Li Wang, Yingkun Qian
2019 J jnl
J. Vis. Commun. Image Represent.
Xiaobing Ding, Zhigang Liu, Haibo Xu
2019 B conf
Big Data (CCF)
Haibo Xu, Chengshun Jiang
2014 C conf
DASC
Heng Qi, Haibo Xu, Keqiu Li, Jingyi Li
2014 B conf
IWCMC
Tao Qiu, Haibo Xu, Hua Zhou
2014 B conf
WCNC
Weiwei Wang, Haibo Xu, Hua Zhou
2012 conf
VTC Spring
Weiwei Wang, Yanling Lu, Haibo Xu, Hua Zhou
2012 B conf
PIMRC
Xinsheng Zhao, Haibo Xu, Xiaqing Yang
2010 J jnl
Comput. Electr. Eng.
Haibo Xu, Hui Tian, Ping Zhang
2010 J jnl
Sci. China Inf. Sci.
Haibo Xu, Hui Tian, Bo Huang, Ping Zhang
2009 conf
VTC Spring
Fan Jiang, Hui Tian, Haibo Xu, Xijun Wang
2009 J jnl
J. Commun.
Fan Jiang, Hui Tian, Haibo Xu, Ping Zhang, Jietao Zhang
2009 conf
EUSIPCO
Suhua Wei, Haibo Xu
2008 B conf
WCNC
Haibo Xu, Hui Tian, Yuan Feng, Youjun Gao, Ping Zhang
2008 conf
VTC Fall
Lei Zhou, Haibo Xu, Hui Tian, Youjun Gao, Lei Du, Lan Chen
2008 B conf
WCNC
Hui Tian, Haibo Xu, Youjun Gao, Shengdong Wang, Ping Zhang
2007 conf
VTC Fall
Lei Sun, Youjun Gao, Hui Tian, Haibo Xu, Ping Zhang
2007 conf
VTC Spring
Haibo Xu, Youjun Gao, Hui Tian, Yang Ji, Ping Zhang
2007 J jnl
IEEE Wirel. Commun.
Youjun Gao, Hui Tian, Lei Sun, Haibo Xu
2003 C conf
IGARSS
Anrong Dang, Sicong Zhang, Xindong He, Lihua Tang, Haibo Xu
1999 conf
HICSS
Salim Hariri, Pramod K. Varshney, Luying Zhou, Haibo Xu, Shihab Ghaya
1999 J jnl
Microprocess. Microsystems
Salim Hariri, Haibo Xu, Abdullah Balamash
redb/extractors/extractor.py
← Index redb/extractors/extractor.py python
import hashlib
import inspect
from abc import ABCMeta, abstractmethod
from dataclasses import asdict
from functools import cached_property
from datetime import datetime, timezone
import math
from typing import Counter, List, Optional, Dict, Any, Tuple
from redb import settings
from redb.models.dataclasses import Hash
from .database_exporters import DatabaseExporter, ElasticsearchExporter, ClickHouseExporter, PrintExporter

class Extractor(metaclass=ABCMeta):
    def __init__(
        self,
        filepath: str,
        log: Any,
        exporters: Optional[List[DatabaseExporter]] = None,
        index_prefix: Optional[str] = None,
        source: Optional[str] = None,
        elastic_index: Optional[str] = None,
        known_benign: bool = False,
        known_malicious: bool = False,
        precomputed_hashes: Optional[Dict[str, str]] = None,
    ):
        self.log = log
        self.log.debug(f"Creating {self.__class__.__name__}")
        self.filepath = filepath
        self.source = source
        self.exporters = exporters or []
        self.index_prefix = index_prefix if index_prefix else settings.ELASTIC_BINARIES_COLLECTION
        self.elastic_index = self.index_prefix + (elastic_index if elastic_index else "")
        self.known_benign = known_benign
        self.known_malicious = known_malicious

        # Use precomputed hashes if provided (e.g., from machofile, pefile)
        # Otherwise compute them from binary
        if precomputed_hashes:
            self.md5 = precomputed_hashes.get('md5') or precomputed_hashes.get('MD5')
            self.sha1 = precomputed_hashes.get('sha1') or precomputed_hashes.get('SHA1')
            self.sha256 = precomputed_hashes.get('sha256') or precomputed_hashes.get('SHA256')
        else:
            self.md5 = hashlib.md5(self.binary).hexdigest()
            self.sha1 = hashlib.sha1(self.binary).hexdigest()
            self.sha256 = hashlib.sha256(self.binary).hexdigest()
        self.hash = Hash(self.md5, self.sha1, self.sha256)

    @cached_property
    def binary(self):
        with open(self.filepath, "rb") as f:
            data = f.read()
        return data

    @property
    @abstractmethod
    def tag(self):
        pass

    @abstractmethod
    def extract(self):
        """
        this method defines the extracted data
        """

    @staticmethod
    def process_binary_string(s):
        # Remove \x00 padding
        s = s.rstrip(b"\x00")

        # Check if there are any non-printable characters
        has_non_printable = any(byte < 32 or byte > 126 for byte in s)

        if not has_non_printable:
            # If all characters are printable, decode the string
            return s.decode()
        else:
            # If there are non-printable characters, represent them as \xDD
            return "".join(
                [
                    f"\\x{byte:02x}" if byte < 32 or byte > 126 else chr(byte)
                    for byte in s
                ]
            )

    @staticmethod
    def remove_non_utf8(binary_string):
        decoded = b""
        for i in range(len(binary_string)):
            try:
                # Try to decode each byte
                char = binary_string[i : i + 1].decode("utf-8")
                decoded += char.encode("utf-8")
            except UnicodeDecodeError:
                # Skip this byte if it can't be decoded
                continue
        return decoded

    def calculate_entropy(self, data):
        """Calculate the entropy of a chunk of data.
        Based on pefile.SectionStructure.entropy_H.
        """
        # self.log.debug(inspect.currentframe().f_code.co_name)
        if not data:
            return 0.0

        if type(data) == str:
            counts = Counter(data)
            frequencies = ((i / len(data)) for i in counts.values())
            return - sum(f * math.log(f, 2) for f in frequencies)
        else:
            occurences = Counter(bytearray(data))
            entropy = 0
            for x in occurences.values():
                p_x = float(x) / len(data)
                entropy -= p_x * math.log(p_x, 2)
            return entropy

    @abstractmethod
    def prepare_export_data(self, exporter_type: str) -> Tuple[List[Any], List[str], List[str]]:
        """
        Prepare data for specific export type
        Returns:
            Tuple containing:
            - data: List of values to insert
            - column_names: List of column names
            - column_type_names: List of column types
        """
        pass

    def export_data(self):
        """Export data to all configured exporters

        Returns:
            True: Export succeeded
            False: Export failed (actual error)
            None: No data to export (not an error, e.g., no overlay, no signature)
        """
        self.log.debug(inspect.currentframe().f_code.co_name)
        success = True
        extracted_data = self.extract()

        if extracted_data is None:
            self.log.debug("extract() returned None, skipping export")
            return None  # No data to export, not a failure
            
        for exporter in self.exporters:
            if isinstance(exporter, PrintExporter):
                # For PrintExporter, we pass the extracted data directly
                success &= exporter.export(extracted_data)
            else:
                # Get the data prepared for this specific exporter type
                export_data = self.prepare_export_data(exporter.__class__.__name__)
                
                if export_data is None:
                    self.log.debug(f"prepare_export_data returned None for {exporter.__class__.__name__}")
                    return False
                
                if isinstance(exporter, ElasticsearchExporter):
                    success &= exporter.export(
                        export_data,
                        index=self.elastic_index,
                        tag=self.tag(),
                        hashes=asdict(self.hash),
                        known_benign=self.known_benign,
                        known_malicious=self.known_malicious
                    )
                elif isinstance(exporter, ClickHouseExporter):
                    # For ClickHouse, we need to pass the table name and the prepared data
                    success &= exporter.export(
                        export_data,
                        table=self.get_clickhouse_table(),
                        # Add these parameters explicitly
                        column_names=export_data[1] if isinstance(export_data, tuple) else None,
                        column_type_names=export_data[2] if isinstance(export_data, tuple) else None
                    )
                
        return success

    @abstractmethod
    def get_clickhouse_table(self) -> str:
        """Return the appropriate ClickHouse table name"""
        pass
    # def export_to_elastic(self, list_of_dataclasses, tag=None):
    #     self.log.debug(inspect.currentframe().f_code.co_name)

    #     if not isinstance(list_of_dataclasses, list):
    #         self.log.error("Called export_to_elastic wrongly")

    #     now_t = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
    #     for dataclass_ in list_of_dataclasses:
    #         if not settings.ELASTIC_CLIENT.ping():
    #             self.log.error("[CONNECTION ERROR] ping to elastic failed")
            
    #         # Convert dataclass to dict and filter out None values
    #         document = {k: v for k, v in asdict(dataclass_).items() if v is not None}
            
    #         if tag:
    #             document["tag"] = [tag, self.tag()]
    #         else:
    #             document["tag"] = self.tag()
    #         hashes = asdict(self.hash)
    #         document |= hashes
    #         document["timestamp_utc"] = now_t
    #         # document["source"] = self.source
    #         document["known_benign"] = self.known_benign
    #         document["known_malicious"] = self.known_malicious

    #         if "_id" in document:
    #             tmp_id = document.pop("_id") + document["sha256"]
    #             _id = hashlib.sha256(tmp_id.encode()).hexdigest()
    #         else:
    #             _id = document["sha256"]

    #         # self.log.debug(f"[DEBUG] about to export {type(document)} {document}")
    #         try:
    #             doc_dump = json.dumps(document)
    #         except TypeError as e:
    #             self.log.error(
    #                 f"Failed export of document. " f"full document: {document}"
    #             )
    #             raise e

    #         # body={"doc": doc_dump,
    #         #       "doc_as_upsert": True  # Create the document if it doesn't exist
    #         # }

    #         # Check if the index exists, and create it if it doesn't
    #         # if not settings.ELASTIC_CLIENT.indices.exists(index=self.elastic_index):
    #         #     settings.ELASTIC_CLIENT.indices.create(index=self.elastic_index)
    #         # pprint(doc_dump) #DEBUG
    #         # print("[DEBUG] _id: " + _id)
    #         # print("[DEBUG] index: " + self.elastic_index)
    #         settings.ELASTIC_CLIENT.index(
    #             index=self.elastic_index, id=_id, document=doc_dump
    #         )