Wei Liu

31 papers A 1Journal 15Unranked 15
YearRankTypeTitle / Venue / Authors
2025 A conf
ICME
Teng Xiao, Qi Hu, Qingsong Yan, Wei Liu, Zhiwei Ye, Fei Deng
2025 J jnl
CoRR
Teng Xiao, Qi Hu, Qingsong Yan, Wei Liu, Zhiwei Ye, Fei Deng
2025 J jnl
Expert Syst. Appl.
Mingwei Wang, Sheng Li, Chong Cheng, Maolin Chen, Wei Liu, Zhiwei Ye
2025 J jnl
J. Electronic Imaging
Wei Liu, Wenxiang Song, Yao Tong, Zhiwei Ye
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Kaixiong Wu, Mingwei Wang, Haipeng Luo, Maolin Chen, Yujie Xu, Wei Liu
2024 J jnl
Expert Syst. Appl.
Mingwei Wang, Haoming Zhang, Biyu Yin, Maolin Chen, Wei Liu, Zhiwei Ye
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Chong Cheng, Mingwei Wang, Kaixiong Wu, Wei Liu, Zeyu Tang, Maolin Chen
2024 J jnl
Sensors
Shiyi Luo, Fang Wan, GuangBo Lei, Li Xu, Zhiwei Ye, Wei Liu, Wen Zhou, Chengzhi Xu
2024 J jnl
Sensors
Mengqing Mei, Ziyu Zhou, Wei Liu, Zhiwei Ye
2024 J jnl
Remote. Sens.
Sheng Li, Mingwei Wang, Chong Cheng, Xianjun Gao, Zhiwei Ye, Wei Liu
2023 conf
COLINS (1)
Wei Liu, Junwei Li, Zhiwei Ye, Orest Kochan
2021 J jnl
Appl. Soft Comput.
Mingwei Wang, Wei Liu, Maolin Chen, Xiaohui Huang, Wei Han
2021 J jnl
Sci. Program.
Lingyi Cai, Wei Liu
2021 conf
ICAIIS
Lingyi Cai, Wei Liu
2020 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Wei Liu, Shuai Yang, Zhiwei Ye, Qian Huang, Yongkun Huang
2019 conf
IDAACS
Ziwei Wang, Zhiwei Ye, Wei Liu, Mingwei Hu, Yuanzhi Tang, Li Zhang, Ming Wei
2019 conf
IDAACS
Wei Liu, Mingwei Hu, Zhiwei Ye, Yuanzhi Tang, Ziwei Wang, Li Zhang, Ming Wei
2019 conf
IDAACS
Xinlu Zong, Jiayuan Du, Wei Liu, Lu Zhang, Qian Huang
2019 conf
IDAACS
Zhiwei Ye, Yuanzhi Tang, Wei Liu, Mingwei Hu, Ziwei Wang, Li Zhang, Ming Wei
2018 J jnl
Entropy
Zhiwei Ye, Juan Yang, Mingwei Wang, Xinlu Zong, Lingyu Yan, Wei Liu
2018 conf
IDAACS-SWS
Wei Liu, Shuai Yang, Shuang Sun, Siwei Wei
2018 conf
CISP-BMEI
Wei Liu, Heng Shi, Shang Pan, Yongkun Huang, Yingbin Wang
2018 conf
IDAACS-SWS
Wei Liu, Yongkun Huang, Xinlu Zong, Heng Shi, Zhiwei Ye, Siwei Wei
2018 conf
IDAACS-SWS
Wei Liu, Yuanyuan Xiong, Xinlu Zong, Wei Siwei
2017 conf
SPAC
Xu Zhang, Zhiwei Ye, Juan Yang, Wei Liu, Huazhong Jin
2017 conf
SPAC
Juan Yang, Zhiwei Ye, Xu Zhang, Wei Liu, Huazhong Jin
2016 conf
CCBD
Wei Liu, Xiaojie Deng, Heng Shi
2015 J jnl
Comput. Intell. Neurosci.
Zhiwei Ye, Mingwei Wang, Zhengbing Hu, Wei Liu
2015 conf
IDAACS
Wei Zhao, Zhiwei Ye, Mingwei Wang, Lie Ma, Wei Liu
2015 J jnl
Appl. Soft Comput.
Zhiwei Ye, Mingwei Wang, Wei Liu, Shao-Bin Chen
2008 conf
MCO
Weixing Wang, Chunzhi Wang, Yanzhong Hu, Wei Liu
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"