Wanli Zhang

73 papers B 1C 1Journal 58Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
BMC Medical Imaging
Fangrong Liang, Xin Zhen, Jiaxin Lin, Junjie Li, Jie Zhan, Ruili Wei, Wanli Zhang, Yujie He, Mengni Wu, Yongzhou Xu, Yaou Liu, Shengsheng Lai, Ruimeng Yang
2026 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Ting Yang, Jie Yan, Li Cao, Wanli Zhang
2026 J jnl
Neurocomputing
Jie Yan, Wanli Zhang
2025 conf
MICCAI (6)
Yanyan Huang, Wanli Zhang, Peixiang Huang, Yu Fu, Ruimeng Yang, Lequan Yu
2025 J jnl
Int. J. Syst. Sci.
Li Cao, Wanli Zhang, Hui Guo
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yuanbing Wang, Wanli Zhang, Yaodeng Chen, Xin Li
2025 J jnl
IEEE Trans. Reliab.
Linwei Cao, YueXing Wang, Kun Liu, Xiangou Zhang, Shuairong Deng, Quanfeng Zhou, Xiangyu Sun, Wanli Zhang
2025 J jnl
IEEE Access
Zhonghua Yang, Sajay Bhuvanendran Nair Gourikutty, Hemanth Kumar Cheemalamarri, Arvind Sundaram, Yu Sun, Wenbo Luo, Wanli Zhang
2024 J jnl
J. Chem. Inf. Model.
Xiaochao Wang, Wanli Zhang, Wenxu Zhang
2024 J jnl
Neural Process. Lett.
Wenzhao Liu, Wanli Zhang, Kuiwu Yang, Yue Chen, Kaiwei Guo, Jianghong Wei
2024 conf
ICTA
Yizhuo Gao, Wenbo Luo, Shitian Huang, Wei Fan, Dailei Zhu, Xu Wang, Xinqiang Pan, Yao Shuai, Chuangui Wu, Wanli Zhang
2024 J jnl
Eng. Appl. Artif. Intell.
Hao Zhai, Wenyi Zheng, Yuncan Ouyang, Xin Pan, Wanli Zhang
2024 J jnl
Int. J. Fuzzy Syst.
Li Cao, Wanli Zhang
2024 J jnl
Int. J. Syst. Sci.
Jie Yan, Wanli Zhang, Ji Feng
2023 J jnl
Adv. Intell. Syst.
Jiejun Wang, Huizhong Zeng, Yiduo Xie, Zebin Zhao, Xinqiang Pan, Wenbo Luo, Yao Shuai, Ling Tang, Dailei Zhu, Qin Xie, Limin Wan, Chuangui Wu, Wanli Zhang
2023 J jnl
J. Comput. Inf. Sci. Eng.
Zhengyuan Feng, Xiaoliang Hu, Zengguo Tian, Baozhu Jiang, Hongshuai Zhang, Wanli Zhang
2023 J jnl
Circuits Syst. Signal Process.
Degang Yang, Li Lei, Wanli Zhang
2023 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Tao Liang, Wanli Zhang, Degang Yang
2023 J jnl
IFAC J. Syst. Control.
Dongmei Ruan, Shiju Yang, Wanli Zhang
2022 J jnl
Adv. Intell. Syst.
Xinqiang Pan, Jiejun Wang, Zhen Deng, Yao Shuai, Wenbo Luo, Qin Xie, Yao Xiao, Song Tang, Shuwen Jiang, Chuangui Wu, Feng Zhu, Jianwei Zhang, Wanli Zhang
2022 J jnl
J. Inf. Secur. Appl.
Xuemei Bai, Yong Chen, Gangpeng Duan, Chao Feng, Wanli Zhang
2022 J jnl
Math. Comput. Simul.
Tao Liang, Degang Yang, Li Lei, Wanli Zhang, Ju Pan
2022 J jnl
Appl. Math. Comput.
Shiju Yang, Chuandong Li, Xiping He, Wanli Zhang
2021 J jnl
Comput. Intell. Neurosci.
Ji Feng, Bokai Zhang, Ruisheng Ran, Wanli Zhang, Degang Yang
2021 conf
ICIC (1)
Junqiang Li, Chao Wang, Lin Cui, Zhiwei Zhang, Wenquan Tian, Zhenggao Pan, Wanli Zhang, Xiaoying Yang, Guolong Chen
2021 J jnl
Sensors
Ling Dong, Yang Li, Jingwen Lv, Hongchuan Jiang, Wanli Zhang
2021 J jnl
Math. Comput. Simul.
Wanli Zhang, Xinsong Yang, Shiju Yang, Ahmed Alsaedi
2021 J jnl
Neural Comput. Appl.
Wanli Zhang, Xinsong Yang, Shiju Yang, Chuangxia Huang, Fuad E. Alsaadi
2020 J jnl
Traitement du Signal
Wanli Zhang, Xianwei Li, Qixiang Song, Wei Lu
2020 conf
INFOCOM Workshops
Jifan Tang, Wanli Zhang, Xiangyang Gong, Guangpeng Li, Delei Yu, Ye Tian, Bowen Liu, Lei Zhao
2020 J jnl
Sensors
Tao Wang, Zhengjie Tang, Huamao Lin, Kun Zhan, Jiang Wan, Shihao Wu, Yuandong Gu, Wenbo Luo, Wanli Zhang
2020 J jnl
Neural Networks
Wanli Zhang, Chuandong Li, Hongfei Li, Xinsong Yang
2020 J jnl
Wirel. Commun. Mob. Comput.
Wanli Zhang, Xianwei Li, Liang Zhao, Xiaoying Yang
2020 J jnl
Appl. Math. Comput.
Xiangze Lin, Wanli Zhang, Shuaiting Huang, Enlai Zheng
2020 J jnl
J. Frankl. Inst.
Xiangze Lin, Zhonglin Yang, Wanli Zhang, Yun Zou
2020 J jnl
Neural Comput. Appl.
Wanli Zhang, Shiju Yang, Chuandong Li, Hongfei Li
2020 conf
NEMS
Kaisheng Zhang, Wenbo Luo, Tao Wang, Jing Yang, Yupeng Yuan, Zuwei Zhang, Yao Shuai, Chuangui Wu, Wanli Zhang
2020 B conf
ICNP
Wanli Zhang, Xiangyang Gong, Ye Tian, Jifan Tang
2020 J jnl
IEEE Access
Wanli Zhang, Guangzhao Wang, Minghua Tang, Lian Cui, Teng Wang, Pengyu Su, Zhuojun Chen, Xiaojiang Long, Yongguang Xiao, Shaoan Yan
2020 J jnl
IEEE Trans. Cybern.
Yiyan Han, Chuandong Li, Wanli Zhang, Hafiz Gulfam Ahmad
2020 J jnl
IEEE Access
Wanli Zhang, Xianwei Li, Liang Zhao, Xiaoying Yang, Tao Liu, Wei Yang
2020 J jnl
Int. J. Comput. Commun. Control
Wanli Zhang, Xiaoying Yang, Qixiang Song, Liang Zhao
2020 J jnl
Int. J. Comput. Commun. Control
Xiaoying Yang, Wanli Zhang, Hongmei Lu, Liang Zhao
2019 J jnl
Clust. Comput.
Longqin Yao, Hengquan Zhang, Chenjun Zhang, Wanli Zhang
2019 J jnl
Neural Process. Lett.
Wanli Zhang, Shiju Yang, Chuandong Li, Zunbin Li
2019 J jnl
IEEE CAA J. Autom. Sinica
Xiangze Lin, Shuaiting Huang, Wanli Zhang, Shihua Li
2019 J jnl
IEEE Trans. Cybern.
Wanli Zhang, Xinsong Yang, Chuandong Li
2019 J jnl
Fuzzy Sets Syst.
Shiju Yang, Chuandong Li, Tingwen Huang, Wanli Zhang
2019 J jnl
Sensors
Hongchuan Jiang, Yibing Yu, Luying Zhang, Jun Zhu, Xiaohui Zhao, Wanli Zhang
2019 J jnl
Neural Comput. Appl.
Hongfei Li, Wei Zhang, Chuandong Li, Wanli Zhang
2019 J jnl
Sensors
Hongchuan Jiang, Xiaoyu Tian, Xinwu Deng, Xiaohui Zhao, Luying Zhang, Wanli Zhang, Jianfeng Zhang, Yifan Huang
2018 J jnl
Sensors
Tao Wang, Jiejun Wang, Jian He, Chuangui Wu, Wenbo Luo, Yao Shuai, Wanli Zhang, Xiancai Chen, Jian Zhang, Jia Lin
2018 conf
NEMS
Tao Wang, Lu Lv, Jiejun Wang, Jian He, Qiuyan Li, Chuangui Wu, Wenbo Luo, Yao Shuai, Wanli Zhang
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Wanli Zhang, Xinsong Yang, Chen Xu, Jianwen Feng, Chuandong Li
2018 J jnl
Neural Networks
Hongfei Li, Chuandong Li, Tingwen Huang, Wanli Zhang
2018 J jnl
Int. J. Online Eng.
Xiaoying Yang, Wanli Zhang, Qixiang Song
2018 J jnl
Sensors
Hongchuan Jiang, Min Huang, Yibing Yu, Xiaoyu Tian, Xiaohui Zhao, Wanli Zhang, Jianfeng Zhang, Yifan Huang, Kun Yu
2018 conf
NEMS
Tao Wang, Jiejun Wang, Jian He, Qiuyan Li, Lu Lv, Chuangui Wu, Wenbo Luo, Yao Shuai, Wanli Zhang
2018 conf
NEMS
Tao Wang, Jiejun Wang, Jian He, Qiuyan Li, Lu Lv, Chuangui Wu, Wenbo Luo, Yao Shuai, Wanli Zhang
2018 J jnl
Sensors
Tao Wang, Jiejun Wang, Jian He, Chuangui Wu, Wenbo Luo, Yao Shuai, Wanli Zhang, Chengkuo Lee
2018 conf
NEMS
Tao Wang, Qiuyan Li, Jiejun Wang, Lu Lv, Jian He, Wenbo Luo, Chuangui Wu, Yao Shuai, Wanli Zhang
2018 conf
NEMS
Tao Wang, Jian He, Jiejun Wang, Lu Lv, Qiuyan Li, Wenbo Luo, Chuangui Wu, Yao Shuai, Wanli Zhang
2018 J jnl
Neural Networks
Wanli Zhang, Shiju Yang, Chuandong Li, Wei Zhang, Xinsong Yang
2017 J jnl
Neural Process. Lett.
Chao Zhou, Wanli Zhang, Xinsong Yang, Chen Xu, Jianwen Feng
2016 J jnl
Int. J. Online Eng.
Xiaoying Yang, Wanli Zhang, Qixiang Song
2016 J jnl
Optim. Lett.
Yuan Mei Xia, Wanli Zhang, Ke Quan Zhao
2016 J jnl
Sensors
Lin Shu, Bin Peng, Yilin Cui, Dongdong Gong, Zhengbing Yang, Xingzhao Liu, Wanli Zhang
2016 J jnl
Sensors
Lin Shu, Bin Peng, Chuan Li, Dongdong Gong, Zhengbing Yang, Xingzhao Liu, Wanli Zhang
2015 J jnl
Int. J. Online Eng.
Xiaoying Yang, Wanli Zhang, Qixiang Song
2015 conf
BDCloud
Wanli Zhang, Guoxin Li, Lirong Wang
2015 conf
BDCloud
Guoxin Li, Wanli Zhang, Lirong Wang
2015 conf
BDCloud
Wanli Zhang, Guoxin Li, Lirong Wang
2014 C conf
DASC
Wanli Zhang, Guoxin Li, Lirong Wang
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
    #         )