Xiaojian Hu

35 papers Journal 32Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Liangcheng Xu, Xiaojian Hu, Zhening Wu, Suizhi Luo, Jingsheng Feng, Xiulei Zhang
2026 J jnl
Sci. China Inf. Sci.
Qinyu Zhang, Jianhao Huang, Jian Jiao, Liang Xu, Hao Liu, Yao Shi, Xingjian Zhang, Ye Wang, Shunyao Yang, Ke Zhang, Zhen Gao, Shuai Wang, Li You, Dongming Wang, Dixian Zhao, Ke Li, Jiaxi Zhou, Zhe Ji, Xiaojian Hu, Jianing Si, Zhichong Hou, Liujun Hu, Deyou Zhang, Yuan Ma, Nan Zhao, Sheng Wu, Tao Jiang, Xiqi Gao, Xiaohu You
2025 J jnl
ISPRS Int. J. Geo Inf.
Xiatong Hao, Xiaojian Hu, Ke Zhang, Qian Chen
2025 J jnl
IEEE Trans. Intell. Transp. Syst.
Chenxi Lin, Xiaojian Hu
2025 J jnl
Kybernetes
Ammar Yasir, Xiaojian Hu, Murat Aktan, Pablo Farías, Abdul Rauf
2025 J jnl
IEEE Trans. Instrum. Meas.
Xiaojian Hu, Chenxi Lin
2025 J jnl
Comput. Ind. Eng.
Jingsheng Feng, Xiaojian Hu, Liangcheng Xu, Suizhi Luo, Jingxian Chen
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Hao Chen, Junxiang Tan, Xiongjie Wang, Xiangjun Wang, Xiubo Wu, Ronghao Yang, Xiaojian Hu
2024 J jnl
Expert Syst. Appl.
Liangcheng Xu, Xiaojian Hu, Yue Zhang, Jingsheng Feng, Suizhi Luo
2024 J jnl
Int. J. Intell. Syst.
Gang Yao, Xiaojian Hu, Pingfan Song, Taiyun Zhou, Yue Zhang, Ammar Yasir, Suizhi Luo
2024 J jnl
J. Imaging
Cheng Jian, Tiancheng Xie, Xiaojian Hu, Jian Lu
2024 J jnl
Appl. Soft Comput.
Chenxi Lin, Xiaojian Hu
2024 J jnl
Kybernetes
Guanxiong Wang, Xiaojian Hu, Ting Wang
2024 J jnl
Expert Syst. Appl.
Chenxi Lin, Xiaojian Hu, Yunfei Zhan, Xiatong Hao
2024 J jnl
Neural Comput. Appl.
Xiaojian Hu, Liangcheng Xu, Gang Yao, Zhening Wu
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Fang Zhang, Jian Lu, Xiaojian Hu
2024 J jnl
Comput. Ind. Eng.
Xiaojian Hu, Xiulei Zhang, Liangcheng Xu, Jingsheng Feng, Suizhi Luo
2024 J jnl
Multim. Tools Appl.
Qiang Zhang, Xiaojian Hu
2024 J jnl
Int. J. Intell. Syst.
Guanxiong Wang, Xiaojian Hu, Ting Wang, Jiqiong Liu, Shuai Feng, Chuanlei Wang
2023 J jnl
Axioms
Yue Zhang, Xiaojian Hu
2023 J jnl
IEEE Trans. Instrum. Meas.
Qiang Zhang, Xiaojian Hu
2023 J jnl
Signal Image Video Process.
Xiaojian Hu, Qiang Zhang
2023 J jnl
J. Supercomput.
Ziyi Su, Tong Liu, Xiatong Hao, Xiaojian Hu
2023 J jnl
Kybernetes
Gang Yao, Xiaojian Hu, Liangcheng Xu, Zhening Wu
2022 J jnl
Expert Syst. Appl.
Gang Yao, Xiaojian Hu, Guanxiong Wang
2022 J jnl
J. Supercomput.
Xiaojian Hu, Tong Liu, Xiatong Hao, Chenxi Lin
2022 J jnl
Expert Syst. J. Knowl. Eng.
Gang Yao, Xiaojian Hu, Taiyun Zhou, Yue Zhang
2021 J jnl
IEEE Access
Shuai Feng, Jiqiong Liu, Xiaojian Hu
2020 J jnl
Comput. Ind. Eng.
Guanxiong Wang, Xiaojian Hu, Xiaozheng Li, Yue Zhang, Shuai Feng, Aifeng Yang
2020 J jnl
Neural Comput. Appl.
Haining Ding, Xiaojian Hu, Xiaoan Tang
2015 J jnl
Comput. Intell. Neurosci.
Xiaojian Hu, Jian Lu, Wei Wang, Zhirui Ye
2012 J jnl
Expert Syst. Appl.
He Luo, Shanlin Yang, Xiaojian Hu, Xiaoxuan Hu
2011 conf
ICEIS (4)
Xiaojian Hu, Feixiang Gong, Yanjiao Kan
2007 conf
FSKD (2)
He Luo, Shanlin Yang, Chao Fu, Xiaojian Hu
2006 conf
ISDA (1)
Fengjian Yang, Chaolong Zhang, Dongqing Wu, Xiaojian Hu
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"