Hanbing Zhang

29 papers A* 2C 2Journal 14Unranked 11
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Fangguo Zhao, Hanbing Zhang, Zhouheng Li, Xin Guan, Shuo Li
2025 J jnl
Neurocomputing
Hanbing Zhang, Shaohui Yan, Yuyan Zhang
2025 J jnl
Eng. Comput.
Hanbing Zhang, Meng Wu, Luo Jiang, Jinhua Fan
2025 J jnl
Integr.
Shaohui Yan, Rong Lu, Hanbing Zhang
2025 J jnl
Proc. ACM Manag. Data
Hanbing Zhang, Yinan Jing, Zhenying He, Kai Zhang, X. Sean Wang
2025 conf
BigComp
Hanbing Zhang, Yinan Jing, Wei Zhang, Zhenying He, Kai Zhang, X. Sean Wang, Zhenqiang Chen, Changchun Zhang
2025 J jnl
Comput. Methods Programs Biomed.
Hanbing Zhang, Shiliang Chen, Tianming Du, Yanping Zhang, Lifang Wu, Aike Qiao
2025 conf
MLIC
Hanbing Zhang, Guohua Zhao, Yusong Lin
2025 J jnl
J. Syst. Control. Eng.
Hanbing Zhang, Zeyang Yin, Caisheng Wei
2025 J jnl
Inf. Process. Manag.
Hanbing Zhang, Yinan Jing, Fei Zhang, Zhixin Li, X. Sean Wang, Zhenqiang Chen, Cheng Lv
2024 conf
CVDL
Hanbing Zhang, Dejun Cheng
2024 J jnl
IEEE Multim.
Shaohui Yan, Yu Cui, Lin Li, Yuyan Zhang, Defeng Jiang, Hanbing Zhang
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Liyuan Liu, Hanbing Zhang, Yinan Jing, Zhenying He, Kai Zhang, X. Sean Wang
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Hanbing Zhang, Yinan Jing, Zhenying He, Kai Zhang, X. Sean Wang
2024 conf
VTC Spring
Hanbing Zhang, Jian Wang, Ying Li
2024 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Shaohui Yan, Hanbing Zhang, Defeng Jiang
2024 conf
DASFAA (4)
Hanbing Zhang, Wei Zhang, Yinan Jing, Zhenying He, Kai Zhang, Shiwei Shi, X. Sean Wang
2023 C conf
iSPEC
Hua Feng, Shiqi Sun, Hanbing Zhang, Jichao Ye, Ning Ding, Yonghai Xu
2023 A* conf
WWW
Yimeng Qiao, Yinan Jing, Hanbing Zhang, Zhenying He, Kai Zhang, X. Sean Wang
2023 C conf
iSPEC
Jichao Ye, Hanbing Zhang, Hui Huang, Xinwei Hu, Xinhua Wu, Yonghai Xu, Chao Yang
2023 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Yinggang Liu, Hong Fu, Ying Wei, Hanbing Zhang
2022 conf
DASFAA (1)
Tianyu Xia, Hanbing Zhang, Yinan Jing, Zhenying He, Kai Zhang, X. Sean Wang
2022 conf
DASFAA (1)
Wenyuan Bi, Hanbing Zhang, Yinan Jing, Zhenying He, Kai Zhang, X. Sean Wang
2022 conf
DASFAA (1)
Hang Zhao, Hanbing Zhang, Yinan Jing, Kai Zhang, Zhenying He, X. Sean Wang
2021 J jnl
Data Sci. Eng.
Yazhong Zhang, Hanbing Zhang, Zhenying He, Yinan Jing, Kai Zhang, X. Sean Wang
2020 A* conf
ICDE
Hanbing Zhang, Yazhong Zhang, Zhenying He, Yinan Jing, Kai Zhang, X. Sean Wang
2020 conf
DASFAA (2)
Yazhong Zhang, Hanbing Zhang, Zhenying He, Yinan Jing, Kai Zhang, X. Sean Wang
2019 conf
IOT
Farshid Tavakolizadeh, Sisay Adugna Chala, Hanbing Zhang
2016 conf
ICYCSEE (1)
Hanbing Zhang, Yan Yang, Zhaogong Zhang
redb/extractors/basicproperties.py
← Index redb/extractors/basicproperties.py python
from dataclasses import asdict
import inspect
import os
import magic
from magika import Magika
from datetime import datetime, timezone
from typing import Any, List, Tuple

from redb.extractors.enum import Tag
from redb.models.dataclasses import BasicProperties
from redb.extractors.extractor import Extractor


class BasicPropertiesExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        parent_sha256=None,
        precomputed_hashes=None,
        is_fat=None,
        child_sha256=None,
        child_architecture=None,
        child_filetype=None,
        first_seen=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters=exporters,
            index_prefix=index_prefix,
            elastic_index=elastic_index,
            known_benign=known_benign,
            known_malicious=known_malicious,
            precomputed_hashes=precomputed_hashes,
        )
        self.basic_properties = None
        self.elastic_index = self.index_prefix + "-basic_properties"
        self.is_packed = None
        self.parent_sha256 = parent_sha256  # For FAT Mach-O slices, points to container hash
        self.is_fat = is_fat  # True for FAT Mach-O containers, None otherwise
        self.child_sha256 = child_sha256  # SHA256 hashes of children (FAT slices, zip contents)
        self.child_architecture = child_architecture  # Architecture names for FAT Mach-O slices
        self.child_filetype = child_filetype  # Magika filetypes for children (useful for zip archives)
        self.first_seen = first_seen  # From catalog_samples, None for local files

    def tag(self):
        return Tag.BASIC_PROPERTIES.value

    def _extract_basic_properties(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        filename = None  # Reserved for future use
        sample_name = os.path.basename(self.filepath)
        file_entropy = round(self.calculate_entropy(self.binary), 3)
        type_ = magic.from_buffer(self.binary)
        type_mime = magic.from_buffer(self.binary, mime=True)
        type_magika = Magika().identify_bytes(self.binary).output.label
        size = len(self.binary)
        self.basic_properties = BasicProperties(
            filename, sample_name, size, type_, type_mime, type_magika,
            file_entropy, self.is_packed, self.is_fat, self.child_sha256,
            self.child_architecture, self.child_filetype,
            first_seen=str(self.first_seen) if self.first_seen else None,
        )
        self.log.debug(f"Basic Properties dump: {asdict(self.basic_properties)}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_basic_properties()
            # self.export_to_elastic([self.basic_properties])
            return self.basic_properties
        except Exception as e:
            self.log.error(f"Extract basic properties error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.basic_properties
        elif exporter_type == "ClickHouseExporter":
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                self.parent_sha256,  # NULL for standalone/FAT, fat_hash for slices
                self.basic_properties.child_sha256 or [],  # SHA256 hashes of children
                self.basic_properties.child_architecture or [],  # Architecture names for FAT slices
                self.basic_properties.child_filetype or [],  # Magika filetypes for children
                self.basic_properties.is_fat,  # True for FAT Mach-O containers, NULL otherwise
                self.basic_properties.filename,
                self.basic_properties.sample_name,
                self.basic_properties.filesize,
                self.basic_properties.file_entropy,
                self.basic_properties.filetype,
                self.basic_properties.filetype_mime,
                self.basic_properties.filetype_magika,
                self.first_seen or datetime(1970, 1, 1, tzinfo=timezone.utc),  # From catalog_samples, epoch zero for local files (uses original datetime, not string)
                datetime.now(timezone.utc)
            ]]

            column_names = [
                'sha256', 'md5', 'sha1', 'parent_sha256', 'child_sha256', 'child_architecture', 'child_filetype',
                'is_fat', 'filename', 'sample_name',
                'filesize', 'file_entropy', 'filetype', 'filetype_mime',
                'filetype_magika', 'first_seen', 'analysis_date'
            ]

            column_type_names = [
                'String', 'String', 'String', 'Nullable(String)',
                'Array(FixedString(64))', 'Array(LowCardinality(String))', 'Array(LowCardinality(String))',
                'Nullable(UInt8)', 'Nullable(String)', 'String',
                'UInt64', 'Float64', 'LowCardinality(String)',
                'LowCardinality(String)', 'LowCardinality(String)',
                'DateTime64(3, \'UTC\')',
                'DateTime64(3, \'UTC\')'
            ]

            return data, column_names, column_type_names

    def get_clickhouse_table(self) -> str:
        return "redb_basic_properties"